Coder Social home page Coder Social logo

Comments (1)

aurelticot avatar aurelticot commented on August 29, 2024

@tahpot for this bug, I haven't tested or pushed any commit but here's my suggestion:

Note: Promise.any is es2021 so you'll have to update the tsconfig

  public async getContextNameFromHash(contextHash: string, didDocument?: DIDDocument) {

    // ... 

    const endpoints: ServiceEndpoint[] = <ServiceEndpoint[]>service.serviceEndpoint

    if (endpoints.length === 0) {
      throw new Error(`Unable to access any endpoints associated with context hash ${contextHash}`)
    }

    try {
      return Promise.any(endpoints.map(async (endpoint) => {
        const endpointUri = endpoint.substring(0, endpoint.length-1)  // strip trailing slash

        const consentMessage = `Obtain context hash (${contextHash}) for server: "${endpointUri}"?\n\n${did}\n${timestamp}`
        const signature = await this.account!.sign(consentMessage)

        try {
            const response = await Axios.post(`${endpointUri}/user/contextHash`, {
            did,
            timestamp,
            signature,
            contextHash
          });

          if (response.data.status !== 'success') {
            throw new Error(`Endpoint ${endpointUri} failed to return context name associated with context hash ${contextHash}`)
          }

          return response.data.result.contextName as string // TODO: Ideally should validate before returning to ensure the expected value type
        } catch (error) {
          throw new Error(`Endpoint ${endpointUri} failed to return context name associated with context hash ${contextHash}`)
        }
      }))
    } catch (error) {
      throw new Error(`All endpoints failed to locate context name associated with context hash ${contextHash}`)
    }
  }

Located here:

const endpoints: ServiceEndpoint[] = <ServiceEndpoint[]> service.serviceEndpoint
for (let e in endpoints) {
let endpointUri = endpoints[e]
endpointUri = endpointUri.substring(0, endpointUri.length-1) // strip trailing slash
const consentMessage = `Obtain context hash (${contextHash}) for server: "${endpointUri}"?\n\n${did}\n${timestamp}`
const signature = await this.account!.sign(consentMessage)
try {
const response = await Axios.post(`${endpointUri}/user/contextHash`, {
did,
timestamp,
signature,
contextHash
});
if (response.data.status == 'success') {
return response.data.result.contextName
}
} catch (err) {
// ignore errors, try another endpoint
}
}
throw new Error(`Unable to access any endpoints associated with context hash ${contextHash}`)

from verida-js.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.