Skip to content

Commit

Permalink
fix: Wait for messages to be validated
Browse files Browse the repository at this point in the history
  • Loading branch information
simonas-notcat committed Nov 22, 2019
1 parent 7ddac1f commit 717b285
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 34 deletions.
15 changes: 6 additions & 9 deletions packages/daf-core/src/service-manager.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { DIDDocument } from 'did-resolver'
import { Resolver } from './core'
import { Issuer } from './identity-manager'
import { RawMessage } from './types'
import { RawMessage, ValidatedMessage } from './types'

export interface ServiceControllerOptions {
config: any
issuer: Issuer
didDoc: DIDDocument
onRawMessage: (rawMessage: RawMessage) => void
onRawMessage: (rawMessage: RawMessage) => Promise<ValidatedMessage | null>
}

export interface ServiceInstanceId {
Expand All @@ -34,12 +34,12 @@ export type ServiceControllerWithConfig = {
interface Options {
didResolver: Resolver
serviceControllersWithConfig: ServiceControllerWithConfig[]
onRawMessage: (rawMessage: RawMessage) => void
onRawMessage: (rawMessage: RawMessage) => Promise<ValidatedMessage | null>
}

export class ServiceManager {
private serviceControllersWithConfig: ServiceControllerWithConfig[]
private onRawMessage: (rawMessage: RawMessage) => void
private onRawMessage: (rawMessage: RawMessage) => Promise<ValidatedMessage | null>
private serviceControllers: ServiceController[]
private didResolver: Resolver

Expand All @@ -54,8 +54,7 @@ export class ServiceManager {
for (const issuer of issuers) {
const didDoc = await this.didResolver.resolve(issuer.did)
if (didDoc !== null) {
for (const { controller, config } of this
.serviceControllersWithConfig) {
for (const { controller, config } of this.serviceControllersWithConfig) {
this.serviceControllers.push(
new controller({
config,
Expand All @@ -79,9 +78,7 @@ export class ServiceManager {
for (const serviceController of this.serviceControllers) {
const instanceId = serviceController.instanceId()
const lastMessage = lastMessageTimestamps.find(
item =>
item.did === instanceId.did &&
item.sourceType === instanceId.sourceType,
item => item.did === instanceId.did && item.sourceType === instanceId.sourceType,
)
let since = lastMessage ? lastMessage.timestamp : 0
await serviceController.sync(since)
Expand Down
33 changes: 8 additions & 25 deletions packages/daf-trust-graph/src/service-controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,7 @@ import { getMainDefinition } from 'apollo-utilities'
import { split } from 'apollo-link'
import { createJWT } from 'did-jwt'

import {
ServiceController,
ServiceControllerOptions,
ServiceInstanceId,
} from 'daf-core'
import { ServiceController, ServiceControllerOptions, ServiceInstanceId } from 'daf-core'
import * as queries from './queries'

import { defaultTrustGraphUri, defaultTrustGraphWsUri } from './config'
Expand All @@ -39,21 +35,11 @@ export class TrustGraphServiceController implements ServiceController {
this.options = options
const { didDoc } = options

const service =
didDoc &&
didDoc.service &&
didDoc.service.find(item => item.type === 'TrustGraph')
const serviceWs =
didDoc &&
didDoc.service &&
didDoc.service.find(item => item.type === 'TrustGraphWs')

const serviceEndpoint = service
? service.serviceEndpoint
: defaultTrustGraphUri
const serviceEndpointWs = serviceWs
? serviceWs.serviceEndpoint
: defaultTrustGraphWsUri
const service = didDoc && didDoc.service && didDoc.service.find(item => item.type === 'TrustGraph')
const serviceWs = didDoc && didDoc.service && didDoc.service.find(item => item.type === 'TrustGraphWs')

const serviceEndpoint = service ? service.serviceEndpoint : defaultTrustGraphUri
const serviceEndpointWs = serviceWs ? serviceWs.serviceEndpoint : defaultTrustGraphWsUri

const uri = options.config.uri || serviceEndpoint
const wsUri = options.config.wsUri || serviceEndpointWs
Expand Down Expand Up @@ -103,10 +89,7 @@ export class TrustGraphServiceController implements ServiceController {
// split based on operation type
({ query }) => {
const definition = getMainDefinition(query)
return (
definition.kind === 'OperationDefinition' &&
definition.operation === 'subscription'
)
return definition.kind === 'OperationDefinition' && definition.operation === 'subscription'
},
wsLink,
httpLink,
Expand All @@ -133,7 +116,7 @@ export class TrustGraphServiceController implements ServiceController {
})

for (const edge of data.findEdges) {
this.options.onRawMessage({
await this.options.onRawMessage({
raw: edge.jwt,
meta: [
{
Expand Down

0 comments on commit 717b285

Please sign in to comment.