@solarwinds/squadcast-sdk-typescript 1.1.0 → 1.3.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.
Files changed (149) hide show
  1. package/FUNCTIONS.md +5 -8
  2. package/README.md +138 -36
  3. package/dist/commonjs/funcs/authAuthGetAccessToken.d.ts +20 -0
  4. package/dist/commonjs/funcs/authAuthGetAccessToken.d.ts.map +1 -0
  5. package/dist/commonjs/funcs/authAuthGetAccessToken.js +134 -0
  6. package/dist/commonjs/funcs/authAuthGetAccessToken.js.map +1 -0
  7. package/dist/commonjs/funcs/escalationPoliciesUpdate.js +4 -1
  8. package/dist/commonjs/funcs/escalationPoliciesUpdate.js.map +1 -1
  9. package/dist/commonjs/funcs/workflowsUpdateAction.d.ts +1 -2
  10. package/dist/commonjs/funcs/workflowsUpdateAction.d.ts.map +1 -1
  11. package/dist/commonjs/funcs/workflowsUpdateAction.js +1 -2
  12. package/dist/commonjs/funcs/workflowsUpdateAction.js.map +1 -1
  13. package/dist/commonjs/lib/config.d.ts +4 -4
  14. package/dist/commonjs/lib/config.d.ts.map +1 -1
  15. package/dist/commonjs/lib/config.js +8 -4
  16. package/dist/commonjs/lib/config.js.map +1 -1
  17. package/dist/commonjs/lib/matchers.d.ts.map +1 -1
  18. package/dist/commonjs/lib/matchers.js +0 -1
  19. package/dist/commonjs/lib/matchers.js.map +1 -1
  20. package/dist/commonjs/lib/security.d.ts.map +1 -1
  21. package/dist/commonjs/lib/security.js +1 -2
  22. package/dist/commonjs/lib/security.js.map +1 -1
  23. package/dist/commonjs/models/errors/authgetaccesstoken.d.ts +352 -0
  24. package/dist/commonjs/models/errors/authgetaccesstoken.d.ts.map +1 -0
  25. package/dist/commonjs/models/errors/authgetaccesstoken.js +424 -0
  26. package/dist/commonjs/models/errors/authgetaccesstoken.js.map +1 -0
  27. package/dist/commonjs/models/errors/index.d.ts +1 -1
  28. package/dist/commonjs/models/errors/index.d.ts.map +1 -1
  29. package/dist/commonjs/models/errors/index.js +1 -1
  30. package/dist/commonjs/models/errors/index.js.map +1 -1
  31. package/dist/commonjs/models/index.d.ts +1 -0
  32. package/dist/commonjs/models/index.d.ts.map +1 -1
  33. package/dist/commonjs/models/index.js +1 -0
  34. package/dist/commonjs/models/index.js.map +1 -1
  35. package/dist/commonjs/models/operations/authgetaccesstoken.d.ts +31 -0
  36. package/dist/commonjs/models/operations/authgetaccesstoken.d.ts.map +1 -0
  37. package/dist/commonjs/models/operations/authgetaccesstoken.js +74 -0
  38. package/dist/commonjs/models/operations/authgetaccesstoken.js.map +1 -0
  39. package/dist/commonjs/models/operations/index.d.ts +1 -0
  40. package/dist/commonjs/models/operations/index.d.ts.map +1 -1
  41. package/dist/commonjs/models/operations/index.js +1 -0
  42. package/dist/commonjs/models/operations/index.js.map +1 -1
  43. package/dist/commonjs/models/operations/workflowsupdateworkflowaction.d.ts +29 -0
  44. package/dist/commonjs/models/operations/workflowsupdateworkflowaction.d.ts.map +1 -1
  45. package/dist/commonjs/models/operations/workflowsupdateworkflowaction.js +49 -1
  46. package/dist/commonjs/models/operations/workflowsupdateworkflowaction.js.map +1 -1
  47. package/dist/commonjs/models/security.d.ts +2 -2
  48. package/dist/commonjs/models/security.d.ts.map +1 -1
  49. package/dist/commonjs/models/security.js +1 -1
  50. package/dist/commonjs/models/security.js.map +1 -1
  51. package/dist/commonjs/models/v3authaccesstokendata.d.ts +32 -0
  52. package/dist/commonjs/models/v3authaccesstokendata.d.ts.map +1 -0
  53. package/dist/commonjs/models/v3authaccesstokendata.js +62 -0
  54. package/dist/commonjs/models/v3authaccesstokendata.js.map +1 -0
  55. package/dist/commonjs/sdk/auth.d.ts +14 -0
  56. package/dist/commonjs/sdk/auth.d.ts.map +1 -0
  57. package/dist/commonjs/sdk/auth.js +24 -0
  58. package/dist/commonjs/sdk/auth.js.map +1 -0
  59. package/dist/commonjs/sdk/sdk.d.ts +3 -0
  60. package/dist/commonjs/sdk/sdk.d.ts.map +1 -1
  61. package/dist/commonjs/sdk/sdk.js +4 -0
  62. package/dist/commonjs/sdk/sdk.js.map +1 -1
  63. package/dist/commonjs/sdk/workflows.d.ts +1 -1
  64. package/dist/commonjs/sdk/workflows.d.ts.map +1 -1
  65. package/dist/esm/funcs/authAuthGetAccessToken.d.ts +20 -0
  66. package/dist/esm/funcs/authAuthGetAccessToken.d.ts.map +1 -0
  67. package/dist/esm/funcs/authAuthGetAccessToken.js +98 -0
  68. package/dist/esm/funcs/authAuthGetAccessToken.js.map +1 -0
  69. package/dist/esm/funcs/escalationPoliciesUpdate.js +4 -1
  70. package/dist/esm/funcs/escalationPoliciesUpdate.js.map +1 -1
  71. package/dist/esm/funcs/workflowsUpdateAction.d.ts +1 -2
  72. package/dist/esm/funcs/workflowsUpdateAction.d.ts.map +1 -1
  73. package/dist/esm/funcs/workflowsUpdateAction.js +1 -2
  74. package/dist/esm/funcs/workflowsUpdateAction.js.map +1 -1
  75. package/dist/esm/lib/config.d.ts +4 -4
  76. package/dist/esm/lib/config.d.ts.map +1 -1
  77. package/dist/esm/lib/config.js +8 -4
  78. package/dist/esm/lib/config.js.map +1 -1
  79. package/dist/esm/lib/matchers.d.ts.map +1 -1
  80. package/dist/esm/lib/matchers.js +0 -1
  81. package/dist/esm/lib/matchers.js.map +1 -1
  82. package/dist/esm/lib/security.d.ts.map +1 -1
  83. package/dist/esm/lib/security.js +1 -2
  84. package/dist/esm/lib/security.js.map +1 -1
  85. package/dist/esm/models/errors/authgetaccesstoken.d.ts +352 -0
  86. package/dist/esm/models/errors/authgetaccesstoken.d.ts.map +1 -0
  87. package/dist/esm/models/errors/authgetaccesstoken.js +374 -0
  88. package/dist/esm/models/errors/authgetaccesstoken.js.map +1 -0
  89. package/dist/esm/models/errors/index.d.ts +1 -1
  90. package/dist/esm/models/errors/index.d.ts.map +1 -1
  91. package/dist/esm/models/errors/index.js +1 -1
  92. package/dist/esm/models/errors/index.js.map +1 -1
  93. package/dist/esm/models/index.d.ts +1 -0
  94. package/dist/esm/models/index.d.ts.map +1 -1
  95. package/dist/esm/models/index.js +1 -0
  96. package/dist/esm/models/index.js.map +1 -1
  97. package/dist/esm/models/operations/authgetaccesstoken.d.ts +31 -0
  98. package/dist/esm/models/operations/authgetaccesstoken.d.ts.map +1 -0
  99. package/dist/esm/models/operations/authgetaccesstoken.js +36 -0
  100. package/dist/esm/models/operations/authgetaccesstoken.js.map +1 -0
  101. package/dist/esm/models/operations/index.d.ts +1 -0
  102. package/dist/esm/models/operations/index.d.ts.map +1 -1
  103. package/dist/esm/models/operations/index.js +1 -0
  104. package/dist/esm/models/operations/index.js.map +1 -1
  105. package/dist/esm/models/operations/workflowsupdateworkflowaction.d.ts +29 -0
  106. package/dist/esm/models/operations/workflowsupdateworkflowaction.d.ts.map +1 -1
  107. package/dist/esm/models/operations/workflowsupdateworkflowaction.js +45 -0
  108. package/dist/esm/models/operations/workflowsupdateworkflowaction.js.map +1 -1
  109. package/dist/esm/models/security.d.ts +2 -2
  110. package/dist/esm/models/security.d.ts.map +1 -1
  111. package/dist/esm/models/security.js +1 -1
  112. package/dist/esm/models/security.js.map +1 -1
  113. package/dist/esm/models/v3authaccesstokendata.d.ts +32 -0
  114. package/dist/esm/models/v3authaccesstokendata.d.ts.map +1 -0
  115. package/dist/esm/models/v3authaccesstokendata.js +25 -0
  116. package/dist/esm/models/v3authaccesstokendata.js.map +1 -0
  117. package/dist/esm/sdk/auth.d.ts +14 -0
  118. package/dist/esm/sdk/auth.d.ts.map +1 -0
  119. package/dist/esm/sdk/auth.js +20 -0
  120. package/dist/esm/sdk/auth.js.map +1 -0
  121. package/dist/esm/sdk/sdk.d.ts +3 -0
  122. package/dist/esm/sdk/sdk.d.ts.map +1 -1
  123. package/dist/esm/sdk/sdk.js +4 -0
  124. package/dist/esm/sdk/sdk.js.map +1 -1
  125. package/dist/esm/sdk/workflows.d.ts +1 -1
  126. package/dist/esm/sdk/workflows.d.ts.map +1 -1
  127. package/examples/authAuthGetAccessToken.example.ts +26 -0
  128. package/jsr.json +1 -1
  129. package/package.json +5 -5
  130. package/src/funcs/authAuthGetAccessToken.ts +229 -0
  131. package/src/funcs/escalationPoliciesUpdate.ts +7 -1
  132. package/src/funcs/workflowsUpdateAction.ts +4 -5
  133. package/src/lib/config.ts +8 -4
  134. package/src/lib/matchers.ts +3 -2
  135. package/src/lib/security.ts +1 -2
  136. package/src/models/errors/authgetaccesstoken.ts +751 -0
  137. package/src/models/errors/index.ts +1 -1
  138. package/src/models/index.ts +1 -0
  139. package/src/models/operations/authgetaccesstoken.ts +83 -0
  140. package/src/models/operations/index.ts +1 -0
  141. package/src/models/operations/workflowsupdateworkflowaction.ts +122 -0
  142. package/src/models/security.ts +3 -3
  143. package/src/models/v3authaccesstokendata.ts +65 -0
  144. package/src/sdk/auth.ts +29 -0
  145. package/src/sdk/sdk.ts +6 -0
  146. package/src/sdk/workflows.ts +1 -1
  147. package/examples/package-lock.json +0 -611
  148. package/examples/package.json +0 -18
  149. package/tsconfig.json +0 -40
