@forge/cli-shared 3.2.3 → 3.3.0-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/out/apps/create-app-graphql-client.d.ts.map +1 -1
- package/out/apps/create-app-graphql-client.js +1 -1
- package/out/auth/personal/credential-store.d.ts +2 -1
- package/out/auth/personal/credential-store.d.ts.map +1 -1
- package/out/auth/personal/credential-store.js +1 -1
- package/out/auth/personal/me-graphql-client.d.ts +2 -1
- package/out/auth/personal/me-graphql-client.d.ts.map +1 -1
- package/out/auth/personal/me-graphql-client.js +2 -1
- package/out/config/config-file.d.ts.map +1 -1
- package/out/config/config-file.js +3 -2
- package/out/graphql/get-mutation-error.d.ts +1 -0
- package/out/graphql/get-mutation-error.d.ts.map +1 -1
- package/out/graphql/get-mutation-error.js +3 -2
- package/out/graphql/graphql-types.d.ts +106 -2
- package/out/graphql/graphql-types.d.ts.map +1 -1
- package/out/graphql/graphql-types.js +1 -0
- package/out/graphql/minimal-graphql-runner.d.ts +7 -4
- package/out/graphql/minimal-graphql-runner.d.ts.map +1 -1
- package/out/graphql/minimal-graphql-runner.js +11 -5
- package/out/graphql/mutation-aware-graphql-client.d.ts +6 -2
- package/out/graphql/mutation-aware-graphql-client.d.ts.map +1 -1
- package/out/graphql/mutation-aware-graphql-client.js +10 -2
- package/out/shared/error-handling.d.ts +13 -1
- package/out/shared/error-handling.d.ts.map +1 -1
- package/out/shared/error-handling.js +22 -2
- package/out/shared/installationId.js +2 -2
- package/out/shared/validate.js +2 -2
- package/out/ui/index.d.ts +0 -1
- package/out/ui/index.d.ts.map +1 -1
- package/out/ui/index.js +0 -1
- package/package.json +1 -1
- package/out/ui/validation-error.d.ts +0 -3
- package/out/ui/validation-error.d.ts.map +0 -1
- package/out/ui/validation-error.js +0 -6
|
@@ -1869,6 +1869,7 @@ var ShepherdAlertTemplateType;
|
|
|
1869
1869
|
ShepherdAlertTemplateType["ConfluencePageExports"] = "CONFLUENCE_PAGE_EXPORTS";
|
|
1870
1870
|
ShepherdAlertTemplateType["ConfluenceSpaceExports"] = "CONFLUENCE_SPACE_EXPORTS";
|
|
1871
1871
|
ShepherdAlertTemplateType["CreatedAuthPolicy"] = "CREATED_AUTH_POLICY";
|
|
1872
|
+
ShepherdAlertTemplateType["CreatedInstallation"] = "CREATED_INSTALLATION";
|
|
1872
1873
|
ShepherdAlertTemplateType["CreatedPolicy"] = "CREATED_POLICY";
|
|
1873
1874
|
ShepherdAlertTemplateType["CreatedSamlConfig"] = "CREATED_SAML_CONFIG";
|
|
1874
1875
|
ShepherdAlertTemplateType["CreatedTunnel"] = "CREATED_TUNNEL";
|
|
@@ -2,14 +2,17 @@ import { GraphQLClient } from 'graphql-request';
|
|
|
2
2
|
import { GraphQLError } from 'graphql-request/dist/types';
|
|
3
3
|
import { Authenticator, AuthorizationHeader } from '../auth';
|
|
4
4
|
import { CLIDetails } from '../index';
|
|
5
|
+
import { BaseError, UserError } from '../shared';
|
|
5
6
|
import { GraphQLRunner } from './graphql-client';
|
|
6
|
-
export declare class GraphQLAuthenticationError extends
|
|
7
|
+
export declare class GraphQLAuthenticationError extends UserError {
|
|
7
8
|
}
|
|
8
|
-
export declare class OutdatedClientVersionError extends
|
|
9
|
+
export declare class OutdatedClientVersionError extends UserError {
|
|
9
10
|
constructor();
|
|
10
11
|
}
|
|
11
|
-
export declare class GraphQLProviderServiceError extends
|
|
12
|
-
|
|
12
|
+
export declare class GraphQLProviderServiceError extends BaseError {
|
|
13
|
+
private readonly userError;
|
|
14
|
+
constructor(userError: boolean, errors: GraphQLError[], requestId?: string);
|
|
15
|
+
isUserError(): boolean;
|
|
13
16
|
}
|
|
14
17
|
export declare class GraphqlError extends Error {
|
|
15
18
|
constructor(data: any, requestId?: string);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"minimal-graphql-runner.d.ts","sourceRoot":"","sources":["../../src/graphql/minimal-graphql-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"minimal-graphql-runner.d.ts","sourceRoot":"","sources":["../../src/graphql/minimal-graphql-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAIjD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAQjD,qBAAa,0BAA2B,SAAQ,SAAS;CAAG;AAI5D,qBAAa,0BAA2B,SAAQ,SAAS;;CAIxD;AAED,qBAAa,2BAA4B,SAAQ,SAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM;IAGpF,WAAW,IAAI,OAAO;CAG9B;AAED,qBAAa,YAAa,SAAQ,KAAK;gBACzB,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,MAAM;CAG1C;AAED,qBAAa,oBAAqB,YAAW,aAAa;IAEtD,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAFV,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,UAAU,GAAG,SAAS;IAGxC,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU;;;;IAiCjE,SAAS,CAAC,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,mBAAmB,EAAE,mBAAmB;IAMpF,UAAU,CAAC,mBAAmB,EAAE,mBAAmB,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE;IAWtF,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,gBAAgB;YAIV,4BAA4B;IAgB1C,OAAO,CAAC,YAAY;CAUrB"}
|
|
@@ -2,20 +2,25 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MinimalGraphQLRunner = exports.GraphqlError = exports.GraphQLProviderServiceError = exports.OutdatedClientVersionError = exports.GraphQLAuthenticationError = void 0;
|
|
4
4
|
const graphql_request_1 = require("graphql-request");
|
|
5
|
+
const shared_1 = require("../shared");
|
|
5
6
|
const ui_1 = require("../ui");
|
|
6
|
-
class GraphQLAuthenticationError extends
|
|
7
|
+
class GraphQLAuthenticationError extends shared_1.UserError {
|
|
7
8
|
}
|
|
8
9
|
exports.GraphQLAuthenticationError = GraphQLAuthenticationError;
|
|
9
10
|
const isOutdatedClientVersionError = (error) => { var _a; return (_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('client version is outdated'); };
|
|
10
|
-
class OutdatedClientVersionError extends
|
|
11
|
+
class OutdatedClientVersionError extends shared_1.UserError {
|
|
11
12
|
constructor() {
|
|
12
13
|
super(ui_1.Text.graphQL.outdatedClientVersion);
|
|
13
14
|
}
|
|
14
15
|
}
|
|
15
16
|
exports.OutdatedClientVersionError = OutdatedClientVersionError;
|
|
16
|
-
class GraphQLProviderServiceError extends
|
|
17
|
-
constructor(errors, requestId) {
|
|
17
|
+
class GraphQLProviderServiceError extends shared_1.BaseError {
|
|
18
|
+
constructor(userError, errors, requestId) {
|
|
18
19
|
super(`${ui_1.Text.graphQL.error}: ${JSON.stringify(errors)}, requestId=${requestId || 'unknown'}`);
|
|
20
|
+
this.userError = userError;
|
|
21
|
+
}
|
|
22
|
+
isUserError() {
|
|
23
|
+
return this.userError;
|
|
19
24
|
}
|
|
20
25
|
}
|
|
21
26
|
exports.GraphQLProviderServiceError = GraphQLProviderServiceError;
|
|
@@ -42,7 +47,8 @@ class MinimalGraphQLRunner {
|
|
|
42
47
|
if (errors.find((e) => isOutdatedClientVersionError(e))) {
|
|
43
48
|
throw new OutdatedClientVersionError();
|
|
44
49
|
}
|
|
45
|
-
|
|
50
|
+
const isUserError = status >= 400 && status < 500;
|
|
51
|
+
throw new GraphQLProviderServiceError(isUserError, errors, requestId);
|
|
46
52
|
}
|
|
47
53
|
if (status !== 200) {
|
|
48
54
|
throw new GraphqlError(data, requestId);
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { GraphQLClient } from './index';
|
|
2
2
|
import { AvailableMutations, GraphQLRunner, MutationResult } from './graphql-client';
|
|
3
|
-
|
|
3
|
+
import { BaseError } from '../shared';
|
|
4
|
+
export declare class UnexpectedGraphQlResponseError extends BaseError {
|
|
4
5
|
}
|
|
5
6
|
export declare class GraphQlMutationError extends UnexpectedGraphQlResponseError {
|
|
6
7
|
private readonly code;
|
|
7
|
-
|
|
8
|
+
private readonly statusCode;
|
|
9
|
+
constructor(message: string, code?: string, statusCode?: number);
|
|
8
10
|
getCode: () => string;
|
|
11
|
+
getStatusCode: () => number | undefined;
|
|
12
|
+
isUserError(): boolean;
|
|
9
13
|
}
|
|
10
14
|
export declare class MutationAwareGraphQLClient implements GraphQLClient {
|
|
11
15
|
private readonly runner;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutation-aware-graphql-client.d.ts","sourceRoot":"","sources":["../../src/graphql/mutation-aware-graphql-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"mutation-aware-graphql-client.d.ts","sourceRoot":"","sources":["../../src/graphql/mutation-aware-graphql-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,qBAAa,8BAA+B,SAAQ,SAAS;CAAG;AAChE,qBAAa,oBAAqB,SAAQ,8BAA8B;IACtE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;gBAEpC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAM/D,OAAO,QAAO,MAAM,CAElB;IAEF,aAAa,QAAO,MAAM,GAAG,SAAS,CAEpC;IAEK,WAAW,IAAI,OAAO;CAG9B;AAED,qBAAa,0BAA2B,YAAW,aAAa;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,aAAa;IAErC,MAAM,CAAC,MAAM,SAAS,MAAM,kBAAkB,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU;;;;IAuBhG,KAAK,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU;CAI/E"}
|
|
@@ -1,16 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MutationAwareGraphQLClient = exports.GraphQlMutationError = exports.UnexpectedGraphQlResponseError = void 0;
|
|
4
|
-
|
|
4
|
+
const shared_1 = require("../shared");
|
|
5
|
+
class UnexpectedGraphQlResponseError extends shared_1.BaseError {
|
|
5
6
|
}
|
|
6
7
|
exports.UnexpectedGraphQlResponseError = UnexpectedGraphQlResponseError;
|
|
7
8
|
class GraphQlMutationError extends UnexpectedGraphQlResponseError {
|
|
8
|
-
constructor(message, code) {
|
|
9
|
+
constructor(message, code, statusCode) {
|
|
9
10
|
super(message);
|
|
10
11
|
this.getCode = () => {
|
|
11
12
|
return this.code;
|
|
12
13
|
};
|
|
14
|
+
this.getStatusCode = () => {
|
|
15
|
+
return this.statusCode;
|
|
16
|
+
};
|
|
13
17
|
this.code = code || 'GENERIC_GRAPHQL_MUTATION_ERROR';
|
|
18
|
+
this.statusCode = statusCode;
|
|
19
|
+
}
|
|
20
|
+
isUserError() {
|
|
21
|
+
return Boolean(this.statusCode && this.statusCode >= 400 && this.statusCode < 500);
|
|
14
22
|
}
|
|
15
23
|
}
|
|
16
24
|
exports.GraphQlMutationError = GraphQlMutationError;
|
|
@@ -1,7 +1,19 @@
|
|
|
1
1
|
import { Logger } from '../ui';
|
|
2
|
-
export declare class
|
|
2
|
+
export declare class BaseError extends Error implements ErrorWithAnalytics {
|
|
3
|
+
getAttributes(): Record<string, any>;
|
|
4
|
+
isUserError(): boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare class UserError extends BaseError {
|
|
7
|
+
isUserError(): boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare class HiddenError extends BaseError {
|
|
3
10
|
}
|
|
4
11
|
export declare const exitOnError: (logger: Logger, error?: Error, hint?: string | null) => never;
|
|
5
12
|
export declare const wrapError: (error: unknown) => Error;
|
|
6
13
|
export declare const assertIsError: (error: unknown) => asserts error is Error;
|
|
14
|
+
export interface ErrorWithAnalytics {
|
|
15
|
+
getAttributes: () => Record<string, string | string[] | boolean>;
|
|
16
|
+
}
|
|
17
|
+
export declare class ValidationError extends UserError {
|
|
18
|
+
}
|
|
7
19
|
//# sourceMappingURL=error-handling.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-handling.d.ts","sourceRoot":"","sources":["../../src/shared/error-handling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG/B,qBAAa,WAAY,SAAQ,
|
|
1
|
+
{"version":3,"file":"error-handling.d.ts","sourceRoot":"","sources":["../../src/shared/error-handling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG/B,qBAAa,SAAU,SAAQ,KAAM,YAAW,kBAAkB;IACzD,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAKpC,WAAW,IAAI,OAAO;CAG9B;AAED,qBAAa,SAAU,SAAQ,SAAS;IAC/B,WAAW,IAAI,OAAO;CAG9B;AAED,qBAAa,WAAY,SAAQ,SAAS;CAAG;AAgB7C,eAAO,MAAM,WAAW,WAAY,MAAM,UAAU,KAAK,SAAS,MAAM,GAAG,IAAI,KAAG,KAgBjF,CAAC;AAOF,eAAO,MAAM,SAAS,UAAW,OAAO,KAAG,KAK1C,CAAC;AAMF,eAAO,MAAM,aAAa,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,KAAK,IAAI,KAIhE,CAAC;AAKF,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC;CAClE;AAED,qBAAa,eAAgB,SAAQ,SAAS;CAAG"}
|
|
@@ -1,8 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.assertIsError = exports.wrapError = exports.exitOnError = exports.HiddenError = void 0;
|
|
3
|
+
exports.ValidationError = exports.assertIsError = exports.wrapError = exports.exitOnError = exports.HiddenError = exports.UserError = exports.BaseError = void 0;
|
|
4
4
|
const ui_1 = require("../ui");
|
|
5
|
-
class
|
|
5
|
+
class BaseError extends Error {
|
|
6
|
+
getAttributes() {
|
|
7
|
+
return {
|
|
8
|
+
isUserError: this.isUserError()
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
isUserError() {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.BaseError = BaseError;
|
|
16
|
+
class UserError extends BaseError {
|
|
17
|
+
isUserError() {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.UserError = UserError;
|
|
22
|
+
class HiddenError extends BaseError {
|
|
6
23
|
}
|
|
7
24
|
exports.HiddenError = HiddenError;
|
|
8
25
|
function removePrefixFromErrorMessage(message) {
|
|
@@ -40,3 +57,6 @@ const assertIsError = (error) => {
|
|
|
40
57
|
}
|
|
41
58
|
};
|
|
42
59
|
exports.assertIsError = assertIsError;
|
|
60
|
+
class ValidationError extends UserError {
|
|
61
|
+
}
|
|
62
|
+
exports.ValidationError = ValidationError;
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getInstallationId = void 0;
|
|
4
4
|
const ui_1 = require("../ui");
|
|
5
|
-
const
|
|
5
|
+
const error_handling_1 = require("./error-handling");
|
|
6
6
|
function trimInstallationId(installationId, throwError) {
|
|
7
7
|
const trimmedId = installationId.trim();
|
|
8
8
|
if (throwError && trimmedId.length === 0) {
|
|
9
|
-
throw new
|
|
9
|
+
throw new error_handling_1.ValidationError(ui_1.Text.installationId.errors.invalid);
|
|
10
10
|
}
|
|
11
11
|
return trimmedId;
|
|
12
12
|
}
|
package/out/shared/validate.js
CHANGED
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.validateSite = void 0;
|
|
4
4
|
const url_1 = require("url");
|
|
5
5
|
const ui_1 = require("../ui");
|
|
6
|
-
const
|
|
6
|
+
const error_handling_1 = require("./error-handling");
|
|
7
7
|
const product_1 = require("./product");
|
|
8
8
|
const validateSite = (site, product) => {
|
|
9
9
|
const trySites = [site, `https://${site}`];
|
|
@@ -19,6 +19,6 @@ const validateSite = (site, product) => {
|
|
|
19
19
|
catch (_a) {
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
|
-
throw new
|
|
22
|
+
throw new error_handling_1.ValidationError(ui_1.Text.error.invalidSite);
|
|
23
23
|
};
|
|
24
24
|
exports.validateSite = validateSite;
|
package/out/ui/index.d.ts
CHANGED
package/out/ui/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAEA,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,MAAM,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAEA,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,MAAM,CAAC"}
|
package/out/ui/index.js
CHANGED
|
@@ -8,4 +8,3 @@ tslib_1.__exportStar(require("./logger"), exports);
|
|
|
8
8
|
tslib_1.__exportStar(require("./runtime-log"), exports);
|
|
9
9
|
tslib_1.__exportStar(require("./text"), exports);
|
|
10
10
|
tslib_1.__exportStar(require("./ui"), exports);
|
|
11
|
-
tslib_1.__exportStar(require("./validation-error"), exports);
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validation-error.d.ts","sourceRoot":"","sources":["../../src/ui/validation-error.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAgB,SAAQ,KAAK;CAAG"}
|