Skip to content

Commit

Permalink
Merge branch 'develop' into 'master'
Browse files Browse the repository at this point in the history
Develop

See merge request papers/airgap/airgap-vault!475
  • Loading branch information
godenzim committed Sep 25, 2023
2 parents 2e10b4d + 12343ad commit 0c4b1bc
Show file tree
Hide file tree
Showing 15 changed files with 139 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,12 @@ class FileExplorer private constructor(

fun loadInstalledModules(): List<JSModule.Installed> = loadModules(filesExplorer, JSModule.Installed.constructor)

fun loadAssetModule(identifier: String): JSModule.Asset {
val manifest = JSObject(assetsExplorer.readModuleManifest(identifier).decodeToString())

return loadModule(identifier, manifest, JSModule.Asset.constructor)
}

fun loadInstalledModule(identifier: String): JSModule.Installed {
val manifest = JSObject(filesExplorer.readModuleManifest(identifier).decodeToString())

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,30 @@ class IsolatedModules : Plugin() {
}
}

@PluginMethod
fun readAssetModule(call: PluginCall) {
call.executeCatching {
assertReceived(Param.IDENTIFIER)

activity.lifecycleScope.launch {
executeCatching {
val module = fileExplorer.loadAssetModule(identifier)
val manifest = fileExplorer.readModuleManifest(module)

resolve(
JSObject(
"""
{
"manifest": ${JSObject(manifest.decodeToString())}
}
""".trimIndent()
)
)
}
}
}
}

@PluginMethod
fun loadAllModules(call: PluginCall) {
activity.lifecycleScope.launch {
Expand Down
4 changes: 4 additions & 0 deletions ios/App/App.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
A351B44E297965EF00BE0DC9 /* Zip.m in Sources */ = {isa = PBXBuildFile; fileRef = A351B44D297965EF00BE0DC9 /* Zip.m */; };
A35472FD29ED9C7C00AFD5A7 /* Hex.swift in Sources */ = {isa = PBXBuildFile; fileRef = A35472FC29ED9C7C00AFD5A7 /* Hex.swift */; };
A357ED09299BD8EA00EDCA39 /* Filesystem.swift in Sources */ = {isa = PBXBuildFile; fileRef = A357ED08299BD8EA00EDCA39 /* Filesystem.swift */; };
A3BD9A0D2AA5E7EE00666155 /* Dictionary+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3BD9A0C2AA5E7EE00666155 /* Dictionary+Additions.swift */; };
A3C53AA1299247640059E997 /* JSEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3C53AA0299247640059E997 /* JSEnvironment.swift */; };
A3C53AA3299259FC0059E997 /* WebViewEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3C53AA2299259FC0059E997 /* WebViewEnvironment.swift */; };
A3C53AA52992711E0059E997 /* Sequence+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3C53AA42992711E0059E997 /* Sequence+Additions.swift */; };
Expand Down Expand Up @@ -89,6 +90,7 @@
A351B44D297965EF00BE0DC9 /* Zip.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Zip.m; sourceTree = "<group>"; };
A35472FC29ED9C7C00AFD5A7 /* Hex.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Hex.swift; sourceTree = "<group>"; };
A357ED08299BD8EA00EDCA39 /* Filesystem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Filesystem.swift; sourceTree = "<group>"; };
A3BD9A0C2AA5E7EE00666155 /* Dictionary+Additions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Dictionary+Additions.swift"; sourceTree = "<group>"; };
A3C53AA0299247640059E997 /* JSEnvironment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSEnvironment.swift; sourceTree = "<group>"; };
A3C53AA2299259FC0059E997 /* WebViewEnvironment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebViewEnvironment.swift; sourceTree = "<group>"; };
A3C53AA42992711E0059E997 /* Sequence+Additions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Sequence+Additions.swift"; sourceTree = "<group>"; };
Expand Down Expand Up @@ -218,6 +220,7 @@
A33BA9E628D9C52D00BD8015 /* JSValue+Additions.swift */,
A33BA9E828D9E23E00BD8015 /* WK+Additions.swift */,
A3C53AA42992711E0059E997 /* Sequence+Additions.swift */,
A3BD9A0C2AA5E7EE00666155 /* Dictionary+Additions.swift */,
);
path = Extensions;
sourceTree = "<group>";
Expand Down Expand Up @@ -419,6 +422,7 @@
A33BA9E728D9C52D00BD8015 /* JSValue+Additions.swift in Sources */,
A3226AAC29F12FA10006ACCA /* Environment.m in Sources */,
A3CF6E4D28CA2FA100A9A883 /* IsolatedModules.swift in Sources */,
A3BD9A0D2AA5E7EE00666155 /* Dictionary+Additions.swift in Sources */,
A3E4DE8F299157C2009F3C8D /* JSModule.swift in Sources */,
885F55E825EE224200D85A88 /* SaplingNative.m in Sources */,
49690A7E25C2BF80004A3586 /* VaultError.swift in Sources */,
Expand Down
26 changes: 26 additions & 0 deletions ios/App/App/Helpers/Extensions/Dictionary+Additions.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
//
// Dictionary+Additions.swift
// App
//
// Created by Julia Samol on 04.09.23.
//