@@ -0,0 +1,229 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import { SquadcastSDKCore } from "../core.js";
6
+ import { encodeSimple } from "../lib/encodings.js";
7
+ import * as M from "../lib/matchers.js";
8
+ import { compactMap } from "../lib/primitives.js";
9
+ import { safeParse } from "../lib/schemas.js";
10
+ import { RequestOptions } from "../lib/sdks.js";
11
+ import { pathToFunc } from "../lib/url.js";
12
+ import {
13
+ ConnectionError,
14
+ InvalidRequestError,
15
+ RequestAbortedError,
16
+ RequestTimeoutError,
17
+ UnexpectedClientError,
18
+ } from "../models/errors/httpclienterrors.js";
19
+ import * as errors from "../models/errors/index.js";
20
+ import { ResponseValidationError } from "../models/errors/responsevalidationerror.js";
21
+ import { SDKValidationError } from "../models/errors/sdkvalidationerror.js";
22
+ import { SquadcastSDKError } from "../models/errors/squadcastsdkerror.js";
23
+ import { AuthGetAccessTokenServerList } from "../models/operations/authgetaccesstoken.js";
24
+ import * as operations from "../models/operations/index.js";
25
+ import { APICall, APIPromise } from "../types/async.js";
26
+ import { Result } from "../types/fp.js";
27
+
28
+ /**
29
+ * Get Access Token
30
+ *
31
+ * @remarks
32
+ * Get access token to make authenticated HTTP requests to the Squadcast API.
33
+ * Send your refresh token (obtained from the Squadcast web application) in the
34
+ * `X-Refresh-Token` header.
35
+ */
36
+ export function authAuthGetAccessToken(
37
+ client: SquadcastSDKCore,
38
+ request: operations.AuthGetAccessTokenRequest,
39
+ options?: RequestOptions,
40
+ ): APIPromise<
41
+ Result<
42
+ operations.AuthGetAccessTokenResponse,
43
+ | errors.BadRequestError
44
+ | errors.UnauthorizedError
45
+ | errors.PaymentRequiredError
46
+ | errors.ForbiddenError
47
+ | errors.NotFoundError
48
+ | errors.ConflictError
49
+ | errors.UnprocessableEntityError
50
+ | errors.InternalServerError
51
+ | errors.BadGatewayError
52
+ | errors.ServiceUnavailableError
53
+ | errors.GatewayTimeoutError
54
+ | SquadcastSDKError
55
+ | ResponseValidationError
56
+ | ConnectionError
57
+ | RequestAbortedError
58
+ | RequestTimeoutError
59
+ | InvalidRequestError
60
+ | UnexpectedClientError
61
+ | SDKValidationError
62
+ >
63
+ > {
64
+ return new APIPromise($do(
65
+ client,
66
+ request,
67
+ options,
68
+ ));
69
+ }
70
+
71
+ async function $do(
72
+ client: SquadcastSDKCore,
73
+ request: operations.AuthGetAccessTokenRequest,
74
+ options?: RequestOptions,
75
+ ): Promise<
76
+ [
77
+ Result<
78
+ operations.AuthGetAccessTokenResponse,
79
+ | errors.BadRequestError
80
+ | errors.UnauthorizedError
81
+ | errors.PaymentRequiredError
82
+ | errors.ForbiddenError
83
+ | errors.NotFoundError
84
+ | errors.ConflictError
85
+ | errors.UnprocessableEntityError
86
+ | errors.InternalServerError
87
+ | errors.BadGatewayError
88
+ | errors.ServiceUnavailableError
89
+ | errors.GatewayTimeoutError
90
+ | SquadcastSDKError
91
+ | ResponseValidationError
92
+ | ConnectionError
93
+ | RequestAbortedError
94
+ | RequestTimeoutError
95
+ | InvalidRequestError
96
+ | UnexpectedClientError
97
+ | SDKValidationError
98
+ >,
99
+ APICall,
100
+ ]
101
+ > {
102
+ const parsed = safeParse(
103
+ request,
104
+ (value) => operations.AuthGetAccessTokenRequest$outboundSchema.parse(value),
105
+ "Input validation failed",
106
+ );
107
+ if (!parsed.ok) {
108
+ return [parsed, { status: "invalid" }];
109
+ }
110
+ const payload = parsed.value;
111
+ const body = null;
112
+
113
+ const baseURL = options?.serverURL
114
+ || pathToFunc(AuthGetAccessTokenServerList[0], {
115
+ charEncoding: "percent",
116
+ })();
117
+
118
+ const path = pathToFunc("/oauth/access-token")();
119
+
120
+ const headers = new Headers(compactMap({
121
+ Accept: "application/json",
122
+ "X-Refresh-Token": encodeSimple(
123
+ "X-Refresh-Token",
124
+ payload["X-Refresh-Token"],
125
+ { explode: false, charEncoding: "none" },
126
+ ),
127
+ }));
128
+
129
+ const context = {
130
+ options: client._options,
131
+ baseURL: baseURL ?? "",
132
+ operationID: "Auth_getAccessToken",
133
+ oAuth2Scopes: null,
134
+
135
+ resolvedSecurity: null,
136
+
137
+ securitySource: null,
138
+ retryConfig: options?.retries
139
+ || client._options.retryConfig
140
+ || { strategy: "none" },
141
+ retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"],
142
+ };
143
+
144
+ const requestRes = client._createRequest(context, {
145
+ method: "GET",
146
+ baseURL: baseURL,
147
+ path: path,
148
+ headers: headers,
149
+ body: body,
150
+ userAgent: client._options.userAgent,
151
+ timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1,
152
+ }, options);
153
+ if (!requestRes.ok) {
154
+ return [requestRes, { status: "invalid" }];
155
+ }
156
+ const req = requestRes.value;
157
+
158
+ const doResult = await client._do(req, {
159
+ context,
160
+ errorCodes: [
161
+ "400",
162
+ "401",
163
+ "402",
164
+ "403",
165
+ "404",
166
+ "409",
167
+ "422",
168
+ "4XX",
169
+ "500",
170
+ "502",
171
+ "503",
172
+ "504",
173
+ "5XX",
174
+ ],
175
+ retryConfig: context.retryConfig,
176
+ retryCodes: context.retryCodes,
177
+ });
178
+ if (!doResult.ok) {
179
+ return [doResult, { status: "request-error", request: req }];
180
+ }
181
+ const response = doResult.value;
182
+
183
+ const responseFields = {
184
+ HttpMeta: { Response: response, Request: req },
185
+ };
186
+
187
+ const [result] = await M.match<
188
+ operations.AuthGetAccessTokenResponse,
189
+ | errors.BadRequestError
190
+ | errors.UnauthorizedError
191
+ | errors.PaymentRequiredError
192
+ | errors.ForbiddenError
193
+ | errors.NotFoundError
194
+ | errors.ConflictError
195
+ | errors.UnprocessableEntityError
196
+ | errors.InternalServerError
197
+ | errors.BadGatewayError
198
+ | errors.ServiceUnavailableError
199
+ | errors.GatewayTimeoutError
200
+ | SquadcastSDKError
201
+ | ResponseValidationError
202
+ | ConnectionError
203
+ | RequestAbortedError
204
+ | RequestTimeoutError
205
+ | InvalidRequestError
206
+ | UnexpectedClientError
207
+ | SDKValidationError
208
+ >(
209
+ M.json(200, operations.AuthGetAccessTokenResponse$inboundSchema),
210
+ M.jsonErr(400, errors.BadRequestError$inboundSchema),
211
+ M.jsonErr(401, errors.UnauthorizedError$inboundSchema),
212
+ M.jsonErr(402, errors.PaymentRequiredError$inboundSchema),
213
+ M.jsonErr(403, errors.ForbiddenError$inboundSchema),
214
+ M.jsonErr(404, errors.NotFoundError$inboundSchema),
215
+ M.jsonErr(409, errors.ConflictError$inboundSchema),
216
+ M.jsonErr(422, errors.UnprocessableEntityError$inboundSchema),
217
+ M.jsonErr(500, errors.InternalServerError$inboundSchema),
218
+ M.jsonErr(502, errors.BadGatewayError$inboundSchema),
219
+ M.jsonErr(503, errors.ServiceUnavailableError$inboundSchema),
220
+ M.jsonErr(504, errors.GatewayTimeoutError$inboundSchema),
221
+ M.fail("4XX"),
222
+ M.fail("5XX"),
223
+ )(response, req, { extraFields: responseFields });
224
+ if (!result.ok) {
225
+ return [result, { status: "complete", request: req, response }];
226
+ }
227
+
228
+ return [result, { status: "complete", request: req, response }];
229
+ }
@@ -109,7 +109,13 @@ async function $do(
109
109
  return [parsed, { status: "invalid" }];
110
110
  }
