Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
52f6045
Merge pull request #124 from BrantaOps/release/0.8.0
kylemccullen Dec 3, 2025
4059724
Align apple build names
Dec 10, 2025
857e2c1
fix 404 not found error when checkout mode is on
kylemccullen Dec 10, 2025
ecfe5aa
trim clipboard content before pattern matching
kylemccullen Dec 10, 2025
33c345a
Merge pull request #130 from BrantaOps/a
keith-gardner Dec 10, 2025
e83348b
Merge pull request #132 from BrantaOps/bugfix/125
keith-gardner Dec 10, 2025
4d9e2c9
Merge pull request #131 from BrantaOps/bugfix/126
keith-gardner Dec 10, 2025
0ede552
right align logo on mac
kylemccullen Dec 11, 2025
eaa2b00
display platform logo on clipboard details card, add camel case
kylemccullen Dec 11, 2025
0877963
Merge pull request #134 from BrantaOps/feature/133
keith-gardner Dec 11, 2025
ca07d44
Clean up docs
Dec 11, 2025
c65a20e
Merge pull request #135 from BrantaOps/feature/127
kylemccullen Dec 11, 2025
218e1f9
Merge pull request #138 from BrantaOps/f
keith-gardner Dec 11, 2025
c6f85e8
disable vault feature
kylemccullen Dec 11, 2025
8bf194d
Merge pull request #139 from BrantaOps/feature/129
kylemccullen Dec 11, 2025
6e944ad
only display description if it exists
kylemccullen Dec 11, 2025
8730059
Merge pull request #140 from BrantaOps/feature/136
kylemccullen Dec 11, 2025
2ed7b1b
Fix environment variable name for Apple ID password
keith-gardner Dec 11, 2025
688eef8
Use clean DMG background for Mac
Dec 12, 2025
7021d7a
Merge pull request #142 from BrantaOps/m
kylemccullen Dec 12, 2025
0954bc9
release 0.9.0
kylemccullen Dec 12, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions app/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ function createWindow() {

if (!process.argv.includes('headless')) {
mainWindow.show();
processUrl(mainWindow, process.argv);
// processUrl(mainWindow, process.argv);
}

kickoffClipboard();
Expand Down Expand Up @@ -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]);
});
}

Expand All @@ -242,7 +242,7 @@ if (!gotTheLock) {
if (mainWindow.isMinimized()) mainWindow.restore();
mainWindow.show();
mainWindow.focus();
processUrl(mainWindow, _commandLine);
// processUrl(mainWindow, _commandLine);
}
});

Expand Down
File renamed without changes.
9 changes: 9 additions & 0 deletions docs/local_development/Mac.MD → docs/Mac.MD
Original file line number Diff line number Diff line change
@@ -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:
Expand Down
File renamed without changes.
5 changes: 2 additions & 3 deletions forge.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -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: {},
Expand All @@ -45,7 +45,6 @@ module.exports = {
{
name: '@electron-forge/maker-dmg',
config: {
background: './resources/dmg-background.jpg',
format: 'ULFO',
setupIcon: './resources/icon.icns'
}
Expand Down
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -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.",
Expand Down
Binary file removed resources/dmg-background.jpg
Binary file not shown.
4 changes: 4 additions & 0 deletions src/app/app.component.scss
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@
img {
height: 18px;
}

&.darwin {
justify-content: flex-end;
}
}

.app {
Expand Down
10 changes: 8 additions & 2 deletions src/app/app.config.ts
Original file line number Diff line number Diff line change
@@ -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'
}),
Expand All @@ -19,6 +20,11 @@ export const appConfig: ApplicationConfig = {
useValue: {
subscriptSizing: 'dynamic'
}
},
{
provide: HTTP_INTERCEPTORS,
useClass: CaseConversionInterceptor,
multi: true
}
]
};
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,17 @@
</div>
<div class="item">
<div class="title">Platform:</div>
<div class="value">{{ clipboardItem.platform }}</div>
</div>
<div class="item">
<div class="title">Description:</div>
<div class="value">{{ clipboardItem.description }}</div>
<div class="value flex-row">
<img [src]="clipboardItem.platformLogoUrl" height="30" />
<div>{{ clipboardItem.platform }}</div>
</div>
</div>
@if (clipboardItem.description && clipboardItem.description.length > 0) {
<div class="item">
<div class="title">Description:</div>
<div class="value">{{ clipboardItem.description }}</div>
</div>
}
<div class="unexpected">
<button mat-button color="accent" (click)="onShareFeedback()">Unexpected?</button>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,12 @@
background: $warn-color;
}
}

&.flex-row {
display: flex;
flex-direction: row;
align-items: center;
}
}
}

Expand Down
32 changes: 32 additions & 0 deletions src/app/shared/interceptors/case-conversion.interceptor.ts
Original file line number Diff line number Diff line change
@@ -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<any>, next: HttpHandler): Observable<HttpEvent<any>> {
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;
}
}
1 change: 1 addition & 0 deletions src/app/shared/models/clipboard-item.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ export interface PaymentClipboardItem extends ClipboardItem {
destinations: PaymentDestination[];
platform: string;
description: string | null;
platformLogoUrl: string;
}

export interface Bolt11ClipboardItem extends ClipboardItem, Bolt11Details {}
Expand Down
10 changes: 8 additions & 2 deletions src/app/shared/services/clipboard.service.ts
Original file line number Diff line number Diff line change
@@ -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';
Expand Down Expand Up @@ -51,7 +50,14 @@ export class ClipboardService extends BaseClipboardService {

public async rerunGetClipboardItem(notify: boolean = false): Promise<void> {
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
)
);
}
}
2 changes: 1 addition & 1 deletion src/app/shared/services/server.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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`;
}
}
Loading