Skip to content

Commit

Permalink
chore: add orgs credential provider
Browse files Browse the repository at this point in the history
  • Loading branch information
tiwarishubham635 committed Dec 5, 2024
1 parent 54b5178 commit 28d9d1d
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/credential_provider/NoAuthCredentialProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import NoAuthStrategy from "../auth_strategy/NoAuthStrategy";
namespace NoAuthCredentialProvider {
export class NoAuthCredentialProvider extends CredentialProvider {
constructor() {
super("client-credentials");
super("noauth");
}

public toAuthStrategy(): AuthStrategy {
Expand Down
66 changes: 66 additions & 0 deletions src/credential_provider/OrgsCredentialProvider.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import CredentialProvider from "./CredentialProvider";
import TokenManager from "../http/bearer_token/TokenManager";
import AuthStrategy from "../auth_strategy/AuthStrategy";
import OrgsTokenManager from "../http/bearer_token/OrgsTokenManager";
import TokenAuthStrategy from "../auth_strategy/TokenAuthStrategy";

class OrgsCredentialProvider extends CredentialProvider {
grantType: string;
clientId: string;
clientSecret: string;
tokenManager: TokenManager | null;

constructor() {
super("client-credentials");
this.grantType = "client_credentials";
this.clientId = "";
this.clientSecret = "";
this.tokenManager = null;
}

public toAuthStrategy(): AuthStrategy {
if (this.tokenManager == null) {
this.tokenManager = new OrgsTokenManager({
grantType: this.grantType,
clientId: this.clientId,
clientSecret: this.clientSecret,
});
}
return new TokenAuthStrategy(this.tokenManager);
}
}

namespace OrgsCredentialProvider {
export class OrgsCredentialProviderBuilder {
private readonly instance: OrgsCredentialProvider;

constructor() {
this.instance = new OrgsCredentialProvider();
}

public setClientId(clientId: string): OrgsCredentialProviderBuilder {
this.instance.clientId = clientId;
return this;
}

public setClientSecret(
clientSecret: string
): OrgsCredentialProviderBuilder {
this.instance.clientSecret = clientSecret;
return this;
}

public setTokenManager(
tokenManager: TokenManager
): OrgsCredentialProviderBuilder {
this.instance.tokenManager = tokenManager;
return this;
}

public build(): OrgsCredentialProvider {
return this.instance;
}
}
}

export = OrgsCredentialProvider;
40 changes: 40 additions & 0 deletions src/http/bearer_token/OrgsTokenManager.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import TokenManager from "./TokenManager";
import {
TokenListInstance,
TokenListInstanceCreateOptions,
} from "../../rest/previewIam/v1/token";
import PreviewIamBase from "../../rest/PreviewIamBase";
import V1 from "../../rest/previewIam/V1";
import NoAuthCredentialProvider from "../../credential_provider/NoAuthCredentialProvider";
import { Client } from "../../base/BaseTwilio";

export default class OrgsTokenManager implements TokenManager {
private readonly params: TokenListInstanceCreateOptions;

constructor(params: TokenListInstanceCreateOptions) {
this.params = params;
}

getParams(): TokenListInstanceCreateOptions {
return this.params;
}

async fetchToken(): Promise<string> {
const noAuthCredentialProvider =
new NoAuthCredentialProvider.NoAuthCredentialProvider();
const client = new Client();
client.setCredentialProvider(noAuthCredentialProvider);

const tokenListInstance = TokenListInstance(
new V1(new PreviewIamBase(client))
);
return tokenListInstance
.create(this.params)
.then((token) => {
return token.accessToken;
})
.catch((error) => {
throw new Error(`Failed to fetch access token: ${error}`);
});
}
}

0 comments on commit 28d9d1d

Please sign in to comment.