111
111
  const payload = parsed.value;
112
- const body = payload["V3.EscalationPolicies.UpdateEscalationPolicyRequest"];
112
+ const body =
113
+ payload["V3.EscalationPolicies.UpdateEscalationPolicyRequest"]
114
+ instanceof Uint8Array
115
+ ? new Uint8Array(
116
+ payload["V3.EscalationPolicies.UpdateEscalationPolicyRequest"],
117
+ ).buffer
118
+ : payload["V3.EscalationPolicies.UpdateEscalationPolicyRequest"];
113
119
 
114
120
  const pathParams = {
115
121
  escalationPolicyID: encodeSimple(
@@ -21,7 +21,6 @@ import * as errors from "../models/errors/index.js";
21
21
  import { ResponseValidationError } from "../models/errors/responsevalidationerror.js";
22
22
  import { SDKValidationError } from "../models/errors/sdkvalidationerror.js";
23
23
  import { SquadcastSDKError } from "../models/errors/squadcastsdkerror.js";
24
- import * as models from "../models/index.js";
25
24
  import * as operations from "../models/operations/index.js";
26
25
  import { APICall, APIPromise } from "../types/async.js";
27
26
  import { Result } from "../types/fp.js";
@@ -38,7 +37,7 @@ export function workflowsUpdateAction(
38
37
  options?: RequestOptions,
39
38
  ): APIPromise<
40
39
  Result<
41
- models.V3WorkflowsActionResponse,
40
+ operations.WorkflowsUpdateWorkflowActionResponse,
42
41
  | errors.BadRequestError
43
42
  | errors.UnauthorizedError
44
43
  | errors.PaymentRequiredError
@@ -74,7 +73,7 @@ async function $do(
74
73
  ): Promise<
75
74
  [
76
75
  Result<
77
- models.V3WorkflowsActionResponse,
76
+ operations.WorkflowsUpdateWorkflowActionResponse,
78
77
  | errors.BadRequestError
79
78
  | errors.UnauthorizedError
80
79
  | errors.PaymentRequiredError
@@ -198,7 +197,7 @@ async function $do(
198
197
  };
199
198
 
200
199
  const [result] = await M.match<
201
- models.V3WorkflowsActionResponse,
200
+ operations.WorkflowsUpdateWorkflowActionResponse,
202
201
  | errors.BadRequestError
203
202
  | errors.UnauthorizedError
204
203
  | errors.PaymentRequiredError
@@ -219,7 +218,7 @@ async function $do(
219
218
  | UnexpectedClientError
220
219
  | SDKValidationError
221
220
  >(
222
- M.json(200, models.V3WorkflowsActionResponse$inboundSchema),
221
+ M.json(200, operations.WorkflowsUpdateWorkflowActionResponse$inboundSchema),
223
222
  M.jsonErr(400, errors.BadRequestError$inboundSchema),
224
223
  M.jsonErr(401, errors.UnauthorizedError$inboundSchema),
225
224
  M.jsonErr(402, errors.PaymentRequiredError$inboundSchema),
package/src/lib/config.ts CHANGED
@@ -12,7 +12,11 @@ import { Params, pathToFunc } from "./url.js";
12
12
  */
13
13
  export const ServerList = [
14
14
  /**
15
- * production env
15
+ * production EU env
16
+ */
17
+ "https://api.eu.squadcast.com",
18
+ /**
19
+ * production US env
16
20
  */
17
21
  "https://api.squadcast.com",
18
22
  ] as const;
@@ -61,8 +65,8 @@ export function serverURLFromOptions(options: SDKOptions): URL | null {
61
65
  export const SDK_METADATA = {
62
66
  language: "typescript",
63
67
  openapiDocVersion: "1.0.0",
64
- sdkVersion: "1.1.0",
65
- genVersion: "2.801.2",
68
+ sdkVersion: "1.3.0",
69
+ genVersion: "2.865.2",
66
70
  userAgent:
67
- "speakeasy-sdk/typescript 1.1.0 2.801.2 1.0.0 @solarwinds/squadcast-sdk-typescript",
71
+ "speakeasy-sdk/typescript 1.3.0 2.865.2 1.0.0 @solarwinds/squadcast-sdk-typescript",
68
72
  } as const;
@@ -251,8 +251,9 @@ export function match<T, E>(
251
251
  raw = body;
252
252
  break;
253
253
  default:
254
- encoding satisfies never;
255
- throw new Error(`Unsupported response type: ${encoding}`);
254
+ throw new Error(
255
+ `Unsupported response type: ${encoding satisfies never}`,
256
+ );
256
257
  }
257
258
 
258
259
  if (matcher.enc === "fail") {
@@ -197,8 +197,7 @@ export function resolveSecurity(
197
197
  applyBearer(state, spec);
198
198
  break;
199
199
  default:
200
- spec satisfies never;
201
- throw SecurityError.unrecognizedType(type);
200
+ throw SecurityError.unrecognizedType((spec satisfies never, type));
202
201
  }
203
202
  });
204
203