22 * Copyright (c) 2020-2025 Digital Bazaar, Inc. All rights reserved.
33 */
44import * as bedrock from '@bedrock/core' ;
5+ import { CapabilityAgent } from '@digitalbazaar/webkms-client' ;
56import { handlers } from '@bedrock/meter-http' ;
7+ import { meters as meterReporting } from '@bedrock/meter-usage-reporter' ;
8+ import { meters } from '@bedrock/meter' ;
9+ import { workflowService } from '@bedrock/vc-delivery' ;
610import '@bedrock/ssm-mongodb' ;
711import '@bedrock/kms' ;
812import '@bedrock/edv-storage' ;
@@ -11,14 +15,29 @@ import '@bedrock/profile';
1115import '@bedrock/app-identity' ;
1216import '@bedrock/https-agent' ;
1317import '@bedrock/jsonld-document-loader' ;
14- import '@bedrock/meter' ;
15- import '@bedrock/meter-usage-reporter' ;
1618import '@bedrock/notify' ;
1719import '@bedrock/passport' ;
1820import '@bedrock/server' ;
1921import '@bedrock/kms-http' ;
2022import '@bedrock/profile-http' ;
2123
24+ // for generating workflow for interactions...
25+ import { IdEncoder , IdGenerator } from 'bnid' ;
26+ import { Ed25519Signature2020 } from '@digitalbazaar/ed25519-signature-2020' ;
27+ import {
28+ processInteractionConfig
29+ } from '@bedrock/profile-http/lib/interactions.js' ;
30+ import { ZCAP_CLIENT } from '@bedrock/profile-http/lib/zcapClient.js' ;
31+ import { ZcapClient } from '@digitalbazaar/ezcap' ;
32+ // 128 bit random id generator
33+ const idGenerator = new IdGenerator ( { bitLength : 128 } ) ;
34+ // base58-multibase-multihash encoder
35+ const idEncoder = new IdEncoder ( {
36+ encoding : 'base58' ,
37+ multibase : true ,
38+ multihash : true
39+ } ) ;
40+
2241import { mockData } from './mocha/mock.data.js' ;
2342
2443bedrock . events . on ( 'bedrock.init' , async ( ) => {
@@ -38,5 +57,71 @@ bedrock.events.on('bedrock.init', async () => {
3857 handlers . setUseHandler ( { handler : ( { meter} = { } ) => ( { meter} ) } ) ;
3958} ) ;
4059
60+ bedrock . events . on ( 'bedrock.ready' , async ( ) => {
61+ // programmatically create workflow for interactions
62+ {
63+ // create some controller for the workflow
64+ const secret = '53ad64ce-8e1d-11ec-bb12-10bf48838a41' ;
65+ const handle = 'test' ;
66+ const capabilityAgent = await CapabilityAgent . fromSecret ( { secret, handle} ) ;
67+ const { baseUri} = bedrock . config . server ;
68+
69+ const meter = {
70+ id : idEncoder . encode ( await idGenerator . generate ( ) ) ,
71+ controller : capabilityAgent . id ,
72+ product : {
73+ id : mockData . productIdMap . get ( 'vc-workflow' )
74+ } ,
75+ serviceId : bedrock . config [ 'app-identity' ] . seeds . services [ 'vc-workflow' ] . id
76+ } ;
77+ await meters . insert ( { meter} ) ;
78+ const meterId = `${ baseUri } /meters/${ meter . id } ` ;
79+ await meterReporting . upsert ( { id : meterId , serviceType : 'vc-workflow' } ) ;
80+
81+ const localWorkflowId = idEncoder . encode ( await idGenerator . generate ( ) ) ;
82+ const config = {
83+ id : `${ baseUri } /workflows/${ localWorkflowId } ` ,
84+ sequence : 0 ,
85+ controller : capabilityAgent . id ,
86+ meterId,
87+ steps : {
88+ myStep : {
89+ stepTemplate : {
90+ type : 'jsonata' ,
91+ template : `
92+ {
93+ "inviteRequest": inviteRequest
94+ }`
95+ }
96+ }
97+ } ,
98+ initialStep : 'myStep'
99+ } ;
100+ await workflowService . configStorage . insert ( { config} ) ;
101+
102+ // delegate ability to read/write exchanges for workflow to app identity
103+ const signer = capabilityAgent . getSigner ( ) ;
104+ const zcapClient = new ZcapClient ( {
105+ invocationSigner : signer ,
106+ delegationSigner : signer ,
107+ SuiteClass : Ed25519Signature2020
108+ } ) ;
109+ const readWriteExchanges = await zcapClient . delegate ( {
110+ capability : `urn:zcap:root:${ encodeURIComponent ( config . id ) } ` ,
111+ invocationTarget : `${ config . id } /exchanges` ,
112+ controller : ZCAP_CLIENT . invocationSigner . id ,
113+ expires : new Date ( Date . now ( ) + 1000 * 60 * 60 ) ,
114+ allowedActions : [ 'read' , 'write' ]
115+ } ) ;
116+ // update interactions config
117+ const interactionsConfig = bedrock . config [ 'profile-http' ] . interactions ;
118+ interactionsConfig . enabled = true ;
119+ interactionsConfig . types . test . zcaps
120+ . readWriteExchanges = JSON . stringify ( readWriteExchanges ) ;
121+ // re-process interactions config
122+ processInteractionConfig ( ) ;
123+ }
124+ } ) ;
125+
41126import '@bedrock/test' ;
42127bedrock . start ( ) ;
0 commit comments