From 7173dfb5d6dfb534726d70e50f382a46c6e0f5d1 Mon Sep 17 00:00:00 2001 From: achowdhry-ripple Date: Tue, 25 Feb 2025 10:29:45 -0500 Subject: [PATCH] Add Credentials and PermissionedDomain tx Support (#1118) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## High Level Overview of Change Adds CredentialCreate, CredentialAccept, CredentialDelete, PermissionedDomainDelete, and PermissionedDomainSet transaction pages to the explorer. ### Context of Change https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0070d-credentials https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0080d-permissioned-domains ### Type of Change - [ ] Bug fix (non-breaking change which fixes an issue) - [x] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) - [ ] Refactor (non-breaking change that only restructures code) - [ ] Tests (You added tests for code that already exists, or your new feature included in this PR) - [ ] Documentation Updates - [ ] Translation Updates - [ ] Release ### TypeScript/Hooks Update - [ ] Updated files to React Hooks - [ ] Updated files to TypeScript ## Before / After CredentialAccept Simple Screenshot 2025-02-20 at 1 29 42 PM CredentialCreate Simple Screenshot 2025-02-20 at 1 31 04 PM CredentialDelete Simple Screenshot 2025-02-20 at 1 31 50 PM CredentialAccept TableDetail Screenshot 2025-02-20 at 1 52 37 PM CredentialCreate TableDetail Screenshot 2025-02-20 at 1 53 56 PM CredentialDelete TableDetail Screenshot 2025-02-20 at 1 58 52 PM PermissionedDomainSet Simple Screenshot 2025-02-20 at 5 10 59 PM PermissionedDomainDelete Simple Screenshot 2025-02-20 at 5 11 56 PM PermissionedDomainSet TableDetail PermissionedDomainDelete TableDetail ## Test Plan --------- Co-authored-by: Kenny Lei <3003853+kennyzlei@users.noreply.github.com> --- package-lock.json | 54 +++------ package.json | 2 +- public/locales/ca-CA/translations.json | 11 ++ public/locales/en-US/translations.json | 14 ++- public/locales/es-ES/translations.json | 13 ++- public/locales/fr-FR/translations.json | 11 ++ public/locales/ja-JP/translations.json | 11 ++ public/locales/ko-KR/translations.json | 11 ++ .../Transaction/CredentialAccept/Simple.tsx | 25 ++++ .../CredentialAccept/TableDetail.tsx | 26 +++++ .../Transaction/CredentialAccept/index.ts | 15 +++ .../test/CredentialAcceptSimple.test.tsx | 15 +++ .../test/CredentialAcceptTableDetail.test.tsx | 20 ++++ .../test/mock_data/CredentialAccept.json | 86 ++++++++++++++ .../Transaction/CredentialCreate/Simple.tsx | 55 +++++++++ .../CredentialCreate/TableDetail.tsx | 44 +++++++ .../Transaction/CredentialCreate/index.ts | 15 +++ .../test/CredentialCreateSimple.test.tsx | 19 +++ .../test/CredentialCreateTableDetail.test.tsx | 21 ++++ .../test/mock_data/CredentialCreate.json | 81 +++++++++++++ .../Transaction/CredentialDelete/Simple.tsx | 38 ++++++ .../CredentialDelete/TableDetail.tsx | 36 ++++++ .../Transaction/CredentialDelete/index.ts | 15 +++ .../test/CredentialDeleteSimple.test.tsx | 20 ++++ .../test/CredentialDeleteTableDetail.test.tsx | 23 ++++ .../test/mock_data/CredentialDelete.json | 108 ++++++++++++++++++ .../PermissionedDomainDelete/Simple.tsx | 20 ++++ .../PermissionedDomainDelete/TableDetail.tsx | 18 +++ .../PermissionedDomainDelete/index.ts | 15 +++ .../PermissionedDomainDeleteSimple.test.tsx | 18 +++ ...rmissionedDomainDeleteTableDetail.test.tsx | 17 +++ .../mock_data/PermissionedDomainDelete.json | 83 ++++++++++++++ .../PermissionedDomainSet/Simple.tsx | 32 ++++++ .../PermissionedDomainSet/TableDetail.tsx | 30 +++++ .../PermissionedDomainSet/index.ts | 15 +++ .../test/PermissionedDomainSetSimple.test.tsx | 24 ++++ .../PermissionedDomainSetTableDetail.test.tsx | 20 ++++ .../test/mock_data/PermissionedDomainSet.json | 86 ++++++++++++++ .../shared/components/Transaction/index.ts | 10 ++ 39 files changed, 1137 insertions(+), 40 deletions(-) create mode 100644 src/containers/shared/components/Transaction/CredentialAccept/Simple.tsx create mode 100644 src/containers/shared/components/Transaction/CredentialAccept/TableDetail.tsx create mode 100644 src/containers/shared/components/Transaction/CredentialAccept/index.ts create mode 100644 src/containers/shared/components/Transaction/CredentialAccept/test/CredentialAcceptSimple.test.tsx create mode 100644 src/containers/shared/components/Transaction/CredentialAccept/test/CredentialAcceptTableDetail.test.tsx create mode 100644 src/containers/shared/components/Transaction/CredentialAccept/test/mock_data/CredentialAccept.json create mode 100644 src/containers/shared/components/Transaction/CredentialCreate/Simple.tsx create mode 100644 src/containers/shared/components/Transaction/CredentialCreate/TableDetail.tsx create mode 100644 src/containers/shared/components/Transaction/CredentialCreate/index.ts create mode 100644 src/containers/shared/components/Transaction/CredentialCreate/test/CredentialCreateSimple.test.tsx create mode 100644 src/containers/shared/components/Transaction/CredentialCreate/test/CredentialCreateTableDetail.test.tsx create mode 100644 src/containers/shared/components/Transaction/CredentialCreate/test/mock_data/CredentialCreate.json create mode 100644 src/containers/shared/components/Transaction/CredentialDelete/Simple.tsx create mode 100644 src/containers/shared/components/Transaction/CredentialDelete/TableDetail.tsx create mode 100644 src/containers/shared/components/Transaction/CredentialDelete/index.ts create mode 100644 src/containers/shared/components/Transaction/CredentialDelete/test/CredentialDeleteSimple.test.tsx create mode 100644 src/containers/shared/components/Transaction/CredentialDelete/test/CredentialDeleteTableDetail.test.tsx create mode 100644 src/containers/shared/components/Transaction/CredentialDelete/test/mock_data/CredentialDelete.json create mode 100644 src/containers/shared/components/Transaction/PermissionedDomainDelete/Simple.tsx create mode 100644 src/containers/shared/components/Transaction/PermissionedDomainDelete/TableDetail.tsx create mode 100644 src/containers/shared/components/Transaction/PermissionedDomainDelete/index.ts create mode 100644 src/containers/shared/components/Transaction/PermissionedDomainDelete/test/PermissionedDomainDeleteSimple.test.tsx create mode 100644 src/containers/shared/components/Transaction/PermissionedDomainDelete/test/PermissionedDomainDeleteTableDetail.test.tsx create mode 100644 src/containers/shared/components/Transaction/PermissionedDomainDelete/test/mock_data/PermissionedDomainDelete.json create mode 100644 src/containers/shared/components/Transaction/PermissionedDomainSet/Simple.tsx create mode 100644 src/containers/shared/components/Transaction/PermissionedDomainSet/TableDetail.tsx create mode 100644 src/containers/shared/components/Transaction/PermissionedDomainSet/index.ts create mode 100644 src/containers/shared/components/Transaction/PermissionedDomainSet/test/PermissionedDomainSetSimple.test.tsx create mode 100644 src/containers/shared/components/Transaction/PermissionedDomainSet/test/PermissionedDomainSetTableDetail.test.tsx create mode 100644 src/containers/shared/components/Transaction/PermissionedDomainSet/test/mock_data/PermissionedDomainSet.json diff --git a/package-lock.json b/package-lock.json index 0a0670ee0..97cdf0b33 100644 --- a/package-lock.json +++ b/package-lock.json @@ -111,7 +111,7 @@ "ts-jest": "^26.5.6", "ts-node": "^10.9.2", "typescript": "^4.9.5", - "xrpl": "^3.1.0" + "xrpl": "^4.2.0" }, "engines": { "node": ">=18.0.0 <19", @@ -24701,9 +24701,9 @@ } }, "node_modules/ripple-binary-codec": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ripple-binary-codec/-/ripple-binary-codec-2.1.0.tgz", - "integrity": "sha512-q0GAx+hj3UVcDbhXVjk7qeNfgUMehlElYJwiCuIBwqs/51GVTOwLr39Ht3eNsX5ow2xPRaC5mqHwcFDvLRm6cA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ripple-binary-codec/-/ripple-binary-codec-2.3.0.tgz", + "integrity": "sha512-CPMzkknXlgO9Ow5Qa5iqQm0vOIlJyN8M1bc8etyhLw2Xfrer6bPzLA8/apuKlGQ+XdznYSKPBz5LAhwYjaDAcA==", "dev": true, "dependencies": { "@xrplf/isomorphic": "^1.0.1", @@ -24711,7 +24711,7 @@ "ripple-address-codec": "^5.0.0" }, "engines": { - "node": ">= 16" + "node": ">= 18" } }, "node_modules/ripple-keypairs": { @@ -28897,9 +28897,9 @@ "peer": true }, "node_modules/xrpl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/xrpl/-/xrpl-3.1.0.tgz", - "integrity": "sha512-+97WiaF/AQTT6fXgD9Z5xyYbtlML0USCWrZFYjrC57yqtlWluacwwbMZa/I6ByVIKqCqVXJwRuRl20IQGlVGlg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/xrpl/-/xrpl-4.2.0.tgz", + "integrity": "sha512-RR6lJhRyQHPoI/rZGuKBzUc45KSC3thpYVzn3ATu78GXDZ6vsyn8SXmNveMhAJ2AVRvpRiyyztbU2TmGRUp2Xg==", "dev": true, "dependencies": { "@scure/bip32": "^1.3.1", @@ -28907,14 +28907,13 @@ "@xrplf/isomorphic": "^1.0.1", "@xrplf/secret-numbers": "^1.0.0", "bignumber.js": "^9.0.0", - "cross-fetch": "^4.0.0", "eventemitter3": "^5.0.1", "ripple-address-codec": "^5.0.0", - "ripple-binary-codec": "^2.1.0", + "ripple-binary-codec": "^2.3.0", "ripple-keypairs": "^2.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/xrpl-client": { @@ -28926,15 +28925,6 @@ "websocket": "^1.0.34" } }, - "node_modules/xrpl/node_modules/cross-fetch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", - "dev": true, - "dependencies": { - "node-fetch": "^2.6.12" - } - }, "node_modules/xrpl/node_modules/eventemitter3": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", @@ -45644,9 +45634,9 @@ } }, "ripple-binary-codec": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ripple-binary-codec/-/ripple-binary-codec-2.1.0.tgz", - "integrity": "sha512-q0GAx+hj3UVcDbhXVjk7qeNfgUMehlElYJwiCuIBwqs/51GVTOwLr39Ht3eNsX5ow2xPRaC5mqHwcFDvLRm6cA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ripple-binary-codec/-/ripple-binary-codec-2.3.0.tgz", + "integrity": "sha512-CPMzkknXlgO9Ow5Qa5iqQm0vOIlJyN8M1bc8etyhLw2Xfrer6bPzLA8/apuKlGQ+XdznYSKPBz5LAhwYjaDAcA==", "dev": true, "requires": { "@xrplf/isomorphic": "^1.0.1", @@ -48417,9 +48407,9 @@ "peer": true }, "xrpl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/xrpl/-/xrpl-3.1.0.tgz", - "integrity": "sha512-+97WiaF/AQTT6fXgD9Z5xyYbtlML0USCWrZFYjrC57yqtlWluacwwbMZa/I6ByVIKqCqVXJwRuRl20IQGlVGlg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/xrpl/-/xrpl-4.2.0.tgz", + "integrity": "sha512-RR6lJhRyQHPoI/rZGuKBzUc45KSC3thpYVzn3ATu78GXDZ6vsyn8SXmNveMhAJ2AVRvpRiyyztbU2TmGRUp2Xg==", "dev": true, "requires": { "@scure/bip32": "^1.3.1", @@ -48427,22 +48417,12 @@ "@xrplf/isomorphic": "^1.0.1", "@xrplf/secret-numbers": "^1.0.0", "bignumber.js": "^9.0.0", - "cross-fetch": "^4.0.0", "eventemitter3": "^5.0.1", "ripple-address-codec": "^5.0.0", - "ripple-binary-codec": "^2.1.0", + "ripple-binary-codec": "^2.3.0", "ripple-keypairs": "^2.0.0" }, "dependencies": { - "cross-fetch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", - "dev": true, - "requires": { - "node-fetch": "^2.6.12" - } - }, "eventemitter3": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", diff --git a/package.json b/package.json index 0cd388040..68c5eeac4 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,7 @@ "ts-jest": "^26.5.6", "ts-node": "^10.9.2", "typescript": "^4.9.5", - "xrpl": "^3.1.0" + "xrpl": "^4.2.0" }, "resolutions": { "jest-environment-jsdom": "29.3.1" diff --git a/public/locales/ca-CA/translations.json b/public/locales/ca-CA/translations.json index 4c7b5594a..97e6a51f9 100644 --- a/public/locales/ca-CA/translations.json +++ b/public/locales/ca-CA/translations.json @@ -158,6 +158,9 @@ "transaction_type_name_CheckCancel": "Cancel·lar Check", "transaction_type_name_CheckCash": "Cobrar Check", "transaction_type_name_CheckCreate": "Crear de Check", + "transaction_type_name_CredentialAccept": null, + "transaction_type_name_CredentialCreate": null, + "transaction_type_name_CredentialDelete": null, "transaction_type_name_DIDDelete": "Eliminar DID", "transaction_type_name_DIDSet": "Establir DID", "transaction_type_name_DepositPreauth": "Preautoritzar Diposit", @@ -179,6 +182,8 @@ "transaction_type_name_PaymentChannelClaim": "Reclamar al Canal de Pagament", "transaction_type_name_PaymentChannelCreate": "Crear Canal de Pagament", "transaction_type_name_PaymentChannelFund": "Dipositar en Canal de Pagament", + "transaction_type_name_PermissionedDomainDelete": null, + "transaction_type_name_PermissionedDomainSet": null, "transaction_type_name_SetHook": "Establir Hook", "transaction_type_name_SetRegularKey": "Establir Clau Regular", "transaction_type_name_SignerListSet": "Etablir Llista de Signantst", @@ -562,5 +567,11 @@ "enable_amendment_name": null, "amendment_status": null, "expected_date": null, + "credential_type": null, + "credential_issuer": null, + "subject": null, + "expiration": null, + "domain_id": null, + "accepted_credentials": null, "action_from_and": null } diff --git a/public/locales/en-US/translations.json b/public/locales/en-US/translations.json index ca4fb1b84..eaa36dee6 100644 --- a/public/locales/en-US/translations.json +++ b/public/locales/en-US/translations.json @@ -161,6 +161,9 @@ "transaction_type_name_CheckCancel": "Check Cancel", "transaction_type_name_CheckCash": "Check Cash", "transaction_type_name_CheckCreate": "Check Create", + "transaction_type_name_CredentialAccept": "Credential Accept", + "transaction_type_name_CredentialCreate": "Credential Create", + "transaction_type_name_CredentialDelete": "Credential Delete", "transaction_type_name_DIDDelete": "DID Delete", "transaction_type_name_DIDSet": "DID Set", "transaction_type_name_DepositPreauth": "Deposit Preauth", @@ -186,6 +189,8 @@ "transaction_type_name_PaymentChannelClaim": "Payment Channel Claim", "transaction_type_name_PaymentChannelCreate": "Payment Channel Create", "transaction_type_name_PaymentChannelFund": "Payment Channel Fund", + "transaction_type_name_PermissionedDomainDelete": "Permissioned Domain Delete", + "transaction_type_name_PermissionedDomainSet": "Permissioned Domain Set", "transaction_type_name_SetHook": "Set Hook", "transaction_type_name_SetRegularKey": "Set Regular Key", "transaction_type_name_SignerListSet": "Signer List Set", @@ -544,7 +549,7 @@ "deleted": "Deleted", "holders": "HOLDERS: {{holders}}", "trustlines": " TRUSTLINES: {{trustlines}}", - "website": "Wesbite", + "website": "Website", "mpt_issuance_id": "MPT Issuance ID", "asset_scale": "Asset Scale", "metadata": "Metadata", @@ -562,5 +567,12 @@ "search_results_banner": "Token search by name and account is now available! Try searching for USD", "enable_amendment_name": "Amendment Name", "amendment_status": "Amendment Status", + "expected_date": "Expected Date", + "credential_type": "Credential Type", + "credential_issuer": "Credential Issuer", + "subject": "Subject", + "expiration": "Expiration", + "domain_id": "Domain ID", + "accepted_credentials": "Accepted Credentials", "expected_date": "Expected Date" } diff --git a/public/locales/es-ES/translations.json b/public/locales/es-ES/translations.json index d561bae9b..71b9c6400 100644 --- a/public/locales/es-ES/translations.json +++ b/public/locales/es-ES/translations.json @@ -158,6 +158,9 @@ "transaction_type_name_CheckCancel": "Cancelar Cheque", "transaction_type_name_CheckCash": "Cobrar Cheque", "transaction_type_name_CheckCreate": "Crear Cheque", + "transaction_type_name_CredentialAccept": null, + "transaction_type_name_CredentialCreate": null, + "transaction_type_name_CredentialDelete": null, "transaction_type_name_DepositPreauth": "Preautorizar Depósito", "transaction_type_name_Error_Cases": "Casos de Error", "transaction_type_name_EscrowCancel": "Cancelar Depósito", @@ -176,6 +179,8 @@ "transaction_type_name_PaymentChannelClaim": "Reclamar Canal de Pago", "transaction_type_name_PaymentChannelCreate": "Crear Canal de Pago", "transaction_type_name_PaymentChannelFund": "Añadir Fondos a Canal de Pago", + "transaction_type_name_PermissionedDomainDelete": null, + "transaction_type_name_PermissionedDomainSet": null, "transaction_type_name_SetHook": "Añadir Hook", "transaction_type_name_SetRegularKey": "Configurar Clave Normal", "transaction_type_name_SignerListSet": "Configurar Lista de Firmantes", @@ -558,5 +563,11 @@ "enable_amendment_name": null, "amendment_status": null, "expected_date": null, - "action_from_and": null + "credential_type": null, + "credential_issuer": null, + "subject": null, + "expiration": null, + "domain_id": null, + "accepted_credentials": null + "action_from_and": null, } diff --git a/public/locales/fr-FR/translations.json b/public/locales/fr-FR/translations.json index ed9f2607f..70e3bf5c6 100644 --- a/public/locales/fr-FR/translations.json +++ b/public/locales/fr-FR/translations.json @@ -159,6 +159,9 @@ "transaction_type_name_CheckCancel": "Chèque annulé", "transaction_type_name_CheckCash": "Chèque remis", "transaction_type_name_CheckCreate": "Chèque créé", + "transaction_type_name_CredentialAccept": null, + "transaction_type_name_CredentialCreate": null, + "transaction_type_name_CredentialDelete": null, "transaction_type_name_DepositPreauth": "Dépôt préautorisé", "transaction_type_name_Error_Cases": "Cas d'erreur", "transaction_type_name_EscrowCancel": "séquestre annulé", @@ -178,6 +181,8 @@ "transaction_type_name_PaymentChannelClaim": "Canal de paiement réclamé", "transaction_type_name_PaymentChannelCreate": "Canal de paiement créé", "transaction_type_name_PaymentChannelFund": "Canal provisionné", + "transaction_type_name_PermissionedDomainDelete": null, + "transaction_type_name_PermissionedDomainSet": null, "transaction_type_name_SetRegularKey": "Clé régulière définie", "transaction_type_name_SignerListSet": "Liste de signataires établie", "transaction_type_name_TicketCreate": "Ticket créé", @@ -559,5 +564,11 @@ "enable_amendment_name": null, "amendment_status": null, "expected_date": null, + "credential_type": null, + "credential_issuer": null, + "subject": null, + "expiration": null, + "domain_id": null, + "accepted_credentials": null, "action_from_and": null } diff --git a/public/locales/ja-JP/translations.json b/public/locales/ja-JP/translations.json index 6d558fb70..0b04e4c05 100644 --- a/public/locales/ja-JP/translations.json +++ b/public/locales/ja-JP/translations.json @@ -159,6 +159,9 @@ "transaction_type_name_CheckCancel": "チェックの取消", "transaction_type_name_CheckCash": "チェックの現金化", "transaction_type_name_CheckCreate": "チェックの作成", + "transaction_type_name_CredentialAccept": null, + "transaction_type_name_CredentialCreate": null, + "transaction_type_name_CredentialDelete": null, "transaction_type_name_DepositPreauth": "入金の事前承認", "transaction_type_name_Error_Cases": "エラーケース", "transaction_type_name_EscrowCancel": "エスクローの取消", @@ -178,6 +181,8 @@ "transaction_type_name_PaymentChannelClaim": "ペイメントチャネル請求", "transaction_type_name_PaymentChannelCreate": "ペイメントチャネル作成", "transaction_type_name_PaymentChannelFund": "ペイメントチャネル資金", + "transaction_type_name_PermissionedDomainDelete": null, + "transaction_type_name_PermissionedDomainSet": null, "transaction_type_name_SetHook": "Hookの設定", "transaction_type_name_SetRegularKey": "レギュラーキーの設定", "transaction_type_name_SignerListSet": "署名者リスト設定", @@ -558,5 +563,11 @@ "enable_amendment_name": null, "amendment_status": null, "expected_date": null, + "credential_type": null, + "credential_issuer": null, + "subject": null, + "expiration": null, + "domain_id": null, + "accepted_credentials": null, "action_from_and": null } diff --git a/public/locales/ko-KR/translations.json b/public/locales/ko-KR/translations.json index 0ed10a96d..6542c1a7d 100644 --- a/public/locales/ko-KR/translations.json +++ b/public/locales/ko-KR/translations.json @@ -161,6 +161,9 @@ "transaction_type_name_CheckCancel": "수표 취소", "transaction_type_name_CheckCash": "수표 현금화", "transaction_type_name_CheckCreate": "수표 생성", + "transaction_type_name_CredentialAccept": null, + "transaction_type_name_CredentialCreate": null, + "transaction_type_name_CredentialDelete": null, "transaction_type_name_DepositPreauth": "예치 인증", "transaction_type_name_Error_Cases": "오류 사례", "transaction_type_name_EscrowCancel": "에스크로 취소", @@ -179,6 +182,8 @@ "transaction_type_name_PaymentChannelClaim": "결제 채널 청구", "transaction_type_name_PaymentChannelCreate": "결제 채널 생성", "transaction_type_name_PaymentChannelFund": "결제 채널 펀딩", + "transaction_type_name_PermissionedDomainDelete": null, + "transaction_type_name_PermissionedDomainSet": null, "transaction_type_name_SetHook": "Hook 설정", "transaction_type_name_SetRegularKey": "일반 키 설정", "transaction_type_name_SignerListSet": "서명자 목록 설정", @@ -556,5 +561,11 @@ "enable_amendment_name": null, "amendment_status": null, "expected_date": null, + "credential_type": null, + "credential_issuer": null, + "subject": null, + "expiration": null, + "domain_id": null, + "accepted_credentials": null, "action_from_and": null } diff --git a/src/containers/shared/components/Transaction/CredentialAccept/Simple.tsx b/src/containers/shared/components/Transaction/CredentialAccept/Simple.tsx new file mode 100644 index 000000000..7107b9f12 --- /dev/null +++ b/src/containers/shared/components/Transaction/CredentialAccept/Simple.tsx @@ -0,0 +1,25 @@ +import { useTranslation } from 'react-i18next' +import { type CredentialAccept } from 'xrpl' +import { TransactionSimpleComponent, TransactionSimpleProps } from '../types' +import { SimpleRow } from '../SimpleRow' +import { convertHexToString } from '../../../../../rippled/lib/utils' + +export const Simple: TransactionSimpleComponent = ( + props: TransactionSimpleProps, +) => { + const { t } = useTranslation() + const { data } = props + const { Issuer: issuer, CredentialType: credentialType } = data.instructions + + return ( + <> + + {issuer} + + + + {convertHexToString(credentialType)} + + + ) +} diff --git a/src/containers/shared/components/Transaction/CredentialAccept/TableDetail.tsx b/src/containers/shared/components/Transaction/CredentialAccept/TableDetail.tsx new file mode 100644 index 000000000..8a9b42316 --- /dev/null +++ b/src/containers/shared/components/Transaction/CredentialAccept/TableDetail.tsx @@ -0,0 +1,26 @@ +import { useTranslation } from 'react-i18next' +import { type CredentialAccept } from 'xrpl' +import { TransactionTableDetailProps } from '../types' +import { convertHexToString } from '../../../../../rippled/lib/utils' + +export const TableDetail = ({ + instructions, +}: TransactionTableDetailProps) => { + const { t } = useTranslation() + const { Issuer: issuer, CredentialType: credentialType } = instructions + return ( +
+
+ {t('issuer')}: + {issuer} +
+ +
+ {t('credential_type')}: + + {convertHexToString(credentialType)} + +
+
+ ) +} diff --git a/src/containers/shared/components/Transaction/CredentialAccept/index.ts b/src/containers/shared/components/Transaction/CredentialAccept/index.ts new file mode 100644 index 000000000..91661b221 --- /dev/null +++ b/src/containers/shared/components/Transaction/CredentialAccept/index.ts @@ -0,0 +1,15 @@ +import { + TransactionAction, + TransactionCategory, + TransactionMapping, +} from '../types' + +import { Simple } from './Simple' +import { TableDetail } from './TableDetail' + +export const CredentialAcceptTransaction: TransactionMapping = { + Simple, + TableDetail, + action: TransactionAction.MODIFY, + category: TransactionCategory.ACCOUNT, +} diff --git a/src/containers/shared/components/Transaction/CredentialAccept/test/CredentialAcceptSimple.test.tsx b/src/containers/shared/components/Transaction/CredentialAccept/test/CredentialAcceptSimple.test.tsx new file mode 100644 index 000000000..be37b7917 --- /dev/null +++ b/src/containers/shared/components/Transaction/CredentialAccept/test/CredentialAcceptSimple.test.tsx @@ -0,0 +1,15 @@ +import { createSimpleWrapperFactory, expectSimpleRowText } from '../../test' +import { Simple } from '../Simple' +import CredentialAccept from './mock_data/CredentialAccept.json' + +const createWrapper = createSimpleWrapperFactory(Simple) + +describe('CredentialAccept: Simple', () => { + it('renders', () => { + const wrapper = createWrapper(CredentialAccept) + expectSimpleRowText(wrapper, 'issuer', 'rL6bethyyyphLye6A8WHhw1KxDZrwiqCmi') + expectSimpleRowText(wrapper, 'credential-type', 'My test credential') + + wrapper.unmount() + }) +}) diff --git a/src/containers/shared/components/Transaction/CredentialAccept/test/CredentialAcceptTableDetail.test.tsx b/src/containers/shared/components/Transaction/CredentialAccept/test/CredentialAcceptTableDetail.test.tsx new file mode 100644 index 000000000..7517e7c5a --- /dev/null +++ b/src/containers/shared/components/Transaction/CredentialAccept/test/CredentialAcceptTableDetail.test.tsx @@ -0,0 +1,20 @@ +import { createTableDetailWrapperFactory } from '../../test' +import { TableDetail } from '../TableDetail' +import mockCredentialAccept from './mock_data/CredentialAccept.json' + +const createWrapper = createTableDetailWrapperFactory(TableDetail) + +describe('CredentialAcceptTableDetail ', () => { + it('renders CredentialAcceptTableDetail', () => { + const wrapper = createWrapper(mockCredentialAccept) + + expect(wrapper.find('[data-test="issuer"]')).toHaveText( + 'issuer: rL6bethyyyphLye6A8WHhw1KxDZrwiqCmi', + ) + expect(wrapper.find('[data-test="credential-type"]')).toHaveText( + 'credential_type: My test credential', + ) + + wrapper.unmount() + }) +}) diff --git a/src/containers/shared/components/Transaction/CredentialAccept/test/mock_data/CredentialAccept.json b/src/containers/shared/components/Transaction/CredentialAccept/test/mock_data/CredentialAccept.json new file mode 100644 index 000000000..d7d367fc2 --- /dev/null +++ b/src/containers/shared/components/Transaction/CredentialAccept/test/mock_data/CredentialAccept.json @@ -0,0 +1,86 @@ +{ + "close_time_iso": "2025-02-18T15:06:23Z", + "ctid": "C006630D00000002", + "hash": "A5BB4EADEF1AF9D81FA9C4EB748B4B8EFB4A28D8DF7FC5227CBE2CF256376693", + "ledger_hash": "265927953A34EB94E687C5AC98A3B696FD225F26BAC36E37DD247E1B8137C43C", + "ledger_index": 418573, + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "rwXChshgJHh6KwwXY8hN1iNAiuyzJkz7p6", + "Balance": "99999988", + "Flags": 0, + "OwnerCount": 1, + "Sequence": 418571 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "63821A059043CABF96E1955881B0C0ACAD6BB997F7BBD8F2551E3109616D463A", + "PreviousFields": { + "Balance": "100000000", + "OwnerCount": 0, + "Sequence": 418570 + }, + "PreviousTxnID": "79488F1D640ECC2059CC5D682177EEF6A597A5528372EEA163CE86EA3B188346", + "PreviousTxnLgrSeq": 418570 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "CredentialType": "4D7920746573742063726564656E7469616C", + "Flags": 65536, + "Issuer": "rL6bethyyyphLye6A8WHhw1KxDZrwiqCmi", + "IssuerNode": "0", + "Subject": "rwXChshgJHh6KwwXY8hN1iNAiuyzJkz7p6", + "SubjectNode": "0", + "URI": "74657374555249" + }, + "LedgerEntryType": "Credential", + "LedgerIndex": "7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955", + "PreviousFields": { + "Flags": 0 + }, + "PreviousTxnID": "FADDC5925ACC5A5C567E3C70730E090767A9B22330CFB272005169A7CABA82DB", + "PreviousTxnLgrSeq": 418572 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Account": "rL6bethyyyphLye6A8WHhw1KxDZrwiqCmi", + "Balance": "99999988", + "Flags": 0, + "OwnerCount": 0, + "Sequence": 418570 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "CF3D9A16400DAE31DA3F0FEF511D753C5F7560ECDB8EC9B7F9E92DC837A01F52", + "PreviousFields": { + "OwnerCount": 1 + }, + "PreviousTxnID": "FADDC5925ACC5A5C567E3C70730E090767A9B22330CFB272005169A7CABA82DB", + "PreviousTxnLgrSeq": 418572 + } + } + ], + "TransactionIndex": 0, + "TransactionResult": "tesSUCCESS" + }, + "tx": { + "Account": "rwXChshgJHh6KwwXY8hN1iNAiuyzJkz7p6", + "CredentialType": "4D7920746573742063726564656E7469616C", + "Fee": "12", + "Flags": 0, + "Issuer": "rL6bethyyyphLye6A8WHhw1KxDZrwiqCmi", + "LastLedgerSequence": 418592, + "Sequence": 418570, + "SigningPubKey": "ED2EFC907F00BA33809F2FB7B297489AB095197E3C55F3F941792B2A83966AC54E", + "TransactionType": "CredentialAccept", + "TxnSignature": "1D3E366930405D78B1909B5FF0B7315DD76A0D1B318CF675E66C0B6F162874B69F356E52A41F6E10323CAF076194E44F7C63105C4FA9031AB8AF15769C805404", + "date": 793206383, + "ledger_index": 418573 + }, + "validated": true +} diff --git a/src/containers/shared/components/Transaction/CredentialCreate/Simple.tsx b/src/containers/shared/components/Transaction/CredentialCreate/Simple.tsx new file mode 100644 index 000000000..412e0e3f1 --- /dev/null +++ b/src/containers/shared/components/Transaction/CredentialCreate/Simple.tsx @@ -0,0 +1,55 @@ +import { useTranslation } from 'react-i18next' +import { type CredentialCreate } from 'xrpl' +import { TransactionSimpleComponent, TransactionSimpleProps } from '../types' +import { SimpleRow } from '../SimpleRow' +import { convertHexToString } from '../../../../../rippled/lib/utils' +import { localizeDate } from '../../../utils' +import { useLanguage } from '../../../hooks' +import { + convertRippleDate, + MILLIS_PER_SECOND, +} from '../../../../../rippled/lib/convertRippleDate' +import { DATE_OPTIONS } from '../../../transactionUtils' + +const Simple: TransactionSimpleComponent = ( + props: TransactionSimpleProps, +) => { + const { t } = useTranslation() + const language = useLanguage() + const { data } = props + const { + Subject: subject, + CredentialType: credentialType, + Expiration: expiration, + URI: uri, + } = data.instructions + + return ( + <> + + {subject} + + + + {convertHexToString(credentialType)} + + + {expiration && ( + + {localizeDate( + new Date(convertRippleDate(expiration) * MILLIS_PER_SECOND), + language, + DATE_OPTIONS, + )} + + )} + {uri && ( + + {convertHexToString(uri)} + + )} + + ) +} + +export { Simple } diff --git a/src/containers/shared/components/Transaction/CredentialCreate/TableDetail.tsx b/src/containers/shared/components/Transaction/CredentialCreate/TableDetail.tsx new file mode 100644 index 000000000..fa7563b60 --- /dev/null +++ b/src/containers/shared/components/Transaction/CredentialCreate/TableDetail.tsx @@ -0,0 +1,44 @@ +import { useTranslation } from 'react-i18next' +import { type CredentialCreate } from 'xrpl' +import { TransactionTableDetailProps } from '../types' +import { convertHexToString } from '../../../../../rippled/lib/utils' + +export const TableDetail = ({ + instructions, +}: TransactionTableDetailProps) => { + const { t } = useTranslation() + const { + Subject: subject, + CredentialType: credentialType, + Expiration: expiration, + URI: uri, + } = instructions + return ( +
+
+ {t('subject')}: + {subject} +
+ +
+ {t('credential_type')}: + + {convertHexToString(credentialType)} + +
+ + {expiration && ( +
+ {t('expiration')}: + {expiration} +
+ )} + {uri && ( +
+ {t('uri')}: + {convertHexToString(uri)} +
+ )} +
+ ) +} diff --git a/src/containers/shared/components/Transaction/CredentialCreate/index.ts b/src/containers/shared/components/Transaction/CredentialCreate/index.ts new file mode 100644 index 000000000..84cd7288e --- /dev/null +++ b/src/containers/shared/components/Transaction/CredentialCreate/index.ts @@ -0,0 +1,15 @@ +import { + TransactionAction, + TransactionCategory, + TransactionMapping, +} from '../types' + +import { Simple } from './Simple' +import { TableDetail } from './TableDetail' + +export const CredentialCreateTransaction: TransactionMapping = { + Simple, + TableDetail, + action: TransactionAction.CREATE, + category: TransactionCategory.ACCOUNT, +} diff --git a/src/containers/shared/components/Transaction/CredentialCreate/test/CredentialCreateSimple.test.tsx b/src/containers/shared/components/Transaction/CredentialCreate/test/CredentialCreateSimple.test.tsx new file mode 100644 index 000000000..0db002617 --- /dev/null +++ b/src/containers/shared/components/Transaction/CredentialCreate/test/CredentialCreateSimple.test.tsx @@ -0,0 +1,19 @@ +import { createSimpleWrapperFactory, expectSimpleRowText } from '../../test' +import { Simple } from '../Simple' +import CredentialCreate from './mock_data/CredentialCreate.json' + +const createWrapper = createSimpleWrapperFactory(Simple) + +describe('CredentialCreate: Simple', () => { + it('renders', () => { + const wrapper = createWrapper(CredentialCreate) + expectSimpleRowText( + wrapper, + 'subject', + 'rwXChshgJHh6KwwXY8hN1iNAiuyzJkz7p6', + ) + expectSimpleRowText(wrapper, 'credential-type', 'My test credential') + + wrapper.unmount() + }) +}) diff --git a/src/containers/shared/components/Transaction/CredentialCreate/test/CredentialCreateTableDetail.test.tsx b/src/containers/shared/components/Transaction/CredentialCreate/test/CredentialCreateTableDetail.test.tsx new file mode 100644 index 000000000..bac7f4897 --- /dev/null +++ b/src/containers/shared/components/Transaction/CredentialCreate/test/CredentialCreateTableDetail.test.tsx @@ -0,0 +1,21 @@ +import { createTableDetailWrapperFactory } from '../../test' +import { TableDetail } from '../TableDetail' +import mockCredentialCreate from './mock_data/CredentialCreate.json' + +const createWrapper = createTableDetailWrapperFactory(TableDetail) + +describe('CredentialAcceptTableDetail ', () => { + it('renders CredentialAcceptTableDetail', () => { + const wrapper = createWrapper(mockCredentialCreate) + + expect(wrapper.find('[data-test="subject"]')).toHaveText( + 'subject: rwXChshgJHh6KwwXY8hN1iNAiuyzJkz7p6', + ) + expect(wrapper.find('[data-test="credential-type"]')).toHaveText( + 'credential_type: My test credential', + ) + expect(wrapper.find('[data-test="uri"]')).toHaveText('uri: testURI') + + wrapper.unmount() + }) +}) diff --git a/src/containers/shared/components/Transaction/CredentialCreate/test/mock_data/CredentialCreate.json b/src/containers/shared/components/Transaction/CredentialCreate/test/mock_data/CredentialCreate.json new file mode 100644 index 000000000..f0f1b7748 --- /dev/null +++ b/src/containers/shared/components/Transaction/CredentialCreate/test/mock_data/CredentialCreate.json @@ -0,0 +1,81 @@ +{ + "close_time_iso": "2025-02-18T15:06:22Z", + "ctid": "C006630C00000002", + "hash": "FADDC5925ACC5A5C567E3C70730E090767A9B22330CFB272005169A7CABA82DB", + "ledger_hash": "9C59CCF5A001D6A922A22E59A390D1526E0DF93667C4C13F14C4C23277ACEAD3", + "ledger_index": 418572, + "meta": { + "AffectedNodes": [ + { + "CreatedNode": { + "LedgerEntryType": "DirectoryNode", + "LedgerIndex": "675537AB5EB6416AED24E856E20E5A203FB5A73F0C5D2D92359B5A45184BC594", + "NewFields": { + "Owner": "rwXChshgJHh6KwwXY8hN1iNAiuyzJkz7p6", + "RootIndex": "675537AB5EB6416AED24E856E20E5A203FB5A73F0C5D2D92359B5A45184BC594" + } + } + }, + { + "CreatedNode": { + "LedgerEntryType": "Credential", + "LedgerIndex": "7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955", + "NewFields": { + "CredentialType": "4D7920746573742063726564656E7469616C", + "Issuer": "rL6bethyyyphLye6A8WHhw1KxDZrwiqCmi", + "Subject": "rwXChshgJHh6KwwXY8hN1iNAiuyzJkz7p6", + "URI": "74657374555249" + } + } + }, + { + "CreatedNode": { + "LedgerEntryType": "DirectoryNode", + "LedgerIndex": "7D29B654F46648EA1787141BEC0CB3BAA6B42290955C335F9A7B2F34F9D4ACA0", + "NewFields": { + "Owner": "rL6bethyyyphLye6A8WHhw1KxDZrwiqCmi", + "RootIndex": "7D29B654F46648EA1787141BEC0CB3BAA6B42290955C335F9A7B2F34F9D4ACA0" + } + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Account": "rL6bethyyyphLye6A8WHhw1KxDZrwiqCmi", + "Balance": "99999988", + "Flags": 0, + "OwnerCount": 1, + "Sequence": 418570 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "CF3D9A16400DAE31DA3F0FEF511D753C5F7560ECDB8EC9B7F9E92DC837A01F52", + "PreviousFields": { + "Balance": "100000000", + "OwnerCount": 0, + "Sequence": 418569 + }, + "PreviousTxnID": "B5B9A081FB2113EA2985B819F3014D666D9D4A563A3F7695D7DBB3EC310F92CE", + "PreviousTxnLgrSeq": 418569 + } + } + ], + "TransactionIndex": 0, + "TransactionResult": "tesSUCCESS" + }, + "tx": { + "Account": "rL6bethyyyphLye6A8WHhw1KxDZrwiqCmi", + "CredentialType": "4D7920746573742063726564656E7469616C", + "Fee": "12", + "Flags": 0, + "LastLedgerSequence": 418590, + "Sequence": 418569, + "SigningPubKey": "ED8627CFD25412BDC67E6B1F1C219669FFEEF7F8D3D46EA572FBE394FAD3A8F46E", + "Subject": "rwXChshgJHh6KwwXY8hN1iNAiuyzJkz7p6", + "TransactionType": "CredentialCreate", + "TxnSignature": "D59616E53C8EE14A1584983A7D2661BCE9F30B16C8F4D10B561AB4DA5EC4989F29B344FE182A0F73B2EFCBD0D65E9B4575E1313A48707F08E8445A8BBB4CA50D", + "URI": "74657374555249", + "date": 793206382, + "ledger_index": 418572 + }, + "validated": true +} diff --git a/src/containers/shared/components/Transaction/CredentialDelete/Simple.tsx b/src/containers/shared/components/Transaction/CredentialDelete/Simple.tsx new file mode 100644 index 000000000..3afe48e82 --- /dev/null +++ b/src/containers/shared/components/Transaction/CredentialDelete/Simple.tsx @@ -0,0 +1,38 @@ +import { useTranslation } from 'react-i18next' +import { type CredentialDelete } from 'xrpl' +import { TransactionSimpleComponent, TransactionSimpleProps } from '../types' +import { SimpleRow } from '../SimpleRow' +import { convertHexToString } from '../../../../../rippled/lib/utils' + +const Simple: TransactionSimpleComponent = ( + props: TransactionSimpleProps, +) => { + const { t } = useTranslation() + const { data } = props + const { + Account: account, + Subject: subject, + CredentialType: credentialType, + Issuer: issuer, + } = data.instructions + + return ( + <> + + {subject || account} + + + {issuer && ( + + {issuer || account} + + )} + + + {convertHexToString(credentialType)} + + + ) +} + +export { Simple } diff --git a/src/containers/shared/components/Transaction/CredentialDelete/TableDetail.tsx b/src/containers/shared/components/Transaction/CredentialDelete/TableDetail.tsx new file mode 100644 index 000000000..30f099049 --- /dev/null +++ b/src/containers/shared/components/Transaction/CredentialDelete/TableDetail.tsx @@ -0,0 +1,36 @@ +import { useTranslation } from 'react-i18next' +import { type CredentialDelete } from 'xrpl' +import { TransactionTableDetailProps } from '../types' +import { convertHexToString } from '../../../../../rippled/lib/utils' + +export const TableDetail = ({ + instructions, +}: TransactionTableDetailProps) => { + const { t } = useTranslation() + const { + Account: account, + Subject: subject, + Issuer: issuer, + CredentialType: credentialType, + } = instructions + return ( +
+
+ {t('subject')}: + {subject || account} +
+ +
+ {t('issuer')}: + {issuer || account} +
+ +
+ {t('credential_type')}: + + {convertHexToString(credentialType)} + +
+
+ ) +} diff --git a/src/containers/shared/components/Transaction/CredentialDelete/index.ts b/src/containers/shared/components/Transaction/CredentialDelete/index.ts new file mode 100644 index 000000000..4f9674c6d --- /dev/null +++ b/src/containers/shared/components/Transaction/CredentialDelete/index.ts @@ -0,0 +1,15 @@ +import { + TransactionAction, + TransactionCategory, + TransactionMapping, +} from '../types' + +import { Simple } from './Simple' +import { TableDetail } from './TableDetail' + +export const CredentialDeleteTransaction: TransactionMapping = { + Simple, + TableDetail, + action: TransactionAction.CANCEL, + category: TransactionCategory.ACCOUNT, +} diff --git a/src/containers/shared/components/Transaction/CredentialDelete/test/CredentialDeleteSimple.test.tsx b/src/containers/shared/components/Transaction/CredentialDelete/test/CredentialDeleteSimple.test.tsx new file mode 100644 index 000000000..f6ba50dc4 --- /dev/null +++ b/src/containers/shared/components/Transaction/CredentialDelete/test/CredentialDeleteSimple.test.tsx @@ -0,0 +1,20 @@ +import { createSimpleWrapperFactory, expectSimpleRowText } from '../../test' +import { Simple } from '../Simple' +import CredentialDelete from './mock_data/CredentialDelete.json' + +const createWrapper = createSimpleWrapperFactory(Simple) + +describe('CredentialDelete: Simple', () => { + it('renders', () => { + const wrapper = createWrapper(CredentialDelete) + + expectSimpleRowText( + wrapper, + 'subject', + 'rwXChshgJHh6KwwXY8hN1iNAiuyzJkz7p6', + ) + expectSimpleRowText(wrapper, 'credential-type', 'My test credential') + + wrapper.unmount() + }) +}) diff --git a/src/containers/shared/components/Transaction/CredentialDelete/test/CredentialDeleteTableDetail.test.tsx b/src/containers/shared/components/Transaction/CredentialDelete/test/CredentialDeleteTableDetail.test.tsx new file mode 100644 index 000000000..ae0f2f4f4 --- /dev/null +++ b/src/containers/shared/components/Transaction/CredentialDelete/test/CredentialDeleteTableDetail.test.tsx @@ -0,0 +1,23 @@ +import { createTableDetailWrapperFactory } from '../../test' +import { TableDetail } from '../TableDetail' +import mockCredentialDelete from './mock_data/CredentialDelete.json' + +const createWrapper = createTableDetailWrapperFactory(TableDetail) + +describe('CredentialDeleteTableDetail ', () => { + it('renders CredentialDeleteTableDetail', () => { + const wrapper = createWrapper(mockCredentialDelete) + + expect(wrapper.find('[data-test="subject"]')).toHaveText( + 'subject: rwXChshgJHh6KwwXY8hN1iNAiuyzJkz7p6', + ) + expect(wrapper.find('[data-test="credential-type"]')).toHaveText( + 'credential_type: My test credential', + ) + expect(wrapper.find('[data-test="issuer"]')).toHaveText( + 'issuer: rL6bethyyyphLye6A8WHhw1KxDZrwiqCmi', + ) + + wrapper.unmount() + }) +}) diff --git a/src/containers/shared/components/Transaction/CredentialDelete/test/mock_data/CredentialDelete.json b/src/containers/shared/components/Transaction/CredentialDelete/test/mock_data/CredentialDelete.json new file mode 100644 index 000000000..c27731bd9 --- /dev/null +++ b/src/containers/shared/components/Transaction/CredentialDelete/test/mock_data/CredentialDelete.json @@ -0,0 +1,108 @@ +{ + "close_time_iso": "2025-02-18T15:06:31Z", + "ctid": "C006630F00000002", + "hash": "C7707BDAF65E6C45C2009290A313244717281ABCEFA7D08DD879E19D8F83085F", + "ledger_hash": "634992138E5DC7059441C4B115D5445F050F8CF8CE6F5640CA1E33EEA3DD9343", + "ledger_index": 418575, + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "rwXChshgJHh6KwwXY8hN1iNAiuyzJkz7p6", + "Balance": "99999988", + "Flags": 0, + "OwnerCount": 0, + "Sequence": 418571 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "63821A059043CABF96E1955881B0C0ACAD6BB997F7BBD8F2551E3109616D463A", + "PreviousFields": { + "OwnerCount": 1 + }, + "PreviousTxnID": "A5BB4EADEF1AF9D81FA9C4EB748B4B8EFB4A28D8DF7FC5227CBE2CF256376693", + "PreviousTxnLgrSeq": 418573 + } + }, + { + "DeletedNode": { + "FinalFields": { + "Flags": 0, + "Owner": "rwXChshgJHh6KwwXY8hN1iNAiuyzJkz7p6", + "PreviousTxnID": "FADDC5925ACC5A5C567E3C70730E090767A9B22330CFB272005169A7CABA82DB", + "PreviousTxnLgrSeq": 418572, + "RootIndex": "675537AB5EB6416AED24E856E20E5A203FB5A73F0C5D2D92359B5A45184BC594" + }, + "LedgerEntryType": "DirectoryNode", + "LedgerIndex": "675537AB5EB6416AED24E856E20E5A203FB5A73F0C5D2D92359B5A45184BC594" + } + }, + { + "DeletedNode": { + "FinalFields": { + "CredentialType": "4D7920746573742063726564656E7469616C", + "Flags": 65536, + "Issuer": "rL6bethyyyphLye6A8WHhw1KxDZrwiqCmi", + "IssuerNode": "0", + "PreviousTxnID": "A5BB4EADEF1AF9D81FA9C4EB748B4B8EFB4A28D8DF7FC5227CBE2CF256376693", + "PreviousTxnLgrSeq": 418573, + "Subject": "rwXChshgJHh6KwwXY8hN1iNAiuyzJkz7p6", + "SubjectNode": "0", + "URI": "74657374555249" + }, + "LedgerEntryType": "Credential", + "LedgerIndex": "7B685088D546B9E8905D26206F452BB2F44D9A33C9BD9BCF280F7BA39015A955" + } + }, + { + "DeletedNode": { + "FinalFields": { + "Flags": 0, + "Owner": "rL6bethyyyphLye6A8WHhw1KxDZrwiqCmi", + "PreviousTxnID": "FADDC5925ACC5A5C567E3C70730E090767A9B22330CFB272005169A7CABA82DB", + "PreviousTxnLgrSeq": 418572, + "RootIndex": "7D29B654F46648EA1787141BEC0CB3BAA6B42290955C335F9A7B2F34F9D4ACA0" + }, + "LedgerEntryType": "DirectoryNode", + "LedgerIndex": "7D29B654F46648EA1787141BEC0CB3BAA6B42290955C335F9A7B2F34F9D4ACA0" + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Account": "rL6bethyyyphLye6A8WHhw1KxDZrwiqCmi", + "Balance": "99999976", + "Flags": 0, + "OwnerCount": 0, + "Sequence": 418571 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "CF3D9A16400DAE31DA3F0FEF511D753C5F7560ECDB8EC9B7F9E92DC837A01F52", + "PreviousFields": { + "Balance": "99999988", + "Sequence": 418570 + }, + "PreviousTxnID": "A5BB4EADEF1AF9D81FA9C4EB748B4B8EFB4A28D8DF7FC5227CBE2CF256376693", + "PreviousTxnLgrSeq": 418573 + } + } + ], + "TransactionIndex": 0, + "TransactionResult": "tesSUCCESS" + }, + "tx": { + "Account": "rL6bethyyyphLye6A8WHhw1KxDZrwiqCmi", + "CredentialType": "4D7920746573742063726564656E7469616C", + "Fee": "12", + "Flags": 0, + "LastLedgerSequence": 418593, + "Sequence": 418570, + "SigningPubKey": "ED8627CFD25412BDC67E6B1F1C219669FFEEF7F8D3D46EA572FBE394FAD3A8F46E", + "Subject": "rwXChshgJHh6KwwXY8hN1iNAiuyzJkz7p6", + "TransactionType": "CredentialDelete", + "TxnSignature": "B193889C5791E0E9C9B12B9E948B3E911445986BF5A33415FFC875076F46EA49D7437F03FF8372411D306DAD2E9CDD4C123BBCB0CEFE0C517252F7B23AD34A0D", + "date": 793206391, + "ledger_index": 418575 + }, + "validated": true +} diff --git a/src/containers/shared/components/Transaction/PermissionedDomainDelete/Simple.tsx b/src/containers/shared/components/Transaction/PermissionedDomainDelete/Simple.tsx new file mode 100644 index 000000000..c15ca97db --- /dev/null +++ b/src/containers/shared/components/Transaction/PermissionedDomainDelete/Simple.tsx @@ -0,0 +1,20 @@ +import { useTranslation } from 'react-i18next' +import { type PermissionedDomainDelete } from 'xrpl' +import { TransactionSimpleComponent, TransactionSimpleProps } from '../types' +import { SimpleRow } from '../SimpleRow' + +const Simple: TransactionSimpleComponent = ( + props: TransactionSimpleProps, +) => { + const { t } = useTranslation() + const { data } = props + const { DomainID: domainID } = data.instructions + + return ( + + {domainID} + + ) +} + +export { Simple } diff --git a/src/containers/shared/components/Transaction/PermissionedDomainDelete/TableDetail.tsx b/src/containers/shared/components/Transaction/PermissionedDomainDelete/TableDetail.tsx new file mode 100644 index 000000000..d440facae --- /dev/null +++ b/src/containers/shared/components/Transaction/PermissionedDomainDelete/TableDetail.tsx @@ -0,0 +1,18 @@ +import { useTranslation } from 'react-i18next' +import { type PermissionedDomainDelete } from 'xrpl' +import { TransactionTableDetailProps } from '../types' + +export const TableDetail = ({ + instructions, +}: TransactionTableDetailProps) => { + const { t } = useTranslation() + const { DomainID: domainID } = instructions + return ( +
+
+ {t('domain_id')}: + {domainID} +
+
+ ) +} diff --git a/src/containers/shared/components/Transaction/PermissionedDomainDelete/index.ts b/src/containers/shared/components/Transaction/PermissionedDomainDelete/index.ts new file mode 100644 index 000000000..51f8e3d82 --- /dev/null +++ b/src/containers/shared/components/Transaction/PermissionedDomainDelete/index.ts @@ -0,0 +1,15 @@ +import { + TransactionAction, + TransactionCategory, + TransactionMapping, +} from '../types' + +import { Simple } from './Simple' +import { TableDetail } from './TableDetail' + +export const PermissionedDomainDeleteTransaction: TransactionMapping = { + Simple, + TableDetail, + action: TransactionAction.CANCEL, + category: TransactionCategory.ACCOUNT, +} diff --git a/src/containers/shared/components/Transaction/PermissionedDomainDelete/test/PermissionedDomainDeleteSimple.test.tsx b/src/containers/shared/components/Transaction/PermissionedDomainDelete/test/PermissionedDomainDeleteSimple.test.tsx new file mode 100644 index 000000000..c90ab28ff --- /dev/null +++ b/src/containers/shared/components/Transaction/PermissionedDomainDelete/test/PermissionedDomainDeleteSimple.test.tsx @@ -0,0 +1,18 @@ +import { createSimpleWrapperFactory, expectSimpleRowText } from '../../test' +import { Simple } from '../Simple' +import PermissionedDomainDelete from './mock_data/PermissionedDomainDelete.json' + +const createWrapper = createSimpleWrapperFactory(Simple) + +describe('PermissionedDomainDeleteSimple: Renders', () => { + it('renders', () => { + const wrapper = createWrapper(PermissionedDomainDelete) + expectSimpleRowText( + wrapper, + 'domain-id', + 'F075484241C8FD27C750F1DD93E0B5E0A42D9ADFE5E7B2313DD927E3DE0DBA6E', + ) + + wrapper.unmount() + }) +}) diff --git a/src/containers/shared/components/Transaction/PermissionedDomainDelete/test/PermissionedDomainDeleteTableDetail.test.tsx b/src/containers/shared/components/Transaction/PermissionedDomainDelete/test/PermissionedDomainDeleteTableDetail.test.tsx new file mode 100644 index 000000000..2efbd7d42 --- /dev/null +++ b/src/containers/shared/components/Transaction/PermissionedDomainDelete/test/PermissionedDomainDeleteTableDetail.test.tsx @@ -0,0 +1,17 @@ +import { createTableDetailWrapperFactory } from '../../test' +import { TableDetail } from '../TableDetail' +import PermissionedDomainDelete from './mock_data/PermissionedDomainDelete.json' + +const createWrapper = createTableDetailWrapperFactory(TableDetail) + +describe('PermissionedDomainDeleteTableDetail ', () => { + it('renders PermissionedDomainDeleteTableDetail', () => { + const wrapper = createWrapper(PermissionedDomainDelete) + + expect(wrapper.find('[data-test="domain-id"]')).toHaveText( + 'domain_id: F075484241C8FD27C750F1DD93E0B5E0A42D9ADFE5E7B2313DD927E3DE0DBA6E', + ) + + wrapper.unmount() + }) +}) diff --git a/src/containers/shared/components/Transaction/PermissionedDomainDelete/test/mock_data/PermissionedDomainDelete.json b/src/containers/shared/components/Transaction/PermissionedDomainDelete/test/mock_data/PermissionedDomainDelete.json new file mode 100644 index 000000000..87d2c3763 --- /dev/null +++ b/src/containers/shared/components/Transaction/PermissionedDomainDelete/test/mock_data/PermissionedDomainDelete.json @@ -0,0 +1,83 @@ +{ + "close_time_iso":"2025-01-21T01:51:40Z", + "ctid":"C000005A0000F7E0", + "hash":"1008A97884DD03C3B4812C53D01B2482F55B9C2E1E1323DE468B862BA002A771", + "ledger_hash":"E60EC716557B89B709B037D2AE8252A909020E31CAE0C4659FB2739F47997979", + "ledger_index": 90, + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account":"rhBPeJFG9pxvU22AxkzBpt6zzyk89xhdr3", + "Balance":"1999997599", + "Flags": 0, + "OwnerCount": 3, + "Sequence": 77 + }, + "LedgerEntryType":"AccountRoot", + "LedgerIndex":"5A8ABEB4FA540056A51E0D25177DB7E672E6D7E947DF5D347B9E1489D106F873", + "PreviousFields": { + "Balance":"1999997799", + "OwnerCount": 4, + "Sequence": 76 + }, + "PreviousTxnID":"676E4F1DF5DC4F9C2223DDE9999EF5A8392B310C49B84C7AB04BA10A6CDABFE4", + "PreviousTxnLgrSeq": 89 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Flags": 0, + "Owner":"rhBPeJFG9pxvU22AxkzBpt6zzyk89xhdr3", + "RootIndex":"D9B8A922B4C857D4BA2CED2870A54D0DF9A45F7D9F7A145B627E291CCBD73FEE" + }, + "LedgerEntryType":"DirectoryNode", + "LedgerIndex":"D9B8A922B4C857D4BA2CED2870A54D0DF9A45F7D9F7A145B627E291CCBD73FEE", + "PreviousTxnID":"676E4F1DF5DC4F9C2223DDE9999EF5A8392B310C49B84C7AB04BA10A6CDABFE4", + "PreviousTxnLgrSeq": 89 + } + }, + { + "DeletedNode": { + "FinalFields": { + "AcceptedCredentials": [ + { + "Credential": { + "CredentialType":"4964656E74697479446F63756D656E74", + "Issuer":"rhBPeJFG9pxvU22AxkzBpt6zzyk89xhdr3" + } + } + ], + "Flags": 0, + "Owner":"rhBPeJFG9pxvU22AxkzBpt6zzyk89xhdr3", + "OwnerNode":"0", + "PreviousTxnID":"676E4F1DF5DC4F9C2223DDE9999EF5A8392B310C49B84C7AB04BA10A6CDABFE4", + "PreviousTxnLgrSeq": 89, + "Sequence": 75 + }, + "LedgerEntryType":"PermissionedDomain", + "LedgerIndex":"F075484241C8FD27C750F1DD93E0B5E0A42D9ADFE5E7B2313DD927E3DE0DBA6E" + } + } + ], + "TransactionIndex": 0, + "TransactionResult":"tesSUCCESS" + }, + "tx": { + "Account":"rhBPeJFG9pxvU22AxkzBpt6zzyk89xhdr3", + "DomainID":"F075484241C8FD27C750F1DD93E0B5E0A42D9ADFE5E7B2313DD927E3DE0DBA6E", + "Fee":"200", + "Flags": 0, + "LastLedgerSequence": 109, + "NetworkID": 63456, + "Sequence": 76, + "SigningPubKey":"ED0FD90553E43698CA5878F9AE1063AF1178728324356BFF116D3331B243F11FDD", + "TransactionType":"PermissionedDomainDelete", + "TxnSignature":"9C248D71E6221DBBE2F65DB2D3B7B0B0DF8FA11057A60719CCBE6A257D6255068E39D82C740ED7B05B3C99A4A591DA59847C0222A6B5F8DC90C480D249F30E01", + "date": 790739500, + "ledger_index": 90 + }, + "validated": true +} diff --git a/src/containers/shared/components/Transaction/PermissionedDomainSet/Simple.tsx b/src/containers/shared/components/Transaction/PermissionedDomainSet/Simple.tsx new file mode 100644 index 000000000..c54ecb5de --- /dev/null +++ b/src/containers/shared/components/Transaction/PermissionedDomainSet/Simple.tsx @@ -0,0 +1,32 @@ +import { useTranslation } from 'react-i18next' +import { type PermissionedDomainSet } from 'xrpl' +import { TransactionSimpleComponent, TransactionSimpleProps } from '../types' +import { SimpleRow } from '../SimpleRow' + +const Simple: TransactionSimpleComponent = ( + props: TransactionSimpleProps, +) => { + const { t } = useTranslation() + const { data } = props + const { AcceptedCredentials: acceptedCredentials } = data.instructions + + return ( + + {acceptedCredentials.map((credential) => ( +
+ + {credential.Credential.CredentialType} + + + {credential.Credential.Issuer} + +
+ ))} +
+ ) +} + +export { Simple } diff --git a/src/containers/shared/components/Transaction/PermissionedDomainSet/TableDetail.tsx b/src/containers/shared/components/Transaction/PermissionedDomainSet/TableDetail.tsx new file mode 100644 index 000000000..c7bb335eb --- /dev/null +++ b/src/containers/shared/components/Transaction/PermissionedDomainSet/TableDetail.tsx @@ -0,0 +1,30 @@ +import { useTranslation } from 'react-i18next' +import { type PermissionedDomainSet } from 'xrpl' +import { TransactionTableDetailProps } from '../types' + +export const TableDetail = ({ + instructions, +}: TransactionTableDetailProps) => { + const { t } = useTranslation() + const { AcceptedCredentials: acceptedCredentials } = instructions + return ( +
+ {acceptedCredentials.map((credential) => ( +
+
+ {t('credential_type')}: + + {credential.Credential.CredentialType} + +
+
+ {t('credential_issuer')}: + + {credential.Credential.Issuer} + +
+
+ ))} +
+ ) +} diff --git a/src/containers/shared/components/Transaction/PermissionedDomainSet/index.ts b/src/containers/shared/components/Transaction/PermissionedDomainSet/index.ts new file mode 100644 index 000000000..3ac9dde52 --- /dev/null +++ b/src/containers/shared/components/Transaction/PermissionedDomainSet/index.ts @@ -0,0 +1,15 @@ +import { + TransactionAction, + TransactionCategory, + TransactionMapping, +} from '../types' + +import { Simple } from './Simple' +import { TableDetail } from './TableDetail' + +export const PermissionedDomainSetTransaction: TransactionMapping = { + Simple, + TableDetail, + action: TransactionAction.MODIFY, + category: TransactionCategory.ACCOUNT, +} diff --git a/src/containers/shared/components/Transaction/PermissionedDomainSet/test/PermissionedDomainSetSimple.test.tsx b/src/containers/shared/components/Transaction/PermissionedDomainSet/test/PermissionedDomainSetSimple.test.tsx new file mode 100644 index 000000000..3935b81a2 --- /dev/null +++ b/src/containers/shared/components/Transaction/PermissionedDomainSet/test/PermissionedDomainSetSimple.test.tsx @@ -0,0 +1,24 @@ +import { createSimpleWrapperFactory, expectSimpleRowText } from '../../test' +import { Simple } from '../Simple' +import PermissionedDomainSet from './mock_data/PermissionedDomainSet.json' + +const createWrapper = createSimpleWrapperFactory(Simple) + +describe('PermissionedDomainSetSimple: Renders', () => { + it('renders', () => { + const wrapper = createWrapper(PermissionedDomainSet) + + expectSimpleRowText( + wrapper, + 'cred-type', + '4964656E74697479446F63756D656E74', + ) + expectSimpleRowText( + wrapper, + 'cred-issuer', + 'rUVQzukKnGSw4qNjEvBxLxquaLaMwzVBab', + ) + + wrapper.unmount() + }) +}) diff --git a/src/containers/shared/components/Transaction/PermissionedDomainSet/test/PermissionedDomainSetTableDetail.test.tsx b/src/containers/shared/components/Transaction/PermissionedDomainSet/test/PermissionedDomainSetTableDetail.test.tsx new file mode 100644 index 000000000..6c9d590c2 --- /dev/null +++ b/src/containers/shared/components/Transaction/PermissionedDomainSet/test/PermissionedDomainSetTableDetail.test.tsx @@ -0,0 +1,20 @@ +import { createTableDetailWrapperFactory } from '../../test' +import { TableDetail } from '../TableDetail' +import PermissionedDomainSet from './mock_data/PermissionedDomainSet.json' + +const createWrapper = createTableDetailWrapperFactory(TableDetail) + +describe('PermissionedDomainSetTableDetail', () => { + it('renders PermissionedDomainSetTableDetail', () => { + const wrapper = createWrapper(PermissionedDomainSet) + + expect(wrapper.find('[data-test="cred-type"]')).toHaveText( + 'credential_type: 4964656E74697479446F63756D656E74', + ) + expect(wrapper.find('[data-test="cred-issuer"]')).toHaveText( + 'credential_issuer: rUVQzukKnGSw4qNjEvBxLxquaLaMwzVBab', + ) + + wrapper.unmount() + }) +}) diff --git a/src/containers/shared/components/Transaction/PermissionedDomainSet/test/mock_data/PermissionedDomainSet.json b/src/containers/shared/components/Transaction/PermissionedDomainSet/test/mock_data/PermissionedDomainSet.json new file mode 100644 index 000000000..6396a8a6a --- /dev/null +++ b/src/containers/shared/components/Transaction/PermissionedDomainSet/test/mock_data/PermissionedDomainSet.json @@ -0,0 +1,86 @@ +{ + "close_time_iso": "2025-01-19T02:21:39Z", + "ctid": "C00000400000F7E0", + "hash": "561E23C018C9D6B9A1C03F1AD90E2DEB57DEF5ADA0C3886004F3B1423948A9A7", + "ledger_hash": "D9408AA31B24A03E999C13FE93B0D43174FD1CC4BACE884B012E7FAB255BDEED", + "ledger_index": 64, + "meta": { + "AffectedNodes": [ + { + "CreatedNode": { + "LedgerEntryType": "PermissionedDomain", + "LedgerIndex": "1FF57AD569BC5258A4D3C5AAB77DDEBB68E286F72D8EAB49DEE3DD35C2C5A4AF", + "NewFields": { + "AcceptedCredentials": [ + { + "Credential": { + "CredentialType": "4964656E74697479446F63756D656E74", + "Issuer": "rUVQzukKnGSw4qNjEvBxLxquaLaMwzVBab" + } + } + ], + "Owner": "rUVQzukKnGSw4qNjEvBxLxquaLaMwzVBab", + "Sequence": 50 + } + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Flags": 0, + "Owner": "rUVQzukKnGSw4qNjEvBxLxquaLaMwzVBab", + "RootIndex": "3ECFCBD5393D4EBA88476B159B542BD7D2159D72BF35488ED294E90931567D93" + }, + "LedgerEntryType": "DirectoryNode", + "LedgerIndex": "3ECFCBD5393D4EBA88476B159B542BD7D2159D72BF35488ED294E90931567D93", + "PreviousTxnID": "E3A10DD121B54CB7D8922A77D26C9D766FD8A07850287F278F9313057D664DD4", + "PreviousTxnLgrSeq": 63 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Account": "rUVQzukKnGSw4qNjEvBxLxquaLaMwzVBab", + "Balance": "1999997799", + "Flags": 0, + "OwnerCount": 4, + "Sequence": 51 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "DBACFFF9DBF52B26633B4CED74BD43E8AEF09C20F46C80D83C3A3230BD4E3985", + "PreviousFields": { + "Balance": "1999997999", + "OwnerCount": 3, + "Sequence": 50 + }, + "PreviousTxnID": "E3A10DD121B54CB7D8922A77D26C9D766FD8A07850287F278F9313057D664DD4", + "PreviousTxnLgrSeq": 63 + } + } + ], + "TransactionIndex": 0, + "TransactionResult": "tesSUCCESS" + }, + "tx": { + "AcceptedCredentials": [ + { + "Credential": { + "CredentialType": "4964656E74697479446F63756D656E74", + "Issuer": "rUVQzukKnGSw4qNjEvBxLxquaLaMwzVBab" + } + } + ], + "Account": "rUVQzukKnGSw4qNjEvBxLxquaLaMwzVBab", + "Fee": "200", + "Flags": 0, + "LastLedgerSequence": 83, + "NetworkID": 63456, + "Sequence": 50, + "SigningPubKey": "ED7EE9DDAFF54720AD642944B666CC359091F170BA49C084C3E59803ACDBB17647", + "TransactionType": "PermissionedDomainSet", + "TxnSignature": "B505D12FEDCBAEE792FE5317253E633C094F5D7D8B6D3C9A54B4EAF1F56B2D7F537356D1292A2BAFAE163343BD659F05BF8C916EBA0B10B54D78F20B33B93205", + "date": 790568499, + "ledger_index": 64 + }, + "validated": true +} diff --git a/src/containers/shared/components/Transaction/index.ts b/src/containers/shared/components/Transaction/index.ts index 69bf1e56e..db97fe0d2 100644 --- a/src/containers/shared/components/Transaction/index.ts +++ b/src/containers/shared/components/Transaction/index.ts @@ -7,6 +7,9 @@ import { AMMBid } from './AMMBid' import { AMMVote } from './AMMVote' import { AccountDeleteTransaction as AccountDelete } from './AccountDelete' import { AccountSetTransaction as AccountSet } from './AccountSet' +import { CredentialAcceptTransaction as CredentialAccept } from './CredentialAccept' +import { CredentialCreateTransaction as CredentialCreate } from './CredentialCreate' +import { CredentialDeleteTransaction as CredentialDelete } from './CredentialDelete' import { DIDSetTransaction as DIDSet } from './DIDSet' import { DepositPreauthTransaction as DepositPreauth } from './DepositPreauth' import { EnableAmendmentTransaction as EnableAmendment } from './EnableAmendment' @@ -27,6 +30,8 @@ import { PaymentTransaction as Payment } from './Payment' import { PaymentChannelClaimTransaction as PaymentChannelClaim } from './PaymentChannelClaim' import { PaymentChannelCreateTransaction as PaymentChannelCreate } from './PaymentChannelCreate' import { PaymentChannelFundTransaction as PaymentChannelFund } from './PaymentChannelFund' +import { PermissionedDomainDeleteTransaction as PermissionedDomainDelete } from './PermissionedDomainDelete' +import { PermissionedDomainSetTransaction as PermissionedDomainSet } from './PermissionedDomainSet' import { SetFeeTransaction as SetFee } from './SetFee' import { SetHookTransaction as SetHook } from './SetHook' import { SetRegularKeyTransaction as SetRegularKey } from './SetRegularKey' @@ -57,6 +62,9 @@ export const transactionTypes: { [key: string]: TransactionMapping } = { AccountDelete, AccountSet, Clawback, + CredentialAccept, + CredentialCreate, + CredentialDelete, DIDSet, DepositPreauth, EnableAmendment, @@ -77,6 +85,8 @@ export const transactionTypes: { [key: string]: TransactionMapping } = { PaymentChannelCreate, PaymentChannelClaim, PaymentChannelFund, + PermissionedDomainDelete, + PermissionedDomainSet, SetFee, SetHook, SetRegularKey,