import Foundation

extension Dictionary {
@inlinable subscript(key: Key, setDefault defaultValue: @autoclosure () -> Value) -> Value {
mutating get {
guard let value = self[key] else {
let value = defaultValue()
self[key] = value

return value
}

return value
}
set {
self[key] = newValue
}
}
}
14 changes: 10 additions & 4 deletions ios/App/App/IsolatedModules/FileExplorer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -31,16 +31,22 @@ struct FileExplorer {
try loadModules(using: assetsExplorer, creatingModuleWith: JSModule.Asset.getInit())
}

func loadInstalledModules() throws -> [JSModule.Installed] {
try loadModules(using: documentExplorer, creatingModuleWith: JSModule.Installed.getInit(using: documentExplorer))
}

func loadAssetModule(_ identifier: String) throws -> JSModule.Asset {
let manifest = try assetsExplorer.readModuleManifest(identifier)

return try loadModule(identifier, fromManifest: manifest, creatingModuleWith: JSModule.Asset.getInit())
}

func loadInstalledModule(_ identifier: String) throws -> JSModule.Installed {
let manifest = try documentExplorer.readModuleManifest(identifier)

return try loadModule(identifier, fromManifest: manifest, creatingModuleWith: JSModule.Installed.getInit(using: documentExplorer))
}

func loadInstalledModules() throws -> [JSModule.Installed] {
try loadModules(using: documentExplorer, creatingModuleWith: JSModule.Installed.getInit(using: documentExplorer))
}

