diff --git a/package.json b/package.json
index dbbf2fc12..4996d1618 100644
--- a/package.json
+++ b/package.json
@@ -95,7 +95,7 @@
"framer-motion": "^12.5.0",
"fs-extra": "11.3.0",
"image-type": "^4.1.0",
- "libsession_util_nodejs": "https://github.com/session-foundation/libsession-util-nodejs/releases/download/v0.6.11/libsession_util_nodejs-v0.6.11.tar.gz",
+ "libsession_util_nodejs": "https://github.com/session-foundation/libsession-util-nodejs/releases/download/v0.6.12/libsession_util_nodejs-v0.6.12.tar.gz",
"libsodium-wrappers-sumo": "^0.7.15",
"linkify-it": "^5.0.0",
"lodash": "^4.17.21",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a9d521f72..3a2ce8383 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -96,8 +96,8 @@ importers:
specifier: ^4.1.0
version: 4.1.0
libsession_util_nodejs:
- specifier: https://github.com/session-foundation/libsession-util-nodejs/releases/download/v0.6.11/libsession_util_nodejs-v0.6.11.tar.gz
- version: https://github.com/session-foundation/libsession-util-nodejs/releases/download/v0.6.11/libsession_util_nodejs-v0.6.11.tar.gz
+ specifier: https://github.com/session-foundation/libsession-util-nodejs/releases/download/v0.6.12/libsession_util_nodejs-v0.6.12.tar.gz
+ version: https://github.com/session-foundation/libsession-util-nodejs/releases/download/v0.6.12/libsession_util_nodejs-v0.6.12.tar.gz
libsodium-wrappers-sumo:
specifier: ^0.7.15
version: 0.7.15
@@ -4013,9 +4013,9 @@ packages:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
- libsession_util_nodejs@https://github.com/session-foundation/libsession-util-nodejs/releases/download/v0.6.11/libsession_util_nodejs-v0.6.11.tar.gz:
- resolution: {integrity: sha512-nzL+wJmiVHlTehTqmmQRuRaB+nA/AC93Aa05vmGtxosHLnIfkKI7PKk9JRWsQ6GW39NeDo/UWnWQW+GGuz8jEw==, tarball: https://github.com/session-foundation/libsession-util-nodejs/releases/download/v0.6.11/libsession_util_nodejs-v0.6.11.tar.gz}
- version: 0.6.11
+ libsession_util_nodejs@https://github.com/session-foundation/libsession-util-nodejs/releases/download/v0.6.12/libsession_util_nodejs-v0.6.12.tar.gz:
+ resolution: {integrity: sha512-aHPiHREn5AwVo3JPSIdA1q3/L7WpDlwu5Z90KuD7WFHIDOSoJbnxv+0kv/SwawRr4AiSMiRGgfsxq6iRwxh9gQ==, tarball: https://github.com/session-foundation/libsession-util-nodejs/releases/download/v0.6.12/libsession_util_nodejs-v0.6.12.tar.gz}
+ version: 0.6.12
libsodium-sumo@0.7.15:
resolution: {integrity: sha512-5tPmqPmq8T8Nikpm1Nqj0hBHvsLFCXvdhBFV7SGOitQPZAA6jso8XoL0r4L7vmfKXr486fiQInvErHtEvizFMw==}
@@ -10114,7 +10114,7 @@ snapshots:
prelude-ls: 1.2.1
type-check: 0.4.0
- libsession_util_nodejs@https://github.com/session-foundation/libsession-util-nodejs/releases/download/v0.6.11/libsession_util_nodejs-v0.6.11.tar.gz:
+ libsession_util_nodejs@https://github.com/session-foundation/libsession-util-nodejs/releases/download/v0.6.12/libsession_util_nodejs-v0.6.12.tar.gz:
dependencies:
cmake-js: 7.3.1
node-addon-api: 8.5.0
diff --git a/ts/components/dialog/user-settings/pages/user-pro/ProNonOriginatingPage.tsx b/ts/components/dialog/user-settings/pages/user-pro/ProNonOriginatingPage.tsx
index 1ac1ce41b..3d2d251fd 100644
--- a/ts/components/dialog/user-settings/pages/user-pro/ProNonOriginatingPage.tsx
+++ b/ts/components/dialog/user-settings/pages/user-pro/ProNonOriginatingPage.tsx
@@ -26,6 +26,7 @@ import {
useProBackendProDetails,
type ProcessedProDetails,
} from '../../../../../state/selectors/proBackendData';
+import { userSettingsModal } from '../../../../../state/ducks/modalDialog';
type VariantPageProps = {
variant: ProNonOriginatingPageVariant;
@@ -69,6 +70,8 @@ function ProPageHero({ variant }: VariantPageProps) {
return ;
case 'refund':
return ;
+ case 'refundRequested':
+ return ;
default:
return assertUnreachable(variant, `Unknown pro non originating page variant: ${variant}`);
}
@@ -404,16 +407,16 @@ const ProInfoBlockRefundTitle = styled.div`
font-weight: 700;
padding-top: var(--margins-xs);
`;
+const containerStyle = {
+ paddingBlock: 'var(--margins-md)',
+ paddingInline: 'var(--margins-lg)',
+ gap: 'var(--margins-sm)',
+ lineHeight: '120%',
+};
function ProInfoBlockRefundSessionSupport() {
return (
-
+
@@ -429,13 +432,7 @@ function ProInfoBlockRefundSessionSupport() {
function ProInfoBlockRefundGooglePlay() {
const { data } = useProBackendProDetailsLocal();
return (
-
+
@@ -508,6 +505,36 @@ function ProInfoBlockRefund() {
}
}
+function ProInfoBlockRefundRequested() {
+ const { data } = useProBackendProDetailsLocal();
+ const dispatch = getAppDispatch();
+
+ return (
+
+
+
+
+
+
+
+
+
+
+ showLinkVisitWarningDialog(data.providerConstants.refund_status_url, dispatch)
+ }
+ style={{ cursor: 'pointer' }}
+ >
+
+
+
+ );
+}
+
function ProInfoBlock({ variant }: VariantPageProps) {
switch (variant) {
case 'upgrade':
@@ -518,6 +545,8 @@ function ProInfoBlock({ variant }: VariantPageProps) {
return ;
case 'refund':
return ;
+ case 'refundRequested':
+ return ;
case 'renew':
return ;
default:
@@ -589,6 +618,27 @@ function ProPageButtonRefund() {
);
}
+function ProPageButtonRefundRequested() {
+ const dispatch = getAppDispatch();
+
+ return (
+ {
+ dispatch(
+ userSettingsModal({
+ userSettingsPage: 'pro',
+ })
+ );
+ }}
+ dataTestId="pro-refund-return-button"
+ >
+
+
+ );
+}
+
function ProPageButton({ variant }: VariantPageProps) {
switch (variant) {
case 'upgrade':
@@ -600,6 +650,8 @@ function ProPageButton({ variant }: VariantPageProps) {
return ;
case 'refund':
return ;
+ case 'refundRequested':
+ return ;
default:
return assertUnreachable(variant, `Unknown pro non originating page variant: ${variant}`);
}
diff --git a/ts/components/dialog/user-settings/pages/user-pro/ProSettingsPage.tsx b/ts/components/dialog/user-settings/pages/user-pro/ProSettingsPage.tsx
index b3172433e..9f300bfd5 100644
--- a/ts/components/dialog/user-settings/pages/user-pro/ProSettingsPage.tsx
+++ b/ts/components/dialog/user-settings/pages/user-pro/ProSettingsPage.tsx
@@ -464,12 +464,18 @@ function ProSettings({ state }: SectionProps) {
title: { token: 'proAccessLoading' },
description: { token: 'proAccessLoadingDescription' },
})
- : userSettingsModal({
- userSettingsPage: 'proNonOriginating',
- nonOriginatingVariant: 'update',
- overrideBackAction: returnToThisModalAction,
- centerAlign,
- })
+ : data.isProcessingRefund
+ ? userSettingsModal({
+ userSettingsPage: 'proNonOriginating',
+ nonOriginatingVariant: 'refundRequested',
+ overrideBackAction: state.returnToThisModalAction,
+ })
+ : userSettingsModal({
+ userSettingsPage: 'proNonOriginating',
+ nonOriginatingVariant: 'update',
+ overrideBackAction: returnToThisModalAction,
+ centerAlign,
+ })
);
};
@@ -481,29 +487,43 @@ function ProSettings({ state }: SectionProps) {
return null;
}
+ let subText: TrArgs;
+ if (isError) {
+ subText = { token: 'errorLoadingProAccess' };
+ } else if (isLoading) {
+ subText = { token: 'proAccessLoadingEllipsis' };
+ } else if (data.isProcessingRefund) {
+ subText = { token: 'processingRefundRequest', platform: data.providerConstants.platform };
+ } else if (data.inGracePeriod) {
+ subText = { token: 'proRenewalUnsuccessful' };
+ } else if (data.autoRenew) {
+ subText = { token: 'proAutoRenewTime', time: data.expiryTimeRelativeString };
+ } else {
+ subText = { token: 'proExpiringTime', time: data.expiryTimeRelativeString };
+ }
+
return (
-
+ {data.isProcessingRefund ? (
+ }
+ rowReverse
+ />
+ ) : (
+
+ )}
= beginAutoRenew && now < expiryTimeMs;
}
+ const isProcessingRefund = !!data?.refund_requested_unix_ts_ms;
+
return {
data: {
currentStatus: data?.status ?? defaultProAccessDetailsSourceData.currentStatus,
autoRenew,
inGracePeriod,
+ isProcessingRefund,
variant,
variantString: proAccessVariantToString(variant),
expiryTimeMs,
diff --git a/ts/types/ReduxTypes.d.ts b/ts/types/ReduxTypes.d.ts
index 076f76d97..d1ac0e7f3 100644
--- a/ts/types/ReduxTypes.d.ts
+++ b/ts/types/ReduxTypes.d.ts
@@ -7,7 +7,13 @@
export type PasswordAction = 'set' | 'change' | 'remove';
-export type ProNonOriginatingPageVariant = 'upgrade' | 'update' | 'cancel' | 'refund' | 'renew';
+export type ProNonOriginatingPageVariant =
+ | 'upgrade'
+ | 'update'
+ | 'cancel'
+ | 'refund'
+ | 'refundRequested'
+ | 'renew';
export type EditProfilePictureModalProps = {
conversationId: string;