11import  type  {  NodeManager  }  from  '../nodes' ; 
2- import  type  {  NodeInfo  }  from  '../nodes/types' ; 
32import  type  {  GestaltGraph  }  from  '../gestalts' ; 
43import  type  {  IdentitiesManager  }  from  '../identities' ; 
4+ import  type  {  ClaimLinkIdentity ,  ClaimType  }  from  '../claims/types' ; 
55import  type  { 
66  IdentityId , 
77  ProviderId , 
88  TokenData , 
9-   IdentityInfo , 
109}  from  '../identities/types' ; 
1110
1211import  type  *  as  grpc  from  '@grpc/grpc-js' ; 
1312import  type  *  as  utils  from  './utils' ; 
1413import  *  as  errors  from  '../errors' ; 
14+ import  *  as  grpc  from  '@grpc/grpc-js' ; 
15+ import  *  as  claimsUtils  from  '../claims/utils' ; 
1516import  *  as  grpcUtils  from  '../grpc/utils' ; 
1617import  *  as  utilsPB  from  '../proto/js/polykey/v1/utils/utils_pb' ; 
1718import  *  as  identitiesPB  from  '../proto/js/polykey/v1/identities/identities_pb' ; 
1819
1920const  createIdentitiesRPC  =  ( { 
2021  identitiesManager, 
22+   sigchain, 
2123  nodeManager, 
2224  gestaltGraph, 
2325  authenticate, 
2426} : { 
2527  identitiesManager : IdentitiesManager ; 
28+   sigchain : Sigchain ; 
2629  nodeManager : NodeManager ; 
2730  gestaltGraph : GestaltGraph ; 
2831  authenticate : utils . Authenticate ; 
@@ -50,7 +53,7 @@ const createIdentitiesRPC = ({
5053            'userCode was not a string' , 
5154          ) ; 
5255        } 
53-         response . setMessage ( userCode ) ; 
56+         response . setIdentityId ( userCode ) ; 
5457        await  genWritable . next ( response ) ; 
5558
5659        // Wait to finish. 
@@ -59,7 +62,7 @@ const createIdentitiesRPC = ({
5962          throw  new  errors . ErrorProviderAuthentication ( 
6063            'Failed to authenticate.' , 
6164          ) ; 
62-         response . setMessage ( userName ) ; 
65+         response . setIdentityId ( userName ) ; 
6366        await  genWritable . next ( response ) ; 
6467        await  genWritable . next ( null ) ; 
6568      }  catch  ( err )  { 
@@ -81,7 +84,7 @@ const createIdentitiesRPC = ({
8184        const  provider  =  call . request . getProvider ( ) ; 
8285        await  identitiesManager . putToken ( 
8386          provider ?. getProviderId ( )  as  ProviderId , 
84-           provider ?. getMessage ( )  as  IdentityId , 
87+           provider ?. getIdentityId ( )  as  IdentityId , 
8588          {  accessToken : call . request . getToken ( )  }  as  TokenData , 
8689        ) ; 
8790      }  catch  ( err )  { 
@@ -100,7 +103,7 @@ const createIdentitiesRPC = ({
100103
101104        const  tokens  =  await  identitiesManager . getToken ( 
102105          call . request . getProviderId ( )  as  ProviderId , 
103-           call . request . getMessage ( )  as  IdentityId , 
106+           call . request . getIdentityId ( )  as  IdentityId , 
104107        ) ; 
105108        response . setToken ( JSON . stringify ( tokens ) ) ; 
106109      }  catch  ( err )  { 
@@ -119,7 +122,7 @@ const createIdentitiesRPC = ({
119122
120123        await  identitiesManager . delToken ( 
121124          call . request . getProviderId ( )  as  ProviderId , 
122-           call . request . getMessage ( )  as  IdentityId , 
125+           call . request . getIdentityId ( )  as  IdentityId , 
123126        ) ; 
124127      }  catch  ( err )  { 
125128        callback ( grpcUtils . fromError ( err ) ,  response ) ; 
@@ -158,7 +161,7 @@ const createIdentitiesRPC = ({
158161          ?. getProviderId ( )  as  ProviderId ; 
159162        const  identityId  =  call . request 
160163          . getProvider ( ) 
161-           ?. getMessage ( )  as  IdentityId ; 
164+           ?. getIdentityId ( )  as  IdentityId ; 
162165        const  provider  =  identitiesManager . getProvider ( providerId ) ; 
163166        if  ( provider  ==  null ) 
164167          throw  Error ( 
@@ -174,7 +177,7 @@ const createIdentitiesRPC = ({
174177          const  identityInfoMessage  =  new  identitiesPB . Info ( ) ; 
175178          const  providerMessage  =  new  identitiesPB . Provider ( ) ; 
176179          providerMessage . setProviderId ( identity . providerId ) ; 
177-           providerMessage . setMessage ( identity . identityId ) ; 
180+           providerMessage . setIdentityId ( identity . identityId ) ; 
178181          identityInfoMessage . setProvider ( providerMessage ) ; 
179182          identityInfoMessage . setName ( identity . name  ??  '' ) ; 
180183          identityInfoMessage . setEmail ( identity . email  ??  '' ) ; 
@@ -204,7 +207,7 @@ const createIdentitiesRPC = ({
204207        const  identities  =  await  provider . getAuthIdentityIds ( ) ; 
205208        if  ( identities . length  !==  0 )  { 
206209          providerMessage . setProviderId ( providerId ) ; 
207-           providerMessage . setMessage ( identities [ 0 ] ) ; 
210+           providerMessage . setIdentityId ( identities [ 0 ] ) ; 
208211        }  else  throw  Error ( `No identities found for provider: ${ providerId }  ) ; 
209212        callback ( null ,  providerMessage ) ; 
210213      }  catch  ( err )  { 
@@ -215,35 +218,49 @@ const createIdentitiesRPC = ({
215218     * Augments the keynode with a new identity. 
216219     */ 
217220    identitiesClaim : async  ( 
218-       call : grpc . ServerUnaryCall < identitiesPB . Provider ,  utilsPB . EmptyMessage > , 
219-       callback : grpc . sendUnaryData < utilsPB . EmptyMessage > , 
221+       call : grpc . ServerUnaryCall < 
222+         clientPB . ProviderMessage , 
223+         clientPB . IdentityClaimMessage 
224+       > , 
225+       callback : grpc . sendUnaryData < clientPB . IdentityClaimMessage > , 
220226    ) : Promise < void >  =>  { 
221-       // To augment a keynode we need a provider, generate an oauthkey and then 
222-       const  info  =  call . request ; 
227+       const  response  =  new  clientPB . IdentityClaimMessage ( ) ; 
223228      try  { 
224-         const  metadata  =  await  authenticate ( call . metadata ) ; 
225-         call . sendMetadata ( metadata ) ; 
229+         await  sessionManager . verifyToken ( utils . getToken ( call . metadata ) ) ; 
230+         const  responseMeta  =  utils . createMetaTokenResponse ( 
231+           await  sessionManager . generateToken ( ) , 
232+         ) ; 
233+         call . sendMetadata ( responseMeta ) ; 
234+ 
235+         // Check provider is authenticated 
236+         const  providerId  =  call . request . getProviderId ( )  as  ProviderId ; 
237+         const  provider  =  identitiesManager . getProvider ( providerId ) ; 
238+         if  ( provider  ==  null )  throw  Error ( `Invalid provider: ${ providerId }  ) ; 
239+ 
240+         const  identityId  =  call . request . getIdentityId ( )  as  IdentityId ; 
241+         const  token  =  await  identitiesManager . getToken ( providerId ,  identityId ) ; 
242+         if  ( token  ==  null )  { 
243+           throw  Error ( `${ identityId }  ) ; 
244+         } 
245+ 
246+         await  provider . checkToken ( token ,  identityId ) ; 
247+ 
248+         // Create identity claim on our node 
249+         const  claim  =  await  nodeManager . claimIdentity ( providerId ,  identityId ) ; 
250+ 
251+         // Publish claim on identity 
252+         const  claimDecoded  =  claimsUtils . decodeClaim ( claim ) ; 
253+         const  publishedClaimData  =  await  provider . publishClaim ( identityId ,  claimDecoded ) ; 
254+ 
255+         response . setClaimId ( publishedClaimData . id ) ; 
256+         if  ( publishedClaimData . url  !==  undefined )  { 
257+           response . setUrl ( publishedClaimData . url ) ; 
258+         } 
226259
227-         const  nodeId  =  nodeManager . getNodeId ( ) ;  // Getting the local node ID. 
228- 
229-         // Do the deed... 
230-         const  nodeInfo : NodeInfo  =  { 
231-           id : nodeId , 
232-           chain : { } , 
233-         } ; 
234-         const  identityInfo : IdentityInfo  =  { 
235-           providerId : info . getProviderId ( )  as  ProviderId , 
236-           identityId : info . getMessage ( )  as  IdentityId , 
237-           claims : { } , 
238-         } ; 
239-         await  gestaltGraph . linkNodeAndIdentity ( nodeInfo ,  identityInfo ) ;  // Need to call this 
240-         // it takes NodeInfo and IdentityInfo. 
241-         // Getting and creating NodeInfo is blocked by 
242260      }  catch  ( err )  { 
243261        callback ( grpcUtils . fromError ( err ) ,  null ) ; 
244262      } 
245-       const  emptyMessage  =  new  utilsPB . EmptyMessage ( ) ; 
246-       callback ( null ,  emptyMessage ) ; 
263+       callback ( null ,  response ) ; 
247264    } , 
248265  } ; 
249266} ; 
0 commit comments