import * as jsonwebtoken from 'jsonwebtoken';
import fs from "'fs"';
import {JWTPrivateKey} from "'./JWTPrivateKey"';
import axios from "'axios"';
export class
export interface JWTPrivateKey {
type: string,MicromateRequest {
public async callMicromatePublicApi(): Promise<void> {
const token = await this.getOAuthToken();
const data = await axios.get('http://bot.micromate.ai/api/public/organization/{organizationId}/learningPackage/{learningPackageId}/questions', {
keyId: string,headers: {Authorization: `Bearer ${token}`}
});
console.log('Data retrieved from micromate public keyapi: string', data.data);
userId: string
}
public staticprivate createSignedJWT(): string {
// Read the private key
const rawPrivateKey = fs.readFileSync('./privateKey.json', 'utf8');
const privateKey = JSON.parse(rawPrivateKey) as JWTPrivateKey;
// Valid from now minus 10 seconds
const validFrom: number = Math.floor(Date.now() / 1000) - 10;
// Expiration 1 hour after now
const expiration: number = Math.floor(Date.now() / 1000) + (60 * 60);
// Create a JWT token
const jwtToSign = {
iss: privateKey.userId,
sub: privateKey.userId,
aud: 'https://micromate-q4ee42.zitadel.cloud',
iat: validFrom,
exp: expiration
};
// Sign and return the token
return jsonwebtoken.sign(jwtToSign, privateKey.key, {algorithm: 'RS256', keyid: privateKey.keyId});
}
public staticprivate async getOAuthToken(): Promise<string> {
// Create signed token
const token = this.createSignedJWT();
// Request to token endpoint to get an access token
// which then can be used to access the micromate public api
const data = await axios.post<{ token_type: string, access_token: string, expires_in: number }>post<TokenResponse>('https://login.micromate.ai/oauth/v2/token', {}, {
params: {
'grant_type': 'urn:ietf:params:oauth:grant-type:jwt-bearer',
'scope': 'openid profile email urn:zitadel:iam:org:project:id:69234237810729019:aud',
'assertion': token
},
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
});
// Return access token
return data.data.access_token;
}
}
//export Callinterface MicromateJWTPrivateKey Public{
API const token = await getOAuthToken();
const data = await axios.get('http://bot.micromate.ai/api/public/organization/{organizationId}/learningPackage/{learningPackageId}/questions', {type: string,
keyId: string,
key: string,
headers: {Authorization: `Bearer ${token}`}
});userId: string
}
export interface TokenResponse {
token_type: string,
access_token: string,
expires_in: number
}
|