diff --git a/app/main.ts b/app/main.ts index 7515afe..50ddba0 100644 --- a/app/main.ts +++ b/app/main.ts @@ -196,7 +196,7 @@ function createWindow() { if (!process.argv.includes('headless')) { mainWindow.show(); - processUrl(mainWindow, process.argv); + // processUrl(mainWindow, process.argv); } kickoffClipboard(); @@ -229,7 +229,7 @@ const gotTheLock = app.requestSingleInstanceLock(); if (process.platform == 'linux' || process.platform === 'darwin') { app.on('open-url', (event, url) => { - processUrl(mainWindow, [url]); + // processUrl(mainWindow, [url]); }); } @@ -242,7 +242,7 @@ if (!gotTheLock) { if (mainWindow.isMinimized()) mainWindow.restore(); mainWindow.show(); mainWindow.focus(); - processUrl(mainWindow, _commandLine); + // processUrl(mainWindow, _commandLine); } }); diff --git a/docs/local_development/Linux.MD b/docs/Linux.MD similarity index 100% rename from docs/local_development/Linux.MD rename to docs/Linux.MD diff --git a/docs/local_development/Mac.MD b/docs/Mac.MD similarity index 82% rename from docs/local_development/Mac.MD rename to docs/Mac.MD index 7f3ea05..3e2b48d 100644 --- a/docs/local_development/Mac.MD +++ b/docs/Mac.MD @@ -1,3 +1,12 @@ +### Building Release +``` +rm -rf node_modules/ +rm -rf build/ +npm i
npm install --save-dev @electron-forge/maker-dmg electron-builder +TEAM_ID=___ APPLE_ID_PASSWORD=______ APPLE_ID=________ npm run make +``` + + ### Running Locally: Mac ##### Starting the client & server: diff --git a/docs/local_development/release/Windows.md b/docs/Windows.md similarity index 100% rename from docs/local_development/release/Windows.md rename to docs/Windows.md diff --git a/forge.config.js b/forge.config.js index 5756682..9768618 100644 --- a/forge.config.js +++ b/forge.config.js @@ -19,8 +19,8 @@ module.exports = { osxNotarize: { tool: 'notarytool', appleId: process.env.APPLE_ID, - appleIdPassword: process.env.APPLE_PASSWORD, - teamId: process.env.APPLE_TEAM_ID + appleIdPassword: process.env.APPLE_ID_PASSWORD, + teamId: process.env.TEAM_ID } }, rebuildConfig: {}, @@ -45,7 +45,6 @@ module.exports = { { name: '@electron-forge/maker-dmg', config: { - background: './resources/dmg-background.jpg', format: 'ULFO', setupIcon: './resources/icon.icns' } diff --git a/package-lock.json b/package-lock.json index 347e5af..5e1890a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "branta", - "version": "0.8.0", + "version": "0.9.0", "lockfileVersion": 3, "requires": true, "packages": { diff --git a/package.json b/package.json index 7a97a35..ab51378 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "branta", "productName": "Branta", - "version": "0.8.0", + "version": "0.9.0", "main": "build/app/main.js", "author": "Branta LLC", "description": "Verify your bitcoin payments.", diff --git a/resources/dmg-background.jpg b/resources/dmg-background.jpg deleted file mode 100644 index 0ce1035..0000000 Binary files a/resources/dmg-background.jpg and /dev/null differ diff --git a/src/app/app.component.scss b/src/app/app.component.scss index 00661d7..2d8e4a7 100644 --- a/src/app/app.component.scss +++ b/src/app/app.component.scss @@ -14,6 +14,10 @@ img { height: 18px; } + + &.darwin { + justify-content: flex-end; + } } .app { diff --git a/src/app/app.config.ts b/src/app/app.config.ts index b9be8fe..9ac22c1 100644 --- a/src/app/app.config.ts +++ b/src/app/app.config.ts @@ -1,16 +1,17 @@ -import { provideHttpClient } from '@angular/common/http'; +import { HTTP_INTERCEPTORS, provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'; import { ApplicationConfig } from '@angular/core'; import { provideAnimationsAsync } from '@angular/platform-browser/animations/async'; import { provideRouter } from '@angular/router'; import { provideToastr } from 'ngx-toastr'; import { routes } from './app.routes'; import { MAT_FORM_FIELD_DEFAULT_OPTIONS } from '@angular/material/form-field'; +import { CaseConversionInterceptor } from './shared/interceptors/case-conversion.interceptor'; export const appConfig: ApplicationConfig = { providers: [ provideRouter(routes), provideAnimationsAsync(), - provideHttpClient(), + provideHttpClient(withInterceptorsFromDi()), provideToastr({ positionClass: 'toast-bottom-right' }), @@ -19,6 +20,11 @@ export const appConfig: ApplicationConfig = { useValue: { subscriptSizing: 'dynamic' } + }, + { + provide: HTTP_INTERCEPTORS, + useClass: CaseConversionInterceptor, + multi: true } ] }; diff --git a/src/app/features/clipboard/clipboard-details/clipboard-details.component.html b/src/app/features/clipboard/clipboard-details/clipboard-details.component.html index 91c89b8..d17080d 100644 --- a/src/app/features/clipboard/clipboard-details/clipboard-details.component.html +++ b/src/app/features/clipboard/clipboard-details/clipboard-details.component.html @@ -39,12 +39,17 @@
Platform:
-
{{ clipboardItem.platform }}
-
-
-
Description:
-
{{ clipboardItem.description }}
+
+ +
{{ clipboardItem.platform }}
+
+ @if (clipboardItem.description && clipboardItem.description.length > 0) { +
+
Description:
+
{{ clipboardItem.description }}
+
+ }
diff --git a/src/app/features/clipboard/clipboard-details/clipboard-details.component.scss b/src/app/features/clipboard/clipboard-details/clipboard-details.component.scss index 4ad576e..b2b910a 100644 --- a/src/app/features/clipboard/clipboard-details/clipboard-details.component.scss +++ b/src/app/features/clipboard/clipboard-details/clipboard-details.component.scss @@ -48,6 +48,12 @@ background: $warn-color; } } + + &.flex-row { + display: flex; + flex-direction: row; + align-items: center; + } } } diff --git a/src/app/shared/interceptors/case-conversion.interceptor.ts b/src/app/shared/interceptors/case-conversion.interceptor.ts new file mode 100644 index 0000000..91c7c02 --- /dev/null +++ b/src/app/shared/interceptors/case-conversion.interceptor.ts @@ -0,0 +1,32 @@ +import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +@Injectable() +export class CaseConversionInterceptor implements HttpInterceptor { + intercept(req: HttpRequest, next: HttpHandler): Observable> { + return next.handle(req).pipe( + map((event) => { + if (event instanceof HttpResponse && event.body) { + return event.clone({ body: this.snakeToCamel(event.body) }); + } + return event; + }) + ); + } + + private snakeToCamel(obj: any): any { + if (obj instanceof Array) { + return obj.map((v) => this.snakeToCamel(v)); + } else if (obj !== null && obj?.constructor === Object) { + return Object.keys(obj).reduce((result, key) => { + const camelKey = key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase()); + result[camelKey] = this.snakeToCamel(obj[key]); + return result; + }, {} as any); + } + + return obj; + } +} diff --git a/src/app/shared/models/clipboard-item.ts b/src/app/shared/models/clipboard-item.ts index 983582f..f96fbf3 100644 --- a/src/app/shared/models/clipboard-item.ts +++ b/src/app/shared/models/clipboard-item.ts @@ -32,6 +32,7 @@ export interface PaymentClipboardItem extends ClipboardItem { destinations: PaymentDestination[]; platform: string; description: string | null; + platformLogoUrl: string; } export interface Bolt11ClipboardItem extends ClipboardItem, Bolt11Details {} diff --git a/src/app/shared/services/clipboard.service.ts b/src/app/shared/services/clipboard.service.ts index 07ac38f..5e70aee 100644 --- a/src/app/shared/services/clipboard.service.ts +++ b/src/app/shared/services/clipboard.service.ts @@ -1,7 +1,6 @@ import { Injectable, NgZone } from '@angular/core'; import { BehaviorSubject, ReplaySubject } from 'rxjs'; import { ClipboardItem } from '../models/clipboard-item'; -import { Settings } from '../models/settings'; import { Vault } from '../models/vault.model'; import { Wallet } from '../models/wallet.model'; import { ServerService } from './server.service'; @@ -51,7 +50,14 @@ export class ClipboardService extends BaseClipboardService { public async rerunGetClipboardItem(notify: boolean = false): Promise { this.clipboardItem.next( - await ClipboardService.getClipboardItem(this._clipboardText, notify, this._vaults, this._wallets, this.settingsService.settings(), this.serverService) + await ClipboardService.getClipboardItem( + this._clipboardText.trim(), + notify, + this._vaults, + this._wallets, + this.settingsService.settings(), + this.serverService + ) ); } } diff --git a/src/app/shared/services/server.service.ts b/src/app/shared/services/server.service.ts index 76f69ff..8b8d7d1 100644 --- a/src/app/shared/services/server.service.ts +++ b/src/app/shared/services/server.service.ts @@ -25,6 +25,6 @@ export class ServerService { const subdomain = this.settingsService.settings().developerMode ? 'staging' : 'guardrail'; - return `https://${subdomain}.branta.pro/v2`; + return `https://${subdomain}.branta.pro`; } }