diff --git a/app/src/components/connect/AddSession.tsx b/app/src/components/connect/AddSession.tsx index 7980027f5..874aaef4b 100644 --- a/app/src/components/connect/AddSession.tsx +++ b/app/src/components/connect/AddSession.tsx @@ -8,6 +8,7 @@ import FormField from 'components/common/FormField'; import FormInput from 'components/common/FormInput'; import FormSelect from 'components/common/FormSelect'; import PurpleButton from './PurpleButton'; +import { PermissionTypeValues } from 'store/views/addSessionView'; const Styled = { Wrapper: styled.div``, @@ -50,6 +51,14 @@ const AddSession: React.FC = ({ primary }) => { ); } + const validatePermissionType = (v: string) => { + const permissionType = Object.values(PermissionTypeValues).find(value => value === v); + + if (!permissionType) return; + + addSessionView.setPermissionType(permissionType); + }; + return ( @@ -74,18 +83,18 @@ const AddSession: React.FC = ({ primary }) => { - {addSessionView.permissionType === 'custom' + {addSessionView.permissionType === PermissionTypeValues.Custom ? l('common.next') : l('common.submit')} diff --git a/app/src/components/connect/CustomSessionPage.tsx b/app/src/components/connect/CustomSessionPage.tsx index 973387ce2..c17864495 100644 --- a/app/src/components/connect/CustomSessionPage.tsx +++ b/app/src/components/connect/CustomSessionPage.tsx @@ -14,6 +14,7 @@ import FormSelect from 'components/common/FormSelect'; import FormDate from 'components/common/FormDate'; import FormSwitch from 'components/common/v2/FormSwitch'; import PurpleButton from './PurpleButton'; +import { PermissionTypeValues } from 'store/views/addSessionView'; const Styled = { Wrapper: styled.div` @@ -108,7 +109,7 @@ const CustomSessionPage: React.FC = () => { addSessionView.handleCustomSubmit(); }, []); - const setPermissionType = (permissionType: string) => { + const setPermissionType = (permissionType: PermissionTypeValues) => { return () => { addSessionView.setPermissionType(permissionType); }; @@ -175,48 +176,62 @@ const CustomSessionPage: React.FC = () => { {l('admin')} {l('adminDesc')} {l('readonly')} {l('readonlyDesc')} {l('liquidity')} {l('liquidityDesc')} {l('payments')} {l('paymentsDesc')} + {l('messenger')} + {l('messengerDesc')} + + + {l('custodial')} {l('custodialDesc')} {l('custom')} {l('customDesc')} @@ -228,7 +243,7 @@ const CustomSessionPage: React.FC = () => { - {addSessionView.permissionType === 'custodial' && ( + {addSessionView.permissionType === PermissionTypeValues.Custodial && ( diff --git a/app/src/i18n/locales/en-US.json b/app/src/i18n/locales/en-US.json index 55a8f0092..78ac05ee1 100644 --- a/app/src/i18n/locales/en-US.json +++ b/app/src/i18n/locales/en-US.json @@ -56,6 +56,8 @@ "cmps.connect.CustomSessionPage.liquidityDesc": "User can only set fees, use Loop, and use Pool.", "cmps.connect.CustomSessionPage.payments": "Payments Manager", "cmps.connect.CustomSessionPage.paymentsDesc": "User can only send and receive payments.", + "cmps.connect.CustomSessionPage.messenger": "Keysend Messenger", + "cmps.connect.CustomSessionPage.messengerDesc": "User can send and receive payments plus sign messages.", "cmps.connect.CustomSessionPage.custodial": "Custodial Account", "cmps.connect.CustomSessionPage.custodialDesc": "Create a custodial off-chain account for your node.", "cmps.connect.CustomSessionPage.custom": "Custom", @@ -78,6 +80,8 @@ "cmps.connect.CustomSessionPage.permSendDesc": "Send funds from this node.", "cmps.connect.CustomSessionPage.permReceive": "Receive", "cmps.connect.CustomSessionPage.permReceiveDesc": "Receive funds on this node.", + "cmps.connect.CustomSessionPage.permSign": "Sign", + "cmps.connect.CustomSessionPage.permSignDesc": "Sign messages to verify node.", "cmps.connect.CustomSessionPage.advanced": "Advanced Options", "cmps.connect.CustomSessionPage.proxy": "Proxy Server", "cmps.connect.CustomSessionPage.proxyDesc": "Specify a custom Lightning Node Connect proxy server", diff --git a/app/src/store/views/addSessionView.ts b/app/src/store/views/addSessionView.ts index 86660276e..5cf0d08f6 100644 --- a/app/src/store/views/addSessionView.ts +++ b/app/src/store/views/addSessionView.ts @@ -3,11 +3,21 @@ import { Store } from 'store'; import * as LIT from 'types/generated/lit-sessions_pb'; import { MAX_DATE, PermissionUriMap } from 'util/constants'; +export enum PermissionTypeValues { + Admin = 'admin', + ReadOnly = 'read-only', + Liquidity = 'liquidity', + Payments = 'payments', + Messenger = 'messenger', + Custodial = 'custodial', + Custom = 'custom', +} + export default class AddSessionView { private _store: Store; label = ''; - permissionType = 'admin'; // Expected values: admin | read-only | custodial | custom | liquidity | payments + permissionType: PermissionTypeValues = PermissionTypeValues.Admin; editing = false; permissions: { [key: string]: boolean } = { openChannel: false, @@ -17,6 +27,7 @@ export default class AddSessionView { pool: false, send: false, receive: false, + sign: false, }; expiration = 'never'; // Expected values: 7 | 30 | 60 | 90 | never | custom expirationOptions = [ @@ -49,11 +60,11 @@ export default class AddSessionView { // get sessionType() { - if (this.permissionType === 'admin') { + if (this.permissionType === PermissionTypeValues.Admin) { return LIT.SessionType.TYPE_MACAROON_ADMIN; - } else if (this.permissionType === 'read-only') { + } else if (this.permissionType === PermissionTypeValues.ReadOnly) { return LIT.SessionType.TYPE_MACAROON_READONLY; - } else if (this.permissionType === 'custodial') { + } else if (this.permissionType === PermissionTypeValues.Custodial) { return LIT.SessionType.TYPE_MACAROON_ACCOUNT; } @@ -132,45 +143,52 @@ export default class AddSessionView { this.custodialBalance = balance; } - setPermissionType(permissionType: string) { + setPermissionType(permissionType: PermissionTypeValues) { this.permissionType = permissionType; switch (permissionType) { - case 'admin': + case PermissionTypeValues.Admin: this.setAllPermissions(true); break; - case 'read-only': + case PermissionTypeValues.ReadOnly: this.setAllPermissions(false); break; - case 'liquidity': + case PermissionTypeValues.Liquidity: this.setAllPermissions(false); this.permissions.setFees = true; this.permissions.loop = true; this.permissions.pool = true; break; - case 'payments': + case PermissionTypeValues.Payments: + this.setAllPermissions(false); + this.permissions.send = true; + this.permissions.receive = true; + break; + + case PermissionTypeValues.Messenger: this.setAllPermissions(false); this.permissions.send = true; this.permissions.receive = true; + this.permissions.sign = true; break; - case 'custodial': + case PermissionTypeValues.Custodial: this.setAllPermissions(false); this.permissions.send = true; this.permissions.receive = true; break; - case 'custom': + case PermissionTypeValues.Custom: // We don't need to change anything, let the user customize permissions how they want break; } } togglePermission(permission: string) { - this.setPermissionType('custom'); + this.setPermissionType(PermissionTypeValues.Custom); this.permissions[permission] = !this.permissions[permission]; } @@ -184,7 +202,7 @@ export default class AddSessionView { cancel() { this.label = ''; - this.permissionType = 'admin'; + this.permissionType = PermissionTypeValues.Admin; this.editing = false; this.setAllPermissions(false); this.expiration = 'never'; @@ -197,7 +215,7 @@ export default class AddSessionView { // async handleSubmit() { - if (this.permissionType === 'custom') { + if (this.permissionType === PermissionTypeValues.Custom) { this._store.settingsStore.sidebarVisible = false; this._store.router.push('/connect/custom'); } else { @@ -223,7 +241,7 @@ export default class AddSessionView { label = `My ${this.permissionType} session`; } - if (this.permissionType === 'custodial') { + if (this.permissionType === PermissionTypeValues.Custodial) { const custodialAccountId = await this.registerCustodialAccount(); // Return immediately to prevent a session being created when there is an error creating the custodial account diff --git a/app/src/util/constants.ts b/app/src/util/constants.ts index ae5a7a965..0b9ce3c03 100644 --- a/app/src/util/constants.ts +++ b/app/src/util/constants.ts @@ -116,4 +116,5 @@ export const PermissionUriMap: { [key: string]: string[] } = { '/lnrpc.Lightning/ListInvoices', '/lnrpc.Lightning/SubscribeInvoices', ], + sign: ['/lnrpc.Lightning/SignMessage'], };