profile
viewpoint
If you are wondering where the data of this site comes from, please visit https://api.github.com/users/dmitrizagidulin/events. GitMemory does not store any data, but only uses NGINX to cache data for a period of time. The idea behind GitMemory is simply to give users a better reading experience.
Dmitri Zagidulin dmitrizagidulin Digital Bazaar Boston, MA, USA http://computingjoy.com/

digitalbazaar/jsonld.js 1337

A JSON-LD Processor and API implementation in JavaScript

digitalbazaar/ed25519-verification-key-2018 4

Javascript library for generating and working with Ed25519 key pairs, for use with crypto-ld.

alexfigtree/reality-virtually-hackathon 3

Repo for the GitHub workshop at the Reality Virtually Hackathon, MIT, January 17th, 2019

digitalbazaar/bedrock-web-vc-store 2

A Javascript library for storing Verifiable Credentials for Bedrock web apps

digitalbazaar/chapi-demo-wallet 2

Credential Handler API Demo Wallet

bkerley/ripple 1

A rich Ruby client for Riak, Basho's distributed database

digitalbazaar/chapi-demo-issuer 1

Credential Handler API Demo Issuer

digitalbazaar/cit-context 1

Concealed Id Token context for JSON-LD.

digitalbazaar/oauth2-token-endpoint-handler 1

OAuth2 Token endpoint handler for custom authorization servers.

issue commentdecentralized-identity/edv-spec

Should Document / Resource IDs be URIs?

