Skip to content

Commit

Permalink
consent filtering by array
Browse files Browse the repository at this point in the history
  • Loading branch information
cameronvoell committed Jan 17, 2025
1 parent e6d23df commit 5bb7b98
Show file tree
Hide file tree
Showing 6 changed files with 40 additions and 33 deletions.
18 changes: 9 additions & 9 deletions android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -98,19 +98,19 @@ repositories {
dependencies {
implementation project(':expo-modules-core')
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${getKotlinVersion()}"
implementation "org.xmtp:android:3.0.21"
implementation "org.xmtp:android:3.0.22"
implementation 'com.google.code.gson:gson:2.10.1'
implementation 'com.facebook.react:react-native:0.71.3'
implementation "com.daveanthonythomas.moshipack:moshipack:1.0.1"
// xmtp-android local testing setup below (comment org.xmtp:android above)
// implementation files('<PATH_TO_LIBRARY>/xmtp-android/library/build/outputs/aar/library-debug.aar')
// implementation 'com.google.crypto.tink:tink-android:1.8.0'
// implementation 'io.grpc:grpc-kotlin-stub:1.4.1'
// implementation 'io.grpc:grpc-okhttp:1.62.2'
// implementation 'io.grpc:grpc-protobuf-lite:1.62.2'
// implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0'
// implementation 'org.web3j:crypto:4.9.4'
// implementation "net.java.dev.jna:jna:5.14.0@aar"
// api 'com.google.protobuf:protobuf-kotlin-lite:3.22.3'
// api 'org.xmtp:proto-kotlin:3.71.0'
// implementation 'io.grpc:grpc-kotlin-stub:1.4.1'
// implementation 'io.grpc:grpc-okhttp:1.62.2'
// implementation 'io.grpc:grpc-protobuf-lite:1.62.2'
// implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0'
// implementation 'org.web3j:crypto:4.9.4'
// implementation "net.java.dev.jna:jna:5.14.0@aar"
// api 'com.google.protobuf:protobuf-kotlin-lite:3.22.3'
// api 'org.xmtp:proto-kotlin:3.72.4'
}
39 changes: 22 additions & 17 deletions android/src/main/java/expo/modules/xmtpreactnativesdk/XMTPModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -176,11 +176,6 @@ class XMTPModule : Module() {
a.apply { set(i, v.toByte()) }
}
val historySyncUrl = authOptions.historySyncUrl
?: when (authOptions.environment) {
"production" -> "https://message-history.production.ephemera.network/"
"local" -> "http://10.0.2.2:5558"
else -> "https://message-history.dev.ephemera.network/"
}
return ClientOptions(
api = apiEnvironments(authOptions.environment, authOptions.appVersion),
preAuthenticateToInboxCallback = preAuthenticateToInboxCallback,
Expand Down Expand Up @@ -552,47 +547,47 @@ class XMTPModule : Module() {
).toJson()
}

AsyncFunction("listGroups") Coroutine { installationId: String, groupParams: String?, limit: Int?, consentState: String? ->
AsyncFunction("listGroups") Coroutine { installationId: String, groupParams: String?, limit: Int?, consentStates: List<String>? ->
withContext(Dispatchers.IO) {
logV("listGroups")
val client = clients[installationId] ?: throw XMTPException("No client")
val params = ConversationParamsWrapper.conversationParamsFromJson(groupParams ?: "")
val consent = consentState?.let { getConsentState(it) }
val consentList = consentStates?.let { getConsentStates(it) }
val groups = client.conversations.listGroups(
limit = limit,
consentState = consent
consentStates = consentList
)
groups.map { group ->
GroupWrapper.encode(client, group, params)
}
}
}

AsyncFunction("listDms") Coroutine { installationId: String, groupParams: String?, limit: Int?, consentState: String? ->
AsyncFunction("listDms") Coroutine { installationId: String, groupParams: String?, limit: Int?, consentStates: List<String>? ->
withContext(Dispatchers.IO) {
logV("listDms")
val client = clients[installationId] ?: throw XMTPException("No client")
val params = ConversationParamsWrapper.conversationParamsFromJson(groupParams ?: "")
val consent = consentState?.let { getConsentState(it) }
val consentList = consentStates?.let { getConsentStates(it) }
val dms = client.conversations.listDms(
limit = limit,
consentState = consent
consentStates = consentList
)
dms.map { dm ->
DmWrapper.encode(client, dm, params)
}
}
}

AsyncFunction("listConversations") Coroutine { installationId: String, conversationParams: String?, limit: Int?, consentState: String? ->
AsyncFunction("listConversations") Coroutine { installationId: String, conversationParams: String?, limit: Int?, consentStates: List<String>? ->
withContext(Dispatchers.IO) {
logV("listConversations")
val client = clients[installationId] ?: throw XMTPException("No client")
val params =
ConversationParamsWrapper.conversationParamsFromJson(conversationParams ?: "")
val consent = consentState?.let { getConsentState(it) }
val consentList = consentStates?.let { getConsentStates(it) }
val conversations =
client.conversations.list(limit = limit, consentState = consent)
client.conversations.list(limit = limit, consentStates = consentList)
conversations.map { conversation ->
ConversationWrapper.encode(client, conversation, params)
}
Expand Down Expand Up @@ -860,13 +855,13 @@ class XMTPModule : Module() {
}
}

AsyncFunction("syncAllConversations") Coroutine { installationId: String, consentState: String? ->
AsyncFunction("syncAllConversations") Coroutine { installationId: String, consentStates: List<String>? ->
withContext(Dispatchers.IO) {
logV("syncAllConversations")
val client = clients[installationId] ?: throw XMTPException("No client")
val consent = consentState?.let { getConsentState(it) }
val consentList = consentStates?.let { getConsentStates(it) }
val numGroupsSyncedInt: Int =
client.conversations.syncAllConversations(consent).toInt()
client.conversations.syncAllConversations(consentList).toInt()
numGroupsSyncedInt
}
}
Expand Down Expand Up @@ -1443,6 +1438,16 @@ class XMTPModule : Module() {
}
}

private fun getConsentStates(stateStrings: List<String>): List<ConsentState> {
return stateStrings.map { stateString ->
when (stateString) {
"allowed" -> ConsentState.ALLOWED
"denied" -> ConsentState.DENIED
else -> ConsentState.UNKNOWN
}
}
}

private fun getEntryType(entryString: String): EntryType {
return when (entryString) {
"address" -> EntryType.ADDRESS
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ class PermissionPolicySetWrapper {
"updateGroupDescriptionPolicy" to fromPermissionOption(policySet.updateGroupDescriptionPolicy),
"updateGroupImagePolicy" to fromPermissionOption(policySet.updateGroupImagePolicy),
"updateGroupPinnedFrameUrlPolicy" to fromPermissionOption(policySet.updateGroupPinnedFrameUrlPolicy),
"updateMessageExpirationPolicy" to fromPermissionOption(policySet.updateMessageExpirationPolicy),
)
}

Expand All @@ -50,7 +51,8 @@ class PermissionPolicySetWrapper {
updateGroupNamePolicy = createPermissionOptionFromString(jsonObj.get("updateGroupNamePolicy").asString),
updateGroupDescriptionPolicy = createPermissionOptionFromString(jsonObj.get("updateGroupDescriptionPolicy").asString),
updateGroupImagePolicy = createPermissionOptionFromString(jsonObj.get("updateGroupImagePolicy").asString),
updateGroupPinnedFrameUrlPolicy = createPermissionOptionFromString(jsonObj.get("updateGroupPinnedFrameUrlPolicy").asString)
updateGroupPinnedFrameUrlPolicy = createPermissionOptionFromString(jsonObj.get("updateGroupPinnedFrameUrlPolicy").asString),
updateMessageExpirationPolicy = createPermissionOptionFromString(jsonObj.get("updateMessageExpirationPolicy").asString),
)
}

Expand Down
4 changes: 2 additions & 2 deletions example/src/tests/groupTests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -974,12 +974,12 @@ test('can filter groups by consent', async () => {
const boConvosFilteredAllowed = await boClient.conversations.listGroups(
{},
undefined,
'allowed'
['allowed']
)
const boConvosFilteredUnknown = await boClient.conversations.listGroups(
{},
undefined,
'unknown'
['unknown']
)

assert(
Expand Down
4 changes: 2 additions & 2 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -352,14 +352,14 @@ export async function listGroups<
clientInstallationId: InstallationId,
opts?: ConversationOptions | undefined,
limit?: number | undefined,
consentState?: ConsentState | undefined
consentStates?: ConsentState[] | undefined
): Promise<Group<ContentTypes>[]> {
return (
await XMTPModule.listGroups(
clientInstallationId,
JSON.stringify(opts),
limit,
consentState
consentStates
)
).map((json: string) => {
const group = JSON.parse(json)
Expand Down
4 changes: 2 additions & 2 deletions src/lib/Conversations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -219,13 +219,13 @@ export default class Conversations<
async listGroups(
opts?: ConversationOptions | undefined,
limit?: number | undefined,
consentState?: ConsentState | undefined
consentStates?: ConsentState[] | undefined
): Promise<Group<ContentTypes>[]> {
return await XMTPModule.listGroups(
this.client.installationId,
opts,
limit,
consentState
consentStates
)
}

Expand Down

0 comments on commit 5bb7b98

Please sign in to comment.