Skip to content

Commit 08f7aa9

Browse files
committed
fix(clients): address feedbacks
1 parent d30877a commit 08f7aa9

File tree

12 files changed

+56
-36
lines changed

12 files changed

+56
-36
lines changed

packages/api/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
"name": "API (top-level class)",
6767
"path": "./lib-esm/index.js",
6868
"import": "{ Amplify, API }",
69-
"limit": "87.4 kB"
69+
"limit": "87.5 kB"
7070
}
7171
],
7272
"jest": {

packages/core/__tests__/Credentials-test.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@ import {
44
getCredentialsForIdentity,
55
getId,
66
} from '../src/AwsClients/CognitoIdentity';
7-
jest.mock('../src/AwsClients/CognitoIdentity');
87
import { Hub } from '../src/Hub';
8+
9+
jest.mock('../src/AwsClients/CognitoIdentity');
10+
911
const session = {};
1012

1113
const user = {

packages/core/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@
116116
},
117117
{
118118
"name": "Custom clients (unauthenticated handler)",
119-
"path": "./lib-esm/clients/handlers/unauth.js",
119+
"path": "./lib-esm/clients/handlers/unauthenticated.js",
120120
"import": "{ unauthenticatedHandler }",
121121
"limit": "2.75 kB"
122122
}

packages/core/src/AwsClients/CognitoIdentity/base.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import type {
66
Middleware,
77
} from '../../clients/types';
88
import { composeTransferHandler } from '../../clients/internal/composeTransferHandler';
9-
import { unauthenticatedHandler } from '../../clients/handlers/unauth';
9+
import { unauthenticatedHandler } from '../../clients/handlers/unauthenticated';
1010
import {
1111
jitteredBackoff,
1212
getRetryDecider,

packages/core/src/AwsClients/CognitoIdentity/getCredentialsForIdentity.ts

+17-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type {
22
GetCredentialsForIdentityCommandInput,
33
GetCredentialsForIdentityCommandOutput,
4+
Credentials,
45
} from '@aws-sdk/client-cognito-identity';
56
import {
67
buildHttpRpcRequest,
@@ -10,7 +11,11 @@ import {
1011
} from './base';
1112
import { composeServiceApi } from '../../clients/internal/composeApiHandler';
1213
import { Endpoint, HttpRequest, HttpResponse } from '../../clients/types';
13-
import { parseJsonBody, parseJsonError } from '../../clients/serde';
14+
import {
15+
parseJsonBody,
16+
parseJsonError,
17+
parseMetadata,
18+
} from '../../clients/serde';
1419

1520
export type {
1621
GetCredentialsForIdentityCommandInput,
@@ -35,15 +40,20 @@ const getCredentialsForIdentityDeserializer = async (
3540
} else {
3641
const body = await parseJsonBody(response);
3742
return {
38-
...body,
39-
Credentials: {
40-
...body.Credentials,
41-
Expiration: new Date(body.Credentials.Expiration * 1000),
42-
},
43-
} as GetCredentialsForIdentityCommandOutput;
43+
IdentityId: body.IdentityId,
44+
Credentials: de_Credentials(body.Credentials),
45+
$metadata: parseMetadata(response),
46+
};
4447
}
4548
};
4649

50+
const de_Credentials = (output: unknown = {}): Credentials => ({
51+
AccessKeyId: output['AccessKeyId'] as string,
52+
SecretKey: output['SecretKey'] as string,
53+
SessionToken: output['SessionToken'] as string,
54+
Expiration: new Date((output['Expiration'] as number) * 1000),
55+
});
56+
4757
export const getCredentialsForIdentity = composeServiceApi(
4858
cognitoIdentityTransferHandler,
4959
getCredentialsForIdentitySerializer,

packages/core/src/AwsClients/CognitoIdentity/getId.ts

+9-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@ import {
1010
} from './base';
1111
import { composeServiceApi } from '../../clients/internal/composeApiHandler';
1212
import { Endpoint, HttpRequest, HttpResponse } from '../../clients/types';
13-
import { parseJsonBody, parseJsonError } from '../../clients/serde';
13+
import {
14+
parseJsonBody,
15+
parseJsonError,
16+
parseMetadata,
17+
} from '../../clients/serde';
1418

1519
export type {
1620
GetIdCommandInput,
@@ -34,7 +38,10 @@ const getIdDeserializer = async (
3438
throw error;
3539
} else {
3640
const body = await parseJsonBody(response);
37-
return body as GetIdCommandOutput;
41+
return {
42+
IdentityId: body.IdentityId,
43+
$metadata: parseMetadata(response),
44+
};
3845
}
3946
};
4047

packages/core/src/clients/handlers/fetch.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,13 @@ export const fetchTransferHandler: TransferHandler<
2626
throw e;
2727
}
2828

29-
const headersBag = {};
29+
const headers = {};
3030
resp.headers?.forEach((value, key) => {
31-
headersBag[key.toLowerCase()] = value;
31+
headers[key.toLowerCase()] = value;
3232
});
3333
const httpResponse = {
3434
statusCode: resp.status,
35-
headers: headersBag,
35+
headers,
3636
body: null,
3737
};
3838

packages/core/src/clients/middleware/retry/defaultRetryDecider.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ import { HttpResponse, ErrorParser } from '../../types';
77
export const getRetryDecider =
88
(errorParser: ErrorParser) =>
99
async (response?: HttpResponse, error?: Error): Promise<boolean> => {
10-
const errorFromResponse = error ?? (await errorParser(response));
10+
const { name: errorCode } = error ?? (await errorParser(response)) ?? {};
1111
const statusCode = response?.statusCode;
1212
return (
1313
isConnectionError(error) ||
14-
isThrottlingError(statusCode, errorFromResponse.name) ||
15-
isClockSkewError(errorFromResponse.name) ||
16-
isServerSideError(statusCode, errorFromResponse.name)
14+
isThrottlingError(statusCode, errorCode) ||
15+
isClockSkewError(errorCode) ||
16+
isServerSideError(statusCode, errorCode)
1717
);
1818
};
1919

packages/core/src/clients/middleware/retry/middleware.ts

+10-7
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ const DEFAULT_RETRY_ATTEMPTS = 3;
1111
/**
1212
* Configuration of the retry middleware
1313
*/
14-
export interface RetryOptions<ResponseType = Response> {
14+
export interface RetryOptions<TResponse = Response> {
1515
/**
1616
* Function to decide if the request should be retried.
1717
*
1818
* @param response Optional response of the request.
1919
* @param error Optional error thrown from previous attempts.
2020
* @returns True if the request should be retried.
2121
*/
22-
retryDecider: (response?: ResponseType, error?: unknown) => Promise<boolean>;
22+
retryDecider: (response?: TResponse, error?: unknown) => Promise<boolean>;
2323
/**
2424
* Function to compute the delay in milliseconds before the next retry based
2525
* on the number of attempts.
@@ -40,14 +40,17 @@ export interface RetryOptions<ResponseType = Response> {
4040
/**
4141
* Retry middleware
4242
*/
43-
export const retryMiddleware = <Input = Request, Output = Response>(
44-
options: RetryOptions<Output>
43+
export const retryMiddleware = <TInput = Request, TOutput = Response>(
44+
options: RetryOptions<TOutput>
4545
) => {
4646
if (options.maxAttempts < 1) {
4747
throw new Error('maxAttempts must be greater than 0');
4848
}
49-
return (next: MiddlewareHandler<Input, Output>, context: MiddlewareContext) =>
50-
async function retryMiddleware(request: Input) {
49+
return (
50+
next: MiddlewareHandler<TInput, TOutput>,
51+
context: MiddlewareContext
52+
) =>
53+
async function retryMiddleware(request: TInput) {
5154
const {
5255
maxAttempts = DEFAULT_RETRY_ATTEMPTS,
5356
retryDecider,
@@ -56,7 +59,7 @@ export const retryMiddleware = <Input = Request, Output = Response>(
5659
} = options;
5760
let error: Error;
5861
let attemptsCount = context.attemptsCount ?? 0;
59-
let response: Output;
62+
let response: TOutput;
6063
while (!abortSignal?.aborted && attemptsCount < maxAttempts) {
6164
error = undefined;
6265
response = undefined;

packages/core/src/clients/middleware/userAgent/middleware.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ export const userAgentMiddleware: Middleware<
1919
next => {
2020
return async function userAgentMiddleware(request) {
2121
if (userAgentValue.trim().length === 0) {
22-
return await next(request);
22+
const result = await next(request);
23+
return result;
2324
} else {
2425
const headerName = userAgentHeader.toLowerCase();
2526
request.headers[headerName] = request.headers[headerName]

packages/core/src/clients/serde/json.ts

+5-8
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,9 @@ export const parseJsonError: ErrorParser = async (response?: HttpResponse) => {
1616
}
1717
const body = await parseJsonBody(response);
1818
const sanitizeErrorCode = (rawValue: string | number): string => {
19-
let cleanValue = rawValue.toString();
20-
if (cleanValue.includes(',')) {
21-
[cleanValue] = cleanValue.split(',');
22-
}
23-
if (cleanValue.includes(':')) {
24-
[cleanValue] = cleanValue.split(':');
25-
}
19+
const [cleanValue] = rawValue.toString().split(/[\,\:]+/);
2620
if (cleanValue.includes('#')) {
27-
[cleanValue] = cleanValue.split('#');
21+
return cleanValue.split('#')[1];
2822
}
2923
return cleanValue;
3024
};
@@ -42,6 +36,9 @@ export const parseJsonError: ErrorParser = async (response?: HttpResponse) => {
4236
});
4337
};
4438

39+
/**
40+
* Parse JSON response body to JavaScript object.
41+
*/
4542
export const parseJsonBody = async (response: HttpResponse): Promise<any> => {
4643
if (!response.body) {
4744
throw new Error('Missing response payload');

0 commit comments

Comments
 (0)