Generate Builds

This commit is contained in:
KoalaSat 2024-04-27 23:33:52 +02:00
parent 9ab8381eaf
commit 28cc3d6715
No known key found for this signature in database
GPG Key ID: 2F7F61C6146AB157
13 changed files with 120 additions and 6 deletions

3
.gitignore vendored
View File

@ -1,9 +1,6 @@
*.py[cod]
__pycache__
# C extensions
*.so
# Packages
*.egg
*.egg-info

View File

@ -1,14 +1,17 @@
import { sha256 } from 'js-sha256';
import { Robot, type Order } from '.';
// import { robohash } from '../components/RobotAvatar/RobohashGenerator';
// import { generate_roboname } from 'robo-identities-wasm';
import { roboidentitiesClient } from '../services/Roboidentities';
class Slot {
constructor(token: string, shortAliases: string[], robotAttributes: Record<any, any>) {
this.token = token;
this.hashId = sha256(sha256(this.token));
this.nickname = 'No Nick Display (WIP)';
this.nickname = '';
roboidentitiesClient.generateRoboname(this.hashId).then((nickname) => {
this.nickname = nickname;
});
// trigger RoboHash avatar generation in webworker and store in RoboHash class cache.
// void robohash.generate(this.hashId, 'small');
// void robohash.generate(this.hashId, 'large');

View File

@ -30,7 +30,19 @@ export interface NativeWebViewMessageSystem {
detail?: string;
}
export declare type NativeWebViewMessage = NativeWebViewMessageHttp | NativeWebViewMessageSystem;
export interface NativeWebViewMessageRoboidentities {
id?: number;
category: 'roboidentities';
type: 'roboname' | 'robohash';
string?: string;
size?: string;
}
export declare type NativeWebViewMessage =
| NativeWebViewMessageHttp
| NativeWebViewMessageSystem
| NativeWebViewMessageRoboidentities
| NA;
export interface NativeRobosatsPromise {
resolve: (value: object | PromiseLike<object>) => void;

View File

@ -0,0 +1,21 @@
import { type RoboidentitiesClient } from '..';
import NativeRobosats from '../../Native';
class RoboidentitiesNativeClient implements RoboidentitiesClient {
constructor() {
window.NativeRobosats = new NativeRobosats();
}
public loading = true;
public generateRoboname: (initialString: string) => Promise<string> = async (initialString) => {
const response = await window.NativeRobosats?.postMessage({
category: 'roboIdentities',
type: 'roboname',
detail: initialString,
});
return response ? Object.values(response)[0] : '';
};
}
export default RoboidentitiesNativeClient;

View File

@ -0,0 +1,12 @@
import { type RoboidentitiesClient } from '..';
// import { generate_roboname } from 'robo-identities-wasm';
class RoboidentitiesClientWebClient implements RoboidentitiesClient {
public generateRoboname: (initialString: string) => Promise<string> = async (initialString) => {
return new Promise<string>(async (resolve, _reject) => {
// resolve(generate_roboname(initialString))
});
};
}
export default RoboidentitiesClientWebClient;

View File

@ -0,0 +1,13 @@
import RoboidentitiesClientNativeClient from './RoboidentitiesNativeClient';
import RoboidentitiesClientWebClient from './RoboidentitiesWebClient';
export interface RoboidentitiesClient {
generateRoboname: (initialString: string) => Promise<string>;
}
export const roboidentitiesClient: RoboidentitiesClient =
// If userAgent has "RoboSats", we assume the app is running inside of the
// react-native-web view of the RoboSats Android app.
window.navigator.userAgent.includes('robosats')
? new RoboidentitiesClientNativeClient()
: new RoboidentitiesClientWebClient();

View File

@ -6,6 +6,7 @@ import Clipboard from '@react-native-clipboard/clipboard';
import EncryptedStorage from 'react-native-encrypted-storage';
import { name as app_name, version as app_version } from './package.json';
import TorModule from './native/TorModule';
import RoboIdentitiesModule from './native/RoboIdentitiesModule';
const backgroundColors = {
light: 'white',
@ -129,6 +130,11 @@ const App = () => {
} else if (data.type === 'deleteCookie') {
EncryptedStorage.removeItem(data.key);
}
} else if (data.category === 'roboidentities') {
if (data.type === 'roboname') {
const roboname = RoboIdentitiesModule.generateRoboname(data.detail);
injectMessageResolve(data.id, roboname);
}
}
};

View File

@ -0,0 +1,14 @@
package com.robosats;
public class RoboIdentities {
static {
System.loadLibrary("robonames");
}
public String generateRoboname(String initial_string) {
return nativeGenerateRoboname(initial_string);
}
// Native functions implemented in Rust.
private static native String nativeGenerateRoboname(String initial_string);
}

View File

@ -4,6 +4,7 @@ import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
import com.robosats.modules.RoboIdentitiesModule;
import com.robosats.modules.TorModule;
import java.util.ArrayList;
@ -22,6 +23,7 @@ public class RobosatsPackage implements ReactPackage {
List<NativeModule> modules = new ArrayList<>();
modules.add(new TorModule(reactContext));
modules.add(new RoboIdentitiesModule(reactContext));
return modules;
}

View File

@ -0,0 +1,26 @@
package com.robosats.modules;
import android.util.Log;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.robosats.RoboIdentities;
public class RoboIdentitiesModule extends ReactContextBaseJavaModule {
private ReactApplicationContext context;
public RoboIdentitiesModule(ReactApplicationContext reactContext) {
context = reactContext;
}
@Override
public String getName() {
return "RoboIdentitiesModule";
}
@ReactMethod
public String generateRoboname(String initial_string) {
return new RoboIdentities().generateRoboname(initial_string);
}
}

View File

@ -0,0 +1,8 @@
import { NativeModules } from 'react-native';
const { RoboIdentitiesModule } = NativeModules;
interface RoboIdentitiesModuleInterface {
generateRoboname: (initialString: String) => String;
}
export default RoboIdentitiesModule as RoboIdentitiesModuleInterface;