Discussed on Aug 5, 2021

  • Group agrees to use Resources as a general umbrella term for Documents/Streams.
  • Requiring traditional https URLs has downsides/implications for replication (does an ID bind to a resource's domain/location)
  • The recommendation is to only use a persistent / non-binding URI for documents, that remains stable through replication.
OR13

comment created time in 7 hours

issue closeddecentralized-identity/edv-spec

Clarification on the inception of a new document's ID

We have implemented an encrypted data vault and we are now moving to integrate an EDV client for it as a "storage plugin" to aries-framework-go.

One of the sticking points is the ambiguity in the spec w.r.t. a new document's identifier.

To create a new document one must POST a request with an EncryptedDocument structure. This structure has an id property that the client assigns a value to. Inception of this ID is on the client side.

This example response is returning a different ID than the one sent in the example request right above it.

Request

  • Clarification on where the spec or the group's thinking is headed in, whether the identifier is controlled by the client or controlled by the server, and
  • Add normative text to the spec that clarifies this point

closed time in 7 hours

llorllale

issue commentdecentralized-identity/edv-spec

Indexing of stream chunks not the same as indexing on structured data

Discussed on Aug 5, 2021 call - this is ready for PR (to sections 3.4 / 3.5.3).

OR13

comment created time in 7 hours

issue commentdecentralized-identity/edv-spec

Breaking Changes in edv-client@5.0

Discussed on Aug 5, 2021 call - Group resolved to give notifications / discussion of breaking changes on the biweekly EDV calls.

OR13

comment created time in 7 hours

issue closeddecentralized-identity/edv-spec

well-known URIs / configuration advertisment

we use well-known URIs for this:

https://did-edv.web.app/api/docs/static/index.html#/default/get__well_known_edv_configuration

^ this is not standard or specified anywhere....

How can I discover if a server supports SDS?

closed time in 7 hours

OR13

push eventdecentralized-identity/edv-spec

Derek Trider

commit sha 42c769a7429e8c57c640edd9f4f4b4ddacad6d0c

Change max encrypted document and max chunk size - Max encrypted document size is now 10MiB (used to be 16MB). - Max chunk size is now 1MiB (wasn't explicitly defined before). - Updated some text to indicate that the limit is on Encrypted Documents, not Structured Documents.

view details

push time in 7 hours

PR merged decentralized-identity/edv-spec

Reviewers
Change max encrypted document and max chunk size

closes #22

  • Max encrypted document size is now 10MiB (used to be 16MB).
  • Updated some text to indicate that the limit is on Encrypted Documents, not Structured Documents.
+8 -7

12 comments

1 changed file

DRK3

pr closed time in 7 hours

issue closeddecentralized-identity/edv-spec

Max structured document size

Currently in the spec under structured documents it stipulates that the maximum document size is limited to 16MB, however this could be a decision reserved for a storage provider for which they could advertise their maximum allowed document size instead.

Suggestion is to remove this maximum document size from the spec and instead add language around how a storage provider server can advertise what their maximum size is, the spec could offer recommendations on how this should be set

closed time in 7 hours

tplooker
PullRequestReviewEvent
PullRequestReviewEvent
PullRequestReviewEvent

push eventdigitalbazaar/bedrock-vue-pdf417

Dmitri Zagidulin

commit sha bd6d3f1f7ff256cbc1ada6a406d97929391ad3bc

Start 1.1.1-0.

view details

push time in 3 days

created tagdigitalbazaar/bedrock-vue-pdf417

tagv1.1.0

created time in 3 days

push eventdigitalbazaar/bedrock-vue-pdf417

Dmitri Zagidulin

commit sha 8fd4bc140ea05f933455c575fb308305cb1111c6

Update changelog.

view details

Dmitri Zagidulin

commit sha 3103af04e2106d5d2ffc63516f5806ebfa3675c4

Release 1.1.0.

view details

push time in 3 days

delete branch digitalbazaar/bedrock-vue-pdf417

delete branch : add-color-option

delete time in 3 days

push eventdigitalbazaar/bedrock-vue-pdf417

Josh Dunn

commit sha 6cc145e35c176d1b8f54262d13735b778328c7aa

Add ability to specify button color.

view details

Josh Dunn

commit sha ebe616a482b2e0a92782aa47de699d6516d90b9d

Small cleanup.

view details

push time in 3 days

PullRequestReviewEvent

pull request commentdigitalbazaar/bedrock-oauth2-client

V1 of bedrock-oauth2-client.

This is a good start. A few more comments:

  1. Let's move the parsing of config into this library (currently it's being done in the top-level app).
  2. Add the ability to store different access tokens by issuer (as described in https://github.com/digitalbazaar/veres-wallet/issues/367)
  3. Add the memoized LRU cache of access tokens
  4. Add the max retry logic.
mandyvenables

comment created time in 6 days

Pull request review commentdigitalbazaar/bedrock-oauth2-client

V1 of bedrock-oauth2-client.

 /*- * Copyright (c) 2020-2021 Digital Bazaar, Inc. All rights reserved.+ * Copyright (c) 2021 Digital Bazaar, Inc. All rights reserved.  */  describe('api', () => {

Can we add unit tests (for checkDatabase, getToken, insertToken etc)?

mandyvenables

comment created time in 6 days

PullRequestReviewEvent
PullRequestReviewEvent

Pull request review commentdigitalbazaar/bedrock-oauth2-client

V1 of bedrock-oauth2-client.

+/*!+ * Copyright (c) 2021 Digital Bazaar, Inc. All rights reserved.+ */++import database from 'bedrock-mongodb';+import * as bedrock from 'bedrock';+import {promisify} from 'util';+import {httpClient} from '@digitalbazaar/http-client';+const {util: {BedrockError}} = bedrock;++bedrock.events.on('bedrock-mongodb.ready', async () => {+  await promisify(database.openCollections)(['access-tokens']);++  // shard based on `siteId`+  await promisify(database.createIndexes)([{+    // prevent duplicate events from being stored+    collection: 'access-tokens',+    fields: {'token.token': 1},+    options: {unique: true, background: false}+  }, {+    // automatically expire events with an `expires` date field+    collection: 'access-tokens',+    fields: {'token.expires': 1},+    options: {+      partialFilterExpression: {'token.expires': {$exists: true}},+      unique: false,+      background: false,+      expireAfterSeconds: 0+    }+  }]);+});++export class OAuth2Client {+  constructor({+    client_id, client_secret, url, grant_type, scope, httpsAgent+  } = {}) {+    this.client_id = client_id;+    this.client_secret = client_secret;+    this.url = url;+    this.grant_type = grant_type;+    this.scope = scope;+    this.httpsAgent = httpsAgent;+  }+  async getToken() {
  async loadToken() {

Would loadToken be more descriptive? (Emphasizing that we're loading it from db first)

mandyvenables

comment created time in 6 days

Pull request review commentdigitalbazaar/bedrock-oauth2-client

V1 of bedrock-oauth2-client.

+/*!+ * Copyright (c) 2021 Digital Bazaar, Inc. All rights reserved.+ */++import database from 'bedrock-mongodb';+import * as bedrock from 'bedrock';+import {promisify} from 'util';+import {httpClient} from '@digitalbazaar/http-client';+const {util: {BedrockError}} = bedrock;++bedrock.events.on('bedrock-mongodb.ready', async () => {+  await promisify(database.openCollections)(['access-tokens']);++  // shard based on `siteId`+  await promisify(database.createIndexes)([{+    // prevent duplicate events from being stored+    collection: 'access-tokens',+    fields: {'token.token': 1},+    options: {unique: true, background: false}+  }, {+    // automatically expire events with an `expires` date field+    collection: 'access-tokens',+    fields: {'token.expires': 1},+    options: {+      partialFilterExpression: {'token.expires': {$exists: true}},+      unique: false,+      background: false,+      expireAfterSeconds: 0+    }+  }]);+});++export class OAuth2Client {+  constructor({+    client_id, client_secret, url, grant_type, scope, httpsAgent+  } = {}) {+    this.client_id = client_id;+    this.client_secret = client_secret;+    this.url = url;+    this.grant_type = grant_type;+    this.scope = scope;+    this.httpsAgent = httpsAgent;+  }+  async getToken() {+    const {client_id, client_secret, url, grant_type, scope, httpsAgent} = this;+    let token;+    token = await checkDatabase({client_id});+    if(!token || !token.access_token) {+      token = await getNewAccessToken({+        client_id, client_secret, url, grant_type, scope, httpsAgent+      });+      await insertToken({token});+    }+    return token.access_token;+  }+}++async function getNewAccessToken({+  client_id, client_secret, url, grant_type, scope, httpsAgent+}) {+  const body = new URLSearchParams();+  body.set('client_id', client_id);+  body.set('client_secret', client_secret);+  body.set('grant_type', grant_type);+  body.set('scope', scope);++  let response;+  try {+    ({data: response} = await httpClient.post(url, {+      body,+      agent: httpsAgent+    }));+  } catch(e) {+    throw new BedrockError(+      `Service Unavilable`, 'InvalidStateError', {+        httpStatusCode: 503,+        public: true+      }, e);+  }+  const token = {client_id, client_secret};+  if(response && response.access_token) {+    token.access_token = response.access_token;+    return token;+  } else {+    throw new BedrockError(+      `Service Unavilable`, 'InvalidStateError', {+        httpStatusCode: 503,+        public: true+      });+  }+}++async function insertToken({token}) {+  const now = Date.now();+  const meta = {created: now, updated: now};+  // expires after 2 weeks+  const ttl = 2 * 7 * 24 * 60 * 60 * 1000;+  token.expires = new Date(now + ttl);+  let record = {+    meta,+    token+  };+  const collection = database.collections['access-tokens'];+  try {+    const result = await collection.insertOne(record, database.writeOptions);+    record = result.ops[0];+  } catch(e) {+    if(!database.isDuplicateError(e)) {+      throw e;+    }+    throw new BedrockError(

Do we actually need to throw a 'Duplicate token' error here?

mandyvenables

comment created time in 6 days

PullRequestReviewEvent

Pull request review commentdigitalbazaar/bedrock-oauth2-client

V1 of bedrock-oauth2-client.

+/*!+ * Copyright (c) 2021 Digital Bazaar, Inc. All rights reserved.+ */++import database from 'bedrock-mongodb';+import * as bedrock from 'bedrock';+import {promisify} from 'util';+import {httpClient} from '@digitalbazaar/http-client';+const {util: {BedrockError}} = bedrock;++bedrock.events.on('bedrock-mongodb.ready', async () => {+  await promisify(database.openCollections)(['access-tokens']);++  // shard based on `siteId`+  await promisify(database.createIndexes)([{+    // prevent duplicate events from being stored+    collection: 'access-tokens',+    fields: {'token.token': 1},+    options: {unique: true, background: false}+  }, {+    // automatically expire events with an `expires` date field+    collection: 'access-tokens',+    fields: {'token.expires': 1},+    options: {+      partialFilterExpression: {'token.expires': {$exists: true}},+      unique: false,+      background: false,+      expireAfterSeconds: 0+    }+  }]);+});++export class OAuth2Client {+  constructor({+    client_id, client_secret, url, grant_type, scope, httpsAgent+  } = {}) {+    this.client_id = client_id;+    this.client_secret = client_secret;+    this.url = url;+    this.grant_type = grant_type;+    this.scope = scope;+    this.httpsAgent = httpsAgent;+  }+  async getToken() {+    const {client_id, client_secret, url, grant_type, scope, httpsAgent} = this;+    let token;+    token = await checkDatabase({client_id});+    if(!token || !token.access_token) {+      token = await getNewAccessToken({+        client_id, client_secret, url, grant_type, scope, httpsAgent+      });+      await insertToken({token});+    }+    return token.access_token;+  }+}++async function getNewAccessToken({

It'd be great to have jsdocs, here and on other functions.

mandyvenables

comment created time in 6 days

PullRequestReviewEvent
PullRequestReviewEvent

Pull request review commentdigitalbazaar/bedrock-oauth2-client

V1 of bedrock-oauth2-client.

+/*!+ * Copyright (c) 2021 Digital Bazaar, Inc. All rights reserved.+ */++import database from 'bedrock-mongodb';+import * as bedrock from 'bedrock';+import {promisify} from 'util';+import {httpClient} from '@digitalbazaar/http-client';+const {util: {BedrockError}} = bedrock;++bedrock.events.on('bedrock-mongodb.ready', async () => {+  await promisify(database.openCollections)(['access-tokens']);++  // shard based on `siteId`+  await promisify(database.createIndexes)([{+    // prevent duplicate events from being stored+    collection: 'access-tokens',+    fields: {'token.token': 1},+    options: {unique: true, background: false}+  }, {+    // automatically expire events with an `expires` date field+    collection: 'access-tokens',+    fields: {'token.expires': 1},+    options: {+      partialFilterExpression: {'token.expires': {$exists: true}},+      unique: false,+      background: false,+      expireAfterSeconds: 0+    }+  }]);+});++export class OAuth2Client {+  constructor({+    client_id, client_secret, url, grant_type, scope, httpsAgent+  } = {}) {+    this.client_id = client_id;+    this.client_secret = client_secret;+    this.url = url;+    this.grant_type = grant_type;+    this.scope = scope;+    this.httpsAgent = httpsAgent;+  }+  async getToken() {+    const {client_id, client_secret, url, grant_type, scope, httpsAgent} = this;+    let token;+    token = await checkDatabase({client_id});+    if(!token || !token.access_token) {+      token = await getNewAccessToken({+        client_id, client_secret, url, grant_type, scope, httpsAgent+      });+      await insertToken({token});+    }+    return token.access_token;+  }+}++async function getNewAccessToken({+  client_id, client_secret, url, grant_type, scope, httpsAgent+}) {+  const body = new URLSearchParams();+  body.set('client_id', client_id);+  body.set('client_secret', client_secret);+  body.set('grant_type', grant_type);+  body.set('scope', scope);++  let response;+  try {+    ({data: response} = await httpClient.post(url, {+      body,+      agent: httpsAgent+    }));+  } catch(e) {+    throw new BedrockError(

Can we add an error log entry here as well, in addition to throwing the BedrockError? Returning an opaque 503 Service Unavailable to whoever is trying to use this endpoint is totally fine, but we also want to make sure that our error logs contain the reason "This service is unavailable because we couldn't get a critical access_token - and here's the reason that operation failed."

mandyvenables

comment created time in 6 days

push eventdigitalbazaar/bedrock-web-local-vc-store

Dmitri Zagidulin

commit sha a7e62862d7961a5cc5a9c85548169c7e5296eb86

Start 2.2.1-0.

view details

push time in 6 days