func loadPreviewModule(atPath path: String, locatedIn directory: Directory) throws -> JSModule.Preview {
guard let directory = fileManager.getDirectory(from: directory),
let url = fileManager.urls(for: directory, in: .userDomainMask).first?.appendingPathComponent(path) else {
Expand Down
1 change: 1 addition & 0 deletions ios/App/App/IsolatedModules/IsolatedModules.m
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
CAP_PLUGIN_METHOD(registerDynamicModule, CAPPluginReturnPromise);
CAP_PLUGIN_METHOD(readDynamicModule, CAPPluginReturnPromise);
CAP_PLUGIN_METHOD(removeDynamicModules, CAPPluginReturnPromise);
CAP_PLUGIN_METHOD(readAssetModule, CAPPluginReturnPromise);
CAP_PLUGIN_METHOD(loadAllModules, CAPPluginReturnPromise);
CAP_PLUGIN_METHOD(callMethod, CAPPluginReturnPromise);
CAP_PLUGIN_METHOD(batchCallMethod, CAPPluginReturnPromise);
Expand Down
25 changes: 25 additions & 0 deletions ios/App/App/IsolatedModules/IsolatedModules.swift
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,31 @@ public class IsolatedModules: CAPPlugin {
}
}

@objc func readAssetModule(_ call: CAPPluginCall) {
call.assertReceived(forMethod: "readAssetModule", requiredParams: Param.IDENTIFIER)

do {
guard let identifier = call.identifier else {
throw Error.invalidData
}

Task {
do {
let module = try fileExplorer.loadAssetModule(identifier)
let manifest = try fileExplorer.readModuleManifest(.asset(module))

call.resolve([
"manifest": try JSONSerialization.jsonObject(with: manifest)
])
} catch {
call.reject("Error: \(error)")
}
}
} catch {
call.reject("Error: \(error)")
}
}

@objc func loadAllModules(_ call: CAPPluginCall) {
Task {
do {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ class WebViewEnvironment: NSObject, JSEnvironment, WKNavigationDelegate {
);
"""

webView.evaluateJavaScript(script, completionHandler: nil)
try await webView.evaluateJavaScriptAsync(script)
guard let result = try await jsAsyncResult.awaitResultWithID(resultID) as? [String: Any] else {
throw Error.invalidResult
}
Expand Down Expand Up @@ -72,7 +72,7 @@ class WebViewEnvironment: NSObject, JSEnvironment, WKNavigationDelegate {

private actor WebViewManager {
private(set) var webViews: [String: [String: WKWebViewExtended]] = [:]
@MainActor private var activeTasks: [String: Task<WKWebViewExtended, Swift.Error>] = [:]
@MainActor private var activeTasks: [String: [String: Task<WKWebViewExtended, Swift.Error>]] = [:]

func add(
runRef: String,
Expand All @@ -81,11 +81,7 @@ class WebViewEnvironment: NSObject, JSEnvironment, WKNavigationDelegate {
userContentController: WKUserContentController,
jsAsyncResult: JSAsyncResult
) {
if webViews[runRef] == nil {
webViews[runRef] = .init()
}

webViews[runRef]![module.identifier] = (webView, userContentController, jsAsyncResult)
webViews[runRef, setDefault: .init()][module.identifier] = (webView, userContentController, jsAsyncResult)
}

@MainActor
Expand All @@ -94,7 +90,7 @@ class WebViewEnvironment: NSObject, JSEnvironment, WKNavigationDelegate {
and module: JSModule,
using env: WebViewEnvironment
) async throws -> WKWebViewExtended {
if let runRef = runRef, let activeTask = activeTasks[runRef] {
if let runRef = runRef, let activeTask = activeTasks[runRef]?[module.identifier] {
return try await activeTask.value
}

Expand Down Expand Up @@ -153,7 +149,7 @@ class WebViewEnvironment: NSObject, JSEnvironment, WKNavigationDelegate {
}

if let runRef = runRef {
activeTasks[runRef] = task
activeTasks[runRef, setDefault: .init()][module.identifier] = task
}

return try await task.value
Expand All @@ -173,10 +169,16 @@ class WebViewEnvironment: NSObject, JSEnvironment, WKNavigationDelegate {

func remove(at runRef: String) {
webViews.removeValue(forKey: runRef)
Task { @MainActor in
activeTasks.removeValue(forKey: runRef)
}
}

func removeAll() {
webViews.removeAll()
Task { @MainActor in
activeTasks.removeAll()
}
}

@MainActor
Expand All @@ -198,3 +200,10 @@ class WebViewEnvironment: NSObject, JSEnvironment, WKNavigationDelegate {

private typealias WKWebViewExtended = (WKWebView, WKUserContentController, JSAsyncResult)
}


// MARK: Extensions

private extension Dictionary where Value == String {

}
4 changes: 2 additions & 2 deletions ios/App/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ PODS:
- CapacitorClipboard (5.0.6):
- Capacitor
- CapacitorCordova (5.2.2)
- CapacitorFilesystem (5.1.1):
- CapacitorFilesystem (5.1.2):
- Capacitor
- CapacitorSplashScreen (5.0.6):
- Capacitor
Expand Down Expand Up @@ -65,7 +65,7 @@ SPEC CHECKSUMS:
CapacitorAppLauncher: 5a9f06c13c6b4f5d65b550a07128ef04f3a216b3
CapacitorClipboard: 77edf49827ea21da2a9c05c690a4a6a4d07199c4
CapacitorCordova: 3773395d5331add072300ff6041ca2cf7b93cb0b
CapacitorFilesystem: 38e85e56818420bed3f0aa1b77128f503a960821
CapacitorFilesystem: 5efb77d5dc1c8c05bce5e19f0e7bfdf72363fb43
CapacitorSplashScreen: 5fa2ab5e46cf5cc530cf16a51c80c7a986579ccd
CapacitorStatusBar: 565c0a1ebd79bb40d797606a8992b4a105885309
CapawesomeCapacitorFilePicker: 3c6c193300649c9c7ce49426e17582edbf7ed601
Expand Down
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@
},
"dependencies": {
"@airgap/aeternity": "0.13.20",
"@airgap/angular-core": "0.0.41",
"@airgap/angular-ngrx": "0.0.41",
"@airgap/angular-core": "0.0.42",
"@airgap/angular-ngrx": "0.0.42",
"@airgap/astar": "0.13.20",
"@airgap/bitcoin": "0.13.20",
"@airgap/coinlib-core": "0.13.20",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
export enum IsolatedModulesDetailsMode {
INSTALL,
UPDATE,
VIEW_INSTALLED
VIEW_INSTALLED,
VIEW_ASSET
}
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,8 @@ export class IsolatedModulesListPage implements OnInit, ViewWillEnter, ViewWillL
}

public async onModuleSelected(metadata: IsolatedModuleMetadata): Promise<void> {
this.navigationService.routeWithState(`/isolated-modules-details/${IsolatedModulesDetailsMode.VIEW_INSTALLED}`, { metadata, mode: IsolatedModulesDetailsMode.VIEW_INSTALLED }).catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION))
const mode = metadata.type === 'asset' ? IsolatedModulesDetailsMode.VIEW_ASSET : IsolatedModulesDetailsMode.VIEW_INSTALLED
this.navigationService.routeWithState(`/isolated-modules-details/${mode}`, { metadata, mode }).catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION))
}

private async goToOnboardingPage(): Promise<void> {
Expand Down
4 changes: 2 additions & 2 deletions src/app/pages/tab-settings/tab-settings.page.html
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,10 @@
{{ 'tab-settings.advanced-mode-type_label' | translate }}
</ion-item>

<!-- <ion-item lines="True" (click)="goToIsolatedModules()" detail="true">
<ion-item lines="True" (click)="goToIsolatedModules()" detail="true">
<ion-icon name="cube-outline" slot="start"></ion-icon>
{{ 'danger-zone.isolated-modules_label' | translate }}
</ion-item> -->
</ion-item>

<ion-list-header>
<ion-label>{{ 'tab-settings.actions_label' | translate }}</ion-label>
Expand Down
7 changes: 7 additions & 0 deletions src/global.scss
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,13 @@ ion-label {
image-rendering: pixelated;
}

airgap-currency-symbol {
img {
aspect-ratio: 1/1;
border-radius: 50%;
}
}

swiper-container {
--swiper-pagination-bullet-inactive-color: var(--ion-color-step-200, #cccccc);
--swiper-pagination-color: var(--ion-color-primary, #3880ff);
Expand Down
16 changes: 8 additions & 8 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,17 @@
"@airgap/serializer" "^0.13.20"
"@stablelib/ed25519" "^1.0.3"

"@airgap/angular-core@0.0.41":
version "0.0.41"
resolved "https://registry.yarnpkg.com/@airgap/angular-core/-/angular-core-0.0.41.tgz#6d626b6dd2eb60c2625e1b59ac5076a213be14a1"
integrity sha512-Tp9f+Hegws40wW2eoMHau7i/YSFkXTZMn3+w0P1EuNIO839fRYoLEFR30W1ctRWMpJJZkwjHZPjWRGCGPJxCEg==
"@airgap/angular-core@0.0.42":
version "0.0.42"
resolved "https://registry.yarnpkg.com/@airgap/angular-core/-/angular-core-0.0.42.tgz#7c5a99eeb6198da44e0ea315f181806d3f94e6a3"
integrity sha512-JKaVotRywvtEGENR/oVcEfWTQnGrrn163Kgz6CAeibOJw6/RNdkBD6suxlxCvz7ne+dMPd9su2kI5OhFKVq3Wg==
dependencies:
tslib "^2.3.0"

"@airgap/angular-ngrx@0.0.41":
version "0.0.41"
resolved "https://registry.yarnpkg.com/@airgap/angular-ngrx/-/angular-ngrx-0.0.41.tgz#76a65f19a2858ebecda071376ce8b01aeb69657b"
integrity sha512-QmVe0+uWf/HH1V/rBxUXov9tk1FhpIuC5aH736HngKTyLeH4mdpJqkYAVugBDe6trcVz7hWF04kpnzSE1xtZ0w==
"@airgap/angular-ngrx@0.0.42":
version "0.0.42"
resolved "https://registry.yarnpkg.com/@airgap/angular-ngrx/-/angular-ngrx-0.0.42.tgz#b85aff5f9f6a6c61000339b38030d012b122f2da"
integrity sha512-89KsCtmWdzgwARouRN9mPiJShbPXLg5f6HPOzoeMXCzP+e5k3B0RurspPYpjgz4S52O/k7I1YaAyMMqRNq0NIQ==
dependencies:
tslib "^2.3.0"

Expand Down

0 comments on commit 0c4b1bc

Please sign in to comment.