diff --git a/android/src/main/java/io/textile/rnmobile/TextileNode.java b/android/src/main/java/io/textile/rnmobile/TextileNode.java index 5c1f37a..4bde802 100644 --- a/android/src/main/java/io/textile/rnmobile/TextileNode.java +++ b/android/src/main/java/io/textile/rnmobile/TextileNode.java @@ -105,22 +105,22 @@ public void run() { } @ReactMethod - public void accountPeers(final Promise promise) { + public void accountContact(final Promise promise) { executor.execute(new Runnable() { @Override public void run() { try { - promise.resolve(encode(node.accountPeers())); + promise.resolve(encode(node.accountContact())); } catch (Exception e) { - promise.reject("accountPeers", e); + promise.reject("accountContact", e); } } }); } @ReactMethod - public void findThreadBackups(final String queryStr, final String optionsStr, final Promise promise) { + public void syncAccount(final String optionsStr, final Promise promise) { executor.execute(new Runnable() { @Override public void run() { @@ -128,10 +128,10 @@ public void run() { if (TextileNode.searchHandle != null) { TextileNode.searchHandle.cancel(); } - TextileNode.searchHandle = node.findThreadBackups(decode(queryStr), decode(optionsStr)); + TextileNode.searchHandle = node.syncAccount(decode(optionsStr)); } catch (Exception e) { - promise.reject("findThreadBackups", e); + promise.reject("syncAccount", e); } } }); @@ -563,12 +563,13 @@ public void run() { // Invites ----------------> @ReactMethod - public void addInvite(final String threadId, final String inviteeId, final Promise promise) { + public void addInvite(final String threadId, final String address, final Promise promise) { executor.execute(new Runnable() { @Override public void run() { try { - promise.resolve(node.addInvite(threadId, inviteeId)); + node.addInvite(threadId, address); + promise.resolve(null); } catch (Exception e) { promise.reject("addInvite", e); @@ -825,31 +826,31 @@ public void run() { } @ReactMethod - public void username(final Promise promise) { + public void name(final Promise promise) { executor.execute(new Runnable() { @Override public void run() { try { - promise.resolve(node.username()); + promise.resolve(node.name()); } catch (Exception e) { - promise.reject("username", e); + promise.reject("name", e); } } }); } @ReactMethod - public void setUsername(final String username, final Promise promise) { + public void setName(final String name, final Promise promise) { executor.execute(new Runnable() { @Override public void run() { try { - node.setUsername(username); + node.setName(name); promise.resolve(null); } catch (Exception e) { - promise.reject("setUsername", e); + promise.reject("setName", e); } } }); @@ -939,7 +940,7 @@ public void run() { } @ReactMethod - public void rename(final String threadId, final String name, final Promise promise) { + public void renameThread(final String threadId, final String name, final Promise promise) { executor.execute(new Runnable() { @Override public void run() { @@ -985,7 +986,7 @@ public void run() { } @ReactMethod - public void peers(final String threadId, final Promise promise) { + public void threadPeers(final String threadId, final Promise promise) { executor.execute(new Runnable() { @Override public void run() { @@ -1014,6 +1015,40 @@ public void run() { }); } + @ReactMethod + public void snapshotThreads(final Promise promise) { + executor.execute(new Runnable() { + @Override + public void run() { + try { + node.snapshotThreads(); + promise.resolve(null); + } + catch (Exception e) { + promise.reject("snapshotThreads", e); + } + } + }); + } + + @ReactMethod + public void searchThreadSnapshots(final String queryStr, final String optionsStr, final Promise promise) { + executor.execute(new Runnable() { + @Override + public void run() { + try { + if (TextileNode.searchHandle != null) { + TextileNode.searchHandle.cancel(); + } + TextileNode.searchHandle = node.searchThreadSnapshots(decode(queryStr), decode(optionsStr)); + } + catch (Exception e) { + promise.reject("searchThreadSnapshots", e); + } + } + }); + } + // Mobile ----------------> diff --git a/ios/RNTextile.xcworkspace/contents.xcworkspacedata b/ios/RNTextile.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 41d888e..0000000 --- a/ios/RNTextile.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,9 +0,0 @@ -// !$*UTF8*$! - - - - - - \ No newline at end of file diff --git a/ios/TextileNode.m b/ios/TextileNode.m index be3b23b..6fe3b4e 100644 --- a/ios/TextileNode.m +++ b/ios/TextileNode.m @@ -110,22 +110,21 @@ - (void)fulfillWithResult:(id)result error:(NSError*)error resolver:(RCTPromiseR [self fulfillWithResult:[result base64EncodedStringWithOptions:0] nilDefault:@"" error:error resolver:resolve rejecter:reject]; } -RCT_EXPORT_METHOD(accountPeers:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { +RCT_EXPORT_METHOD(accountContact:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { NSError *error; - NSData *result = [self.node accountPeers:&error]; + NSData *result = [self.node accountContact:&error]; [self fulfillWithResult:[result base64EncodedStringWithOptions:0] nilDefault:@"" error:error resolver:resolve rejecter:reject]; } -RCT_EXPORT_METHOD(findThreadBackups:(NSString*)queryStr options:(NSString*)optionsStr resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { +RCT_EXPORT_METHOD(syncAccount:(NSString*)optionsStr resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { if (self.searchHandle) { [self.searchHandle cancel]; self.searchHandle = nil; } - NSData *query = [[NSData alloc] initWithBase64EncodedString:queryStr options:0]; NSData *options = [[NSData alloc] initWithBase64EncodedString:optionsStr options:0]; NSError *error; - self.searchHandle = [self.node findThreadBackups:query options:options error:&error]; + self.searchHandle = [self.node syncAccount:options error:&error]; [self fulfillWithResult:nil error:error resolver:resolve rejecter:reject]; } @@ -237,8 +236,6 @@ - (void)fulfillWithResult:(id)result error:(NSError*)error resolver:(RCTPromiseR RCT_EXPORT_METHOD(prepareFiles:(NSString*)strBase64 threadId:(NSString*)threadId resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { - // NSData *fileData = [[NSData alloc] initWithBase64EncodedString:dataStr options:0]; - [self.node prepareFiles:strBase64 threadId:threadId cb:[[TEXCallback alloc] initWithCompletion:^ (NSData *data, NSError *error) { if (error) { reject(@(error.code).stringValue, error.localizedDescription, error); @@ -319,10 +316,10 @@ - (void)fulfillWithResult:(id)result error:(NSError*)error resolver:(RCTPromiseR #pragma mark - Invites ----------------> -RCT_EXPORT_METHOD(addInvite:(NSString*)threadId inviteeId:(NSString*)inviteeId resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { +RCT_EXPORT_METHOD(addInvite:(NSString*)threadId inviteeId:(NSString*)address resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { NSError *error; - NSString *result = [self.node addInvite:threadId inviteeId:inviteeId error:&error]; - [self fulfillWithResult:result error:error resolver:resolve rejecter:reject]; + [self.node addInvite:threadId address:address error:&error]; + [self fulfillWithResult:nil error:error resolver:resolve rejecter:reject]; } RCT_EXPORT_METHOD(addExternalInvite:(NSString*)threadId resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { @@ -429,14 +426,14 @@ - (void)fulfillWithResult:(id)result error:(NSError*)error resolver:(RCTPromiseR [self fulfillWithResult:[result base64EncodedStringWithOptions:0] nilDefault:@"" error:error resolver:resolve rejecter:reject]; } -RCT_EXPORT_METHOD(username:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { +RCT_EXPORT_METHOD(name:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { NSError *error; - [self fulfillWithResult:[self.node username:&error] error:error resolver:resolve rejecter:reject]; + [self fulfillWithResult:[self.node name:&error] error:error resolver:resolve rejecter:reject]; } -RCT_EXPORT_METHOD(setUsername:(NSString*)username resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { +RCT_EXPORT_METHOD(setName:(NSString*)name resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { NSError *error; - [self.node setUsername:username error:&error]; + [self.node setName:name error:&error]; [self fulfillWithResult:nil error:error resolver:resolve rejecter:reject]; } @@ -477,7 +474,7 @@ - (void)fulfillWithResult:(id)result error:(NSError*)error resolver:(RCTPromiseR [self fulfillWithResult:nil error:error resolver:resolve rejecter:reject]; } -RCT_EXPORT_METHOD(rename:(NSString*)threadId name:(NSString*)name resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { +RCT_EXPORT_METHOD(renameThread:(NSString*)threadId name:(NSString*)name resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { NSError *error; [self.node renameThread:threadId name:name error:&error]; [self fulfillWithResult:nil error:error resolver:resolve rejecter:reject]; @@ -495,7 +492,7 @@ - (void)fulfillWithResult:(id)result error:(NSError*)error resolver:(RCTPromiseR [self fulfillWithResult:[result base64EncodedStringWithOptions:0] nilDefault:@"" error:error resolver:resolve rejecter:reject]; } -RCT_EXPORT_METHOD(peers:(NSString*)threadId resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { +RCT_EXPORT_METHOD(threadPeers:(NSString*)threadId resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { NSError *error; NSData *result = [self.node threadPeers:threadId error:&error]; [self fulfillWithResult:[result base64EncodedStringWithOptions:0] nilDefault:@"" error:error resolver:resolve rejecter:reject]; @@ -506,6 +503,25 @@ - (void)fulfillWithResult:(id)result error:(NSError*)error resolver:(RCTPromiseR [self fulfillWithResult:[self.node removeThread:id_ error:&error] error:error resolver:resolve rejecter:reject]; } +RCT_EXPORT_METHOD(snapshotThreads:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { + NSError *error; + [self.node snapshotThreads:&error]; + [self fulfillWithResult:nil error:error resolver:resolve rejecter:reject]; +} + +RCT_EXPORT_METHOD(searchThreadSnapshots:(NSString*)queryStr options:(NSString*)optionsStr resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { + if (self.searchHandle) { + [self.searchHandle cancel]; + self.searchHandle = nil; + } + + NSData *query = [[NSData alloc] initWithBase64EncodedString:queryStr options:0]; + NSData *options = [[NSData alloc] initWithBase64EncodedString:optionsStr options:0]; + NSError *error; + self.searchHandle = [self.node searchThreadSnapshots:query options:options error:&error]; + [self fulfillWithResult:nil error:error resolver:resolve rejecter:reject]; +} + #pragma mark - Mobile ----------------> diff --git a/package.json b/package.json index e1d6a00..4cce37d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@textile/react-native-sdk", - "version": "1.1.0-rc47", + "version": "1.1.0", "description": "## Getting started", "nativePackage": true, "main": "dist/index.js", @@ -69,7 +69,7 @@ "typescript": "^3.1.1" }, "dependencies": { - "@textile/go-mobile": "0.1.10-rc4", + "@textile/go-mobile": "0.1.11", "buffer": "^5.2.1" }, "directories": { diff --git a/src/Textile/API/account.ts b/src/Textile/API/account.ts index f580954..000c2ef 100644 --- a/src/Textile/API/account.ts +++ b/src/Textile/API/account.ts @@ -29,7 +29,7 @@ export async function seed(): Promise { } /** - * Encrypt any file with the account address. + * Encrypt data with the account address. * * ```typescript * const encrypted = API.account.encrypt(Buffer.from(JSON.stringify({foo:"bar"}))); @@ -41,7 +41,7 @@ export async function encrypt(input: Buffer): Promise { } /** - * Decrypt a file previously encrypted with the account address. + * Decrypt data previously encrypted with the account address. * * ```typescript * const decrypted = API.account.decrypt(encrypted); @@ -53,27 +53,29 @@ export async function decrypt(input: Buffer): Promise { } /** - * List all Contacts. + * List all own contact. * * ```typescript - * const contacts: pb.IContactList = API.account.peers(); + * const contact: pb.IContact = API.account.contact(); * ``` */ -export async function peers(): Promise { - const result = await TextileNode.accountPeers() - return pb.ContactList.decode(Buffer.from(result, 'base64')) +export async function contact(): Promise { + const result = await TextileNode.accountContact() + if (!result) { + return undefined + } + return pb.Contact.decode(Buffer.from(result, 'base64')) } /** - * Locate all Thread backups. + * Search and apply account thread snapshots. * ```typescript - * const backups = API.account.findThreadBackups(query, options); + * API.account.sync(options); * ``` * @hidden */ -export async function findThreadBackups(query: pb.IThreadBackupQuery, options: pb.IQueryOptions): Promise { - return TextileNode.findThreadBackups( - Buffer.from(pb.ThreadBackupQuery.encode(query).finish()).toString('base64'), +export async function sync(options: pb.IQueryOptions): Promise { + return TextileNode.syncAccount( Buffer.from(pb.QueryOptions.encode(options).finish()).toString('base64'), ) } diff --git a/src/Textile/API/cafes.ts b/src/Textile/API/cafes.ts index 7a60898..8ead827 100644 --- a/src/Textile/API/cafes.ts +++ b/src/Textile/API/cafes.ts @@ -27,6 +27,7 @@ export async function session(peerId: string): Promise { } return pb.CafeSessionList.decode(Buffer.from(result, 'base64')) } + /** * Refresh an existing session by peerId. * ```typescript @@ -53,6 +55,7 @@ export async function refreshSession(peerId: string): Promise { return TextileNode.deregisterCafe(id) } + /** * Check for offline messages on remote Cafe. * ```typescript diff --git a/src/Textile/API/contacts.ts b/src/Textile/API/contacts.ts index b02eaa4..851a95b 100644 --- a/src/Textile/API/contacts.ts +++ b/src/Textile/API/contacts.ts @@ -3,6 +3,7 @@ import { Buffer } from 'buffer' import { pb } from '../Models' const { TextileNode } = NativeModules + /** * Add a new Contact after fetching the Contact information. */ @@ -10,6 +11,7 @@ export async function add(contact: pb.IContact): Promise { const payload = pb.Contact.encode(contact).finish() await TextileNode.addContact(Buffer.from(payload).toString('base64')) } + /** * Get Contact information by ID. */ @@ -20,6 +22,7 @@ export async function get(id_: string): Promise { } return pb.Contact.decode(Buffer.from(result, 'base64')) } + /** * List all known Contacts. */ @@ -27,12 +30,14 @@ export async function list(): Promise { const result = await TextileNode.contacts() return pb.ContactList.decode(Buffer.from(result, 'base64')) } + /** * Remove a Contact by their ID. */ export async function remove(id_: string): Promise { return TextileNode.removeContact(id_) } + /** * List all Threads in common with a Contact. * ```typescript @@ -43,6 +48,7 @@ export async function threads(id_: string): Promise { const result = await TextileNode.contactThreads(id_) return pb.ThreadList.decode(Buffer.from(result, 'base64')) } + /** * Search for Contacts over network. * ```typescript @@ -55,6 +61,7 @@ export async function search(query: pb.IContactQuery, options: pb.IQueryOptions) Buffer.from(pb.QueryOptions.encode(options).finish()).toString('base64'), ) } + /** * Cancel an ongoing contact search. * ```typescript diff --git a/src/Textile/API/feed.ts b/src/Textile/API/feed.ts index 000414f..94cd24c 100644 --- a/src/Textile/API/feed.ts +++ b/src/Textile/API/feed.ts @@ -3,6 +3,7 @@ import { Buffer } from 'buffer' import { pb } from '../Models' const { TextileNode } = NativeModules + /** * List all feed updates. * ```typescript diff --git a/src/Textile/API/files.ts b/src/Textile/API/files.ts index 2543205..2862b78 100644 --- a/src/Textile/API/files.ts +++ b/src/Textile/API/files.ts @@ -3,6 +3,7 @@ import { Buffer } from 'buffer' import { pb } from '../Models' const { TextileNode } = NativeModules + /** * Use a Thread's Mill to prepare a file data (as bse64 string) for adding to a Thread. * ```typescript @@ -13,6 +14,7 @@ export async function prepareFiles(data: string, threadId: string): Promise { return TextileNode.initRepo(seed, repoPath, logToDisk, debug) } + /** * Manually migrate the repo to a new path. * @hidden @@ -39,6 +40,7 @@ export async function init(seed: string, repoPath: string, logToDisk: boolean, d export async function migrate(repoPath: string): Promise { await TextileNode.migrateRepo(repoPath) } + /** * Create the repo node. Handled by Textile.nodeCreate. * ```typescript @@ -48,6 +50,7 @@ export async function migrate(repoPath: string): Promise { export async function create(repoPath: string, debug: boolean): Promise { await TextileNode.newTextile(repoPath, debug) } + /** * Start the Textile Node. Handled by Textile.nodeStart. * ```typescript @@ -57,6 +60,7 @@ export async function create(repoPath: string, debug: boolean): Promise { export async function start(): Promise { await TextileNode.start() } + /** * Stop the Textile Node. * ```typescript @@ -66,6 +70,7 @@ export async function start(): Promise { export async function stop(): Promise { await TextileNode.stop() } + /** * Get the Textile node version * ```typescript @@ -76,6 +81,7 @@ export async function version(): Promise { const result = await TextileNode.version() return result as string } + /** * Get the latest git summary * ```typescript @@ -86,6 +92,7 @@ export async function gitSummary(): Promise { const result = await TextileNode.gitSummary() return result as string } + /** * Get the summary of node data * ```typescript diff --git a/src/Textile/API/invites.ts b/src/Textile/API/invites.ts index 4b2061a..92f664f 100644 --- a/src/Textile/API/invites.ts +++ b/src/Textile/API/invites.ts @@ -3,26 +3,27 @@ import { Buffer } from 'buffer' import { pb } from '../Models' const { TextileNode } = NativeModules + /** - * Add a new Thread invite for an invitee. + * Add a new Thread invite by invitee address. * ```typescript - * API.invites.add(threadId, inviteeId); + * API.invites.add(threadId, address); * ``` */ -export async function add(threadId: string, inviteeId: string): Promise { - const result = await TextileNode.addInvite(threadId, inviteeId) +export async function add(threadId: string, address: string): Promise { + const result = await TextileNode.addInvite(threadId, address) return result as string } /** - * Add an external Thread invite, returning an HTTPS link. + * Add an external Thread invite, returning a sharable object. * ```typescript * API.invites.addExternal(threadId); * ``` */ -export async function addExternal(threadId: string): Promise { +export async function addExternal(threadId: string): Promise { const result = await TextileNode.addExternalInvite(threadId) - return pb.NewInvite.decode(Buffer.from(result, 'base64')) + return pb.ExternalInvite.decode(Buffer.from(result, 'base64')) } /** diff --git a/src/Textile/API/profile.ts b/src/Textile/API/profile.ts index 187841f..5f19ca8 100644 --- a/src/Textile/API/profile.ts +++ b/src/Textile/API/profile.ts @@ -16,24 +16,24 @@ export async function get(): Promise { } /** - * Get the username. + * Get the name. * ```typescript - * API.profile.username(); + * API.profile.name(); * ``` */ -export async function username(): Promise { - const result: string = await TextileNode.username() +export async function name(): Promise { + const result: string = await TextileNode.name() return result.length > 0 ? result : undefined } /** - * Update the username. + * Update the name. * ```typescript - * API.profile.setUsername(username); + * API.profile.setName(name); * ``` */ -export async function setUsername(username: string): Promise { - await TextileNode.setUsername(username) +export async function setName(name: string): Promise { + await TextileNode.setName(name) } /** diff --git a/src/Textile/API/threads.ts b/src/Textile/API/threads.ts index bd815e1..d8371cc 100644 --- a/src/Textile/API/threads.ts +++ b/src/Textile/API/threads.ts @@ -30,12 +30,13 @@ export async function addOrUpdate(thread: pb.IThread): Promise { /** * Rename a Thread by ThreadId. * ```typescript - * API.threads.renameThread(threadId, name); + * API.threads.rename(threadId, name); * ``` */ -export async function renameThread(threadId: string, name: string): Promise { +export async function rename(threadId: string, name: string): Promise { return TextileNode.renameThread(threadId, name) } + /** * Get Thread details by ThreadId. * ```typescript @@ -65,9 +66,10 @@ export async function list(): Promise { * ``` */ export async function peers(threadId: string): Promise { - const result = await TextileNode.peers(threadId) + const result = await TextileNode.threadPeers(threadId) return pb.ContactList.decode(Buffer.from(result, 'base64')) } + /** * Remove a Thread by ThreadId. * ```typescript @@ -78,3 +80,27 @@ export async function remove(id_: string): Promise { const result = await TextileNode.removeThread(id_) return result as string } + +/** + * Snapshot all threads for active cafe sessions. + * ```typescript + * API.threads.snapshot(); + * ``` + */ +export async function snapshot(): Promise { + return TextileNode.snapshotThreads() +} + +/** + * Locate all Thread snapshots. + * ```typescript + * const snapshots = API.threads.searchSnapshots(query, options); + * ``` + * @hidden + */ +export async function searchSnapshots(query: pb.IThreadSnapshotQuery, options: pb.IQueryOptions): Promise { + return TextileNode.searchThreadSnapshots( + Buffer.from(pb.ThreadSnapshotQuery.encode(query).finish()).toString('base64'), + Buffer.from(pb.QueryOptions.encode(options).finish()).toString('base64'), + ) +} diff --git a/textile-react-native-sdk.podspec b/textile-react-native-sdk.podspec index 66bab36..3690448 100644 --- a/textile-react-native-sdk.podspec +++ b/textile-react-native-sdk.podspec @@ -18,7 +18,7 @@ Pod::Spec.new do |s| s.dependency 'React' #s.dependency 'Fabric' #s.dependency 'Crashlytics' - s.dependency 'Textile', '0.1.0.pre.3' + s.dependency 'Textile', '0.1.0' #s.ios.xcconfig = { # 'FRAMEWORK_SEARCH_PATHS' => '"${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS"', # 'OTHER_LDFLAGS' => '-framework Crashlytics -framework Fabric' @@ -27,4 +27,4 @@ Pod::Spec.new do |s| s.preserve_paths = 'README.md', 'LICENSE', 'package.json' s.source_files = 'ios/**/*.{h,m}' s.exclude_files = 'android/**/*' -end \ No newline at end of file +end diff --git a/yarn.lock b/yarn.lock index 79cc963..4874c08 100644 --- a/yarn.lock +++ b/yarn.lock @@ -710,10 +710,10 @@ version "1.1.0" resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" -"@textile/go-mobile@0.1.10-rc4": - version "0.1.10-rc4" - resolved "https://registry.yarnpkg.com/@textile/go-mobile/-/go-mobile-0.1.10-rc4.tgz#ce1a6118a103a39f016bb1454b776f92f78e8164" - integrity sha512-3x1CuBZvfnkCA1iwEiMtI9+ftO07GD0KsGPIL8W+YU4JD13vexIbqaS9d7P+EXRiiO92ete6v10tQEwOiBSJEw== +"@textile/go-mobile@0.1.11": + version "0.1.11" + resolved "https://registry.yarnpkg.com/@textile/go-mobile/-/go-mobile-0.1.11.tgz#da3979c226f7b998d07e6b72a6835f6084d492ae" + integrity sha512-hTZ+KUfXQMjcM27P6MEYrm3Oc3fBlUPZwWJqWo1JbMRlvn4BS7sokv0MwCqcxC3CkW3/vqUBvrA/3itz6JKrgQ== dependencies: protobufjs "^6.8.8"