Yuki Takei 4 лет назад
Родитель
Сommit
b9fb59b332

+ 8 - 0
packages/slack/src/interfaces/request-between-growi-and-proxy.ts

@@ -6,6 +6,14 @@ export type RequestFromGrowi = Request & {
 
 
   // will be extracted from header
   // will be extracted from header
   tokenGtoPs: string[],
   tokenGtoPs: string[],
+
+  // Block Kit properties
+  body: {
+    view?: string,
+    blocks?: string
+  },
+  // for storing parsed blocks object
+  parsedBlocks?: any[],
 };
 };
 
 
 export type RequestFromProxy = Request & {
 export type RequestFromProxy = Request & {

+ 3 - 2
packages/slackbot-proxy/src/controllers/growi-to-slack.ts

@@ -171,7 +171,7 @@ export class GrowiToSlackCtrl {
     return res.send({ relation: createdRelation, slackBotToken: token });
     return res.send({ relation: createdRelation, slackBotToken: token });
   }
   }
 
 
-  injectGrowiUri(req:GrowiReq, growiUri:string):WebAPICallOptions {
+  injectGrowiUri(req: GrowiReq, growiUri: string):WebAPICallOptions {
 
 
     // TODO: iterate with decorator
     // TODO: iterate with decorator
     const vipd = new ViewInteractionPayloadDelegator();
     const vipd = new ViewInteractionPayloadDelegator();
@@ -179,7 +179,8 @@ export class GrowiToSlackCtrl {
       vipd.inject(req.body, growiUri);
       vipd.inject(req.body, growiUri);
     }
     }
     else if (req.body.blocks != null) {
     else if (req.body.blocks != null) {
-      const parsedBlocks = JSON.parse(req.body.blocks as string);
+      const parsedBlocks = JSON.parse(req.body.blocks) as any[];
+      req.parsedBlocks = parsedBlocks;
 
 
       parsedBlocks.forEach((parsedBlock) => {
       parsedBlocks.forEach((parsedBlock) => {
         if (parsedBlock.type !== 'actions') {
         if (parsedBlock.type !== 'actions') {

+ 15 - 13
packages/slackbot-proxy/src/middlewares/slack-to-growi/extract-growi-uri-from-req.ts

@@ -24,19 +24,21 @@ export class ExtractGrowiUriFromReq implements IMiddleware {
       const data = vipd.extract(req.parsedPayload);
       const data = vipd.extract(req.parsedPayload);
       req.growiUri = data.growiUri;
       req.growiUri = data.growiUri;
     }
     }
-    // else {
-    //   // break when uri is found
-    //   for (const type of Object.keys(growiUriInjectorFactory)) {
-    //     const growiUriInjector = growiUriInjectorFactory[type]();
-    //     const extractedValues = growiUriInjector.extract(payload.actions[0]);
-
-    //     if (extractedValues.growiUri != null) {
-    //       req.growiUri = extractedValues.growiUri;
-    //       payload.actions[0].value = JSON.stringify(extractedValues.originalData);
-    //       break;
-    //     }
-    //   }
-    // }
+    else {
+      // break when uri is found
+      for (const type of Object.keys(growiUriInjectorFactory)) {
+        const growiUriInjector = growiUriInjectorFactory[type]();
+        const extractedValues = growiUriInjector.extract(parsedPayload.actions[0]);
+
+        if (extractedValues.growiUri != null) {
+          req.growiUri = extractedValues.growiUri;
+          parsedPayload.actions[0].value = JSON.stringify(extractedValues.originalData);
+          break;
+        }
+      }
+    }
+
+    req.body.payload = JSON.stringify(parsedPayload);
 
 
     return next();
     return next();
   }
   }