2
2
* Copyright (c) 2020-2025 Digital Bazaar, Inc. All rights reserved.
3
3
*/
4
4
import * as bedrock from '@bedrock/core' ;
5
+ import { CapabilityAgent } from '@digitalbazaar/webkms-client' ;
5
6
import { 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' ;
6
10
import '@bedrock/ssm-mongodb' ;
7
11
import '@bedrock/kms' ;
8
12
import '@bedrock/edv-storage' ;
@@ -11,14 +15,29 @@ import '@bedrock/profile';
11
15
import '@bedrock/app-identity' ;
12
16
import '@bedrock/https-agent' ;
13
17
import '@bedrock/jsonld-document-loader' ;
14
- import '@bedrock/meter' ;
15
- import '@bedrock/meter-usage-reporter' ;
16
18
import '@bedrock/notify' ;
17
19
import '@bedrock/passport' ;
18
20
import '@bedrock/server' ;
19
21
import '@bedrock/kms-http' ;
20
22
import '@bedrock/profile-http' ;
21
23
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
+
22
41
import { mockData } from './mocha/mock.data.js' ;
23
42
24
43
bedrock . events . on ( 'bedrock.init' , async ( ) => {
@@ -38,5 +57,71 @@ bedrock.events.on('bedrock.init', async () => {
38
57
handlers . setUseHandler ( { handler : ( { meter} = { } ) => ( { meter} ) } ) ;
39
58
} ) ;
40
59
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
+
41
126
import '@bedrock/test' ;
42
127
bedrock . start ( ) ;
0 commit comments