Skip to content

Commit

Permalink
feat: exchange identity credentials for iota credentials
Browse files Browse the repository at this point in the history
  • Loading branch information
Carlos Rincon committed Aug 14, 2024
1 parent 55c20d1 commit 9f658ea
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 15 deletions.
1 change: 1 addition & 0 deletions libs/iota-core/helpers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@ export {
type Credentials,
type IAuthProviderParams,
type IotaCredentials,
type IdentityCredentials,
} from './iota-auth-provider'
43 changes: 28 additions & 15 deletions libs/iota-core/helpers/iota-auth-provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@ export interface Credentials {
readonly expiration?: Date
}

export interface IdentityCredentials {
readonly identityId: string
readonly token: string
}

export class IotaAuthProvider {
region: string
apiGW: string
Expand All @@ -31,42 +36,50 @@ export class IotaAuthProvider {
this.apiGW = param?.apiGW ?? EnvironmentUtils.fetchApiGwUrl()
}

async limitedTokenToIotaCredentials(token: string): Promise<IotaCredentials> {
async limitedTokenToIotaCredentials(
limitedToken: string,
): Promise<IotaCredentials> {
const iotaAPIClient = new IotaApi(
new Configuration({ basePath: `${this.apiGW}/ais` }),
)
const response = await iotaAPIClient.awsExchangeCredentials({
assertion: token,
assertion: limitedToken,
})
const {
const { connectionClientId, credentials: identityCredentials } =
response.data

const credentials =
await this.exchangeIdentityCredentials(identityCredentials)

return {
credentials,
connectionClientId,
credentials: { identityId, token: cognitoToken },
} = response.data
}
}

async exchangeIdentityCredentials(
identityCredentials: IdentityCredentials,
): Promise<Credentials> {
const cognitoIdentityClient = new CognitoIdentityClient({
region: this.region,
})
const responseCmd = await cognitoIdentityClient.send(
new GetCredentialsForIdentityCommand({
IdentityId: identityId,
IdentityId: identityCredentials.identityId,
Logins: {
'cognito-identity.amazonaws.com': cognitoToken,
'cognito-identity.amazonaws.com': identityCredentials.token,
},
}),
)
const credentials = responseCmd.Credentials
if (!credentials) {
throw new Error('Error fetching credentials')
}

return {
credentials: {
accessKeyId: credentials.AccessKeyId,
secretKey: credentials.SecretKey,
sessionToken: credentials.SessionToken,
expiration: credentials.Expiration,
},
connectionClientId,
accessKeyId: credentials.AccessKeyId,
secretKey: credentials.SecretKey,
sessionToken: credentials.SessionToken,
expiration: credentials.Expiration,
}
}
}

0 comments on commit 9f658ea

Please sign in to comment.