replicas-engine 0.1.141 → 0.1.143

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.
@@ -0,0 +1,324 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ getProfileName,
4
+ getSSOTokenFilepath,
5
+ getSSOTokenFromFile,
6
+ loadSsoSessionData,
7
+ parseKnownFiles
8
+ } from "./chunk-JFXVYYQY.js";
9
+ import {
10
+ setCredentialFeature
11
+ } from "./chunk-N2BGF5AZ.js";
12
+ import {
13
+ CredentialsProviderError,
14
+ ProviderError
15
+ } from "./chunk-YDW6RZI2.js";
16
+
17
+ // ../node_modules/.bun/@smithy+property-provider@4.2.12/node_modules/@smithy/property-provider/dist-es/TokenProviderError.js
18
+ var TokenProviderError = class _TokenProviderError extends ProviderError {
19
+ name = "TokenProviderError";
20
+ constructor(message, options = true) {
21
+ super(message, options);
22
+ Object.setPrototypeOf(this, _TokenProviderError.prototype);
23
+ }
24
+ };
25
+
26
+ // ../node_modules/.bun/@aws-sdk+credential-provider-sso@3.972.28/node_modules/@aws-sdk/credential-provider-sso/dist-es/isSsoProfile.js
27
+ var isSsoProfile = (arg) => arg && (typeof arg.sso_start_url === "string" || typeof arg.sso_account_id === "string" || typeof arg.sso_session === "string" || typeof arg.sso_region === "string" || typeof arg.sso_role_name === "string");
28
+
29
+ // ../node_modules/.bun/@aws-sdk+token-providers@3.1021.0/node_modules/@aws-sdk/token-providers/dist-es/constants.js
30
+ var EXPIRE_WINDOW_MS = 5 * 60 * 1e3;
31
+ var REFRESH_MESSAGE = `To refresh this SSO session run 'aws sso login' with the corresponding profile.`;
32
+
33
+ // ../node_modules/.bun/@aws-sdk+token-providers@3.1021.0/node_modules/@aws-sdk/token-providers/dist-es/getSsoOidcClient.js
34
+ var getSsoOidcClient = async (ssoRegion, init = {}, callerClientConfig) => {
35
+ const { SSOOIDCClient } = await import("./sso-oidc-O55BGCVQ.js");
36
+ const coalesce = (prop) => init.clientConfig?.[prop] ?? init.parentClientConfig?.[prop] ?? callerClientConfig?.[prop];
37
+ const ssoOidcClient = new SSOOIDCClient(Object.assign({}, init.clientConfig ?? {}, {
38
+ region: ssoRegion ?? init.clientConfig?.region,
39
+ logger: coalesce("logger"),
40
+ userAgentAppId: coalesce("userAgentAppId")
41
+ }));
42
+ return ssoOidcClient;
43
+ };
44
+
45
+ // ../node_modules/.bun/@aws-sdk+token-providers@3.1021.0/node_modules/@aws-sdk/token-providers/dist-es/getNewSsoOidcToken.js
46
+ var getNewSsoOidcToken = async (ssoToken, ssoRegion, init = {}, callerClientConfig) => {
47
+ const { CreateTokenCommand } = await import("./sso-oidc-O55BGCVQ.js");
48
+ const ssoOidcClient = await getSsoOidcClient(ssoRegion, init, callerClientConfig);
49
+ return ssoOidcClient.send(new CreateTokenCommand({
50
+ clientId: ssoToken.clientId,
51
+ clientSecret: ssoToken.clientSecret,
52
+ refreshToken: ssoToken.refreshToken,
53
+ grantType: "refresh_token"
54
+ }));
55
+ };
56
+
57
+ // ../node_modules/.bun/@aws-sdk+token-providers@3.1021.0/node_modules/@aws-sdk/token-providers/dist-es/validateTokenExpiry.js
58
+ var validateTokenExpiry = (token) => {
59
+ if (token.expiration && token.expiration.getTime() < Date.now()) {
60
+ throw new TokenProviderError(`Token is expired. ${REFRESH_MESSAGE}`, false);
61
+ }
62
+ };
63
+
64
+ // ../node_modules/.bun/@aws-sdk+token-providers@3.1021.0/node_modules/@aws-sdk/token-providers/dist-es/validateTokenKey.js
65
+ var validateTokenKey = (key, value, forRefresh = false) => {
66
+ if (typeof value === "undefined") {
67
+ throw new TokenProviderError(`Value not present for '${key}' in SSO Token${forRefresh ? ". Cannot refresh" : ""}. ${REFRESH_MESSAGE}`, false);
68
+ }
69
+ };
70
+
71
+ // ../node_modules/.bun/@aws-sdk+token-providers@3.1021.0/node_modules/@aws-sdk/token-providers/dist-es/writeSSOTokenToFile.js
72
+ import { promises as fsPromises } from "fs";
73
+ var { writeFile } = fsPromises;
74
+ var writeSSOTokenToFile = (id, ssoToken) => {
75
+ const tokenFilepath = getSSOTokenFilepath(id);
76
+ const tokenString = JSON.stringify(ssoToken, null, 2);
77
+ return writeFile(tokenFilepath, tokenString);
78
+ };
79
+
80
+ // ../node_modules/.bun/@aws-sdk+token-providers@3.1021.0/node_modules/@aws-sdk/token-providers/dist-es/fromSso.js
81
+ var lastRefreshAttemptTime = /* @__PURE__ */ new Date(0);
82
+ var fromSso = (init = {}) => async ({ callerClientConfig } = {}) => {
83
+ init.logger?.debug("@aws-sdk/token-providers - fromSso");
84
+ const profiles = await parseKnownFiles(init);
85
+ const profileName = getProfileName({
86
+ profile: init.profile ?? callerClientConfig?.profile
87
+ });
88
+ const profile = profiles[profileName];
89
+ if (!profile) {
90
+ throw new TokenProviderError(`Profile '${profileName}' could not be found in shared credentials file.`, false);
91
+ } else if (!profile["sso_session"]) {
92
+ throw new TokenProviderError(`Profile '${profileName}' is missing required property 'sso_session'.`);
93
+ }
94
+ const ssoSessionName = profile["sso_session"];
95
+ const ssoSessions = await loadSsoSessionData(init);
96
+ const ssoSession = ssoSessions[ssoSessionName];
97
+ if (!ssoSession) {
98
+ throw new TokenProviderError(`Sso session '${ssoSessionName}' could not be found in shared credentials file.`, false);
99
+ }
100
+ for (const ssoSessionRequiredKey of ["sso_start_url", "sso_region"]) {
101
+ if (!ssoSession[ssoSessionRequiredKey]) {
102
+ throw new TokenProviderError(`Sso session '${ssoSessionName}' is missing required property '${ssoSessionRequiredKey}'.`, false);
103
+ }
104
+ }
105
+ const ssoStartUrl = ssoSession["sso_start_url"];
106
+ const ssoRegion = ssoSession["sso_region"];
107
+ let ssoToken;
108
+ try {
109
+ ssoToken = await getSSOTokenFromFile(ssoSessionName);
110
+ } catch (e) {
111
+ throw new TokenProviderError(`The SSO session token associated with profile=${profileName} was not found or is invalid. ${REFRESH_MESSAGE}`, false);
112
+ }
113
+ validateTokenKey("accessToken", ssoToken.accessToken);
114
+ validateTokenKey("expiresAt", ssoToken.expiresAt);
115
+ const { accessToken, expiresAt } = ssoToken;
116
+ const existingToken = { token: accessToken, expiration: new Date(expiresAt) };
117
+ if (existingToken.expiration.getTime() - Date.now() > EXPIRE_WINDOW_MS) {
118
+ return existingToken;
119
+ }
120
+ if (Date.now() - lastRefreshAttemptTime.getTime() < 30 * 1e3) {
121
+ validateTokenExpiry(existingToken);
122
+ return existingToken;
123
+ }
124
+ validateTokenKey("clientId", ssoToken.clientId, true);
125
+ validateTokenKey("clientSecret", ssoToken.clientSecret, true);
126
+ validateTokenKey("refreshToken", ssoToken.refreshToken, true);
127
+ try {
128
+ lastRefreshAttemptTime.setTime(Date.now());
129
+ const newSsoOidcToken = await getNewSsoOidcToken(ssoToken, ssoRegion, init, callerClientConfig);
130
+ validateTokenKey("accessToken", newSsoOidcToken.accessToken);
131
+ validateTokenKey("expiresIn", newSsoOidcToken.expiresIn);
132
+ const newTokenExpiration = new Date(Date.now() + newSsoOidcToken.expiresIn * 1e3);
133
+ try {
134
+ await writeSSOTokenToFile(ssoSessionName, {
135
+ ...ssoToken,
136
+ accessToken: newSsoOidcToken.accessToken,
137
+ expiresAt: newTokenExpiration.toISOString(),
138
+ refreshToken: newSsoOidcToken.refreshToken
139
+ });
140
+ } catch (error) {
141
+ }
142
+ return {
143
+ token: newSsoOidcToken.accessToken,
144
+ expiration: newTokenExpiration
145
+ };
146
+ } catch (error) {
147
+ validateTokenExpiry(existingToken);
148
+ return existingToken;
149
+ }
150
+ };
151
+
152
+ // ../node_modules/.bun/@aws-sdk+credential-provider-sso@3.972.28/node_modules/@aws-sdk/credential-provider-sso/dist-es/resolveSSOCredentials.js
153
+ var SHOULD_FAIL_CREDENTIAL_CHAIN = false;
154
+ var resolveSSOCredentials = async ({ ssoStartUrl, ssoSession, ssoAccountId, ssoRegion, ssoRoleName, ssoClient, clientConfig, parentClientConfig, callerClientConfig, profile, filepath, configFilepath, ignoreCache, logger }) => {
155
+ let token;
156
+ const refreshMessage = `To refresh this SSO session run aws sso login with the corresponding profile.`;
157
+ if (ssoSession) {
158
+ try {
159
+ const _token = await fromSso({
160
+ profile,
161
+ filepath,
162
+ configFilepath,
163
+ ignoreCache
164
+ })();
165
+ token = {
166
+ accessToken: _token.token,
167
+ expiresAt: new Date(_token.expiration).toISOString()
168
+ };
169
+ } catch (e) {
170
+ throw new CredentialsProviderError(e.message, {
171
+ tryNextLink: SHOULD_FAIL_CREDENTIAL_CHAIN,
172
+ logger
173
+ });
174
+ }
175
+ } else {
176
+ try {
177
+ token = await getSSOTokenFromFile(ssoStartUrl);
178
+ } catch (e) {
179
+ throw new CredentialsProviderError(`The SSO session associated with this profile is invalid. ${refreshMessage}`, {
180
+ tryNextLink: SHOULD_FAIL_CREDENTIAL_CHAIN,
181
+ logger
182
+ });
183
+ }
184
+ }
185
+ if (new Date(token.expiresAt).getTime() - Date.now() <= 0) {
186
+ throw new CredentialsProviderError(`The SSO session associated with this profile has expired. ${refreshMessage}`, {
187
+ tryNextLink: SHOULD_FAIL_CREDENTIAL_CHAIN,
188
+ logger
189
+ });
190
+ }
191
+ const { accessToken } = token;
192
+ const { SSOClient, GetRoleCredentialsCommand } = await import("./loadSso-ZRFAKENS.js");
193
+ const sso = ssoClient || new SSOClient(Object.assign({}, clientConfig ?? {}, {
194
+ logger: clientConfig?.logger ?? callerClientConfig?.logger ?? parentClientConfig?.logger,
195
+ region: clientConfig?.region ?? ssoRegion,
196
+ userAgentAppId: clientConfig?.userAgentAppId ?? callerClientConfig?.userAgentAppId ?? parentClientConfig?.userAgentAppId
197
+ }));
198
+ let ssoResp;
199
+ try {
200
+ ssoResp = await sso.send(new GetRoleCredentialsCommand({
201
+ accountId: ssoAccountId,
202
+ roleName: ssoRoleName,
203
+ accessToken
204
+ }));
205
+ } catch (e) {
206
+ throw new CredentialsProviderError(e, {
207
+ tryNextLink: SHOULD_FAIL_CREDENTIAL_CHAIN,
208
+ logger
209
+ });
210
+ }
211
+ const { roleCredentials: { accessKeyId, secretAccessKey, sessionToken, expiration, credentialScope, accountId } = {} } = ssoResp;
212
+ if (!accessKeyId || !secretAccessKey || !sessionToken || !expiration) {
213
+ throw new CredentialsProviderError("SSO returns an invalid temporary credential.", {
214
+ tryNextLink: SHOULD_FAIL_CREDENTIAL_CHAIN,
215
+ logger
216
+ });
217
+ }
218
+ const credentials = {
219
+ accessKeyId,
220
+ secretAccessKey,
221
+ sessionToken,
222
+ expiration: new Date(expiration),
223
+ ...credentialScope && { credentialScope },
224
+ ...accountId && { accountId }
225
+ };
226
+ if (ssoSession) {
227
+ setCredentialFeature(credentials, "CREDENTIALS_SSO", "s");
228
+ } else {
229
+ setCredentialFeature(credentials, "CREDENTIALS_SSO_LEGACY", "u");
230
+ }
231
+ return credentials;
232
+ };
233
+
234
+ // ../node_modules/.bun/@aws-sdk+credential-provider-sso@3.972.28/node_modules/@aws-sdk/credential-provider-sso/dist-es/validateSsoProfile.js
235
+ var validateSsoProfile = (profile, logger) => {
236
+ const { sso_start_url, sso_account_id, sso_region, sso_role_name } = profile;
237
+ if (!sso_start_url || !sso_account_id || !sso_region || !sso_role_name) {
238
+ throw new CredentialsProviderError(`Profile is configured with invalid SSO credentials. Required parameters "sso_account_id", "sso_region", "sso_role_name", "sso_start_url". Got ${Object.keys(profile).join(", ")}
239
+ Reference: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html`, { tryNextLink: false, logger });
240
+ }
241
+ return profile;
242
+ };
243
+
244
+ // ../node_modules/.bun/@aws-sdk+credential-provider-sso@3.972.28/node_modules/@aws-sdk/credential-provider-sso/dist-es/fromSSO.js
245
+ var fromSSO = (init = {}) => async ({ callerClientConfig } = {}) => {
246
+ init.logger?.debug("@aws-sdk/credential-provider-sso - fromSSO");
247
+ const { ssoStartUrl, ssoAccountId, ssoRegion, ssoRoleName, ssoSession } = init;
248
+ const { ssoClient } = init;
249
+ const profileName = getProfileName({
250
+ profile: init.profile ?? callerClientConfig?.profile
251
+ });
252
+ if (!ssoStartUrl && !ssoAccountId && !ssoRegion && !ssoRoleName && !ssoSession) {
253
+ const profiles = await parseKnownFiles(init);
254
+ const profile = profiles[profileName];
255
+ if (!profile) {
256
+ throw new CredentialsProviderError(`Profile ${profileName} was not found.`, { logger: init.logger });
257
+ }
258
+ if (!isSsoProfile(profile)) {
259
+ throw new CredentialsProviderError(`Profile ${profileName} is not configured with SSO credentials.`, {
260
+ logger: init.logger
261
+ });
262
+ }
263
+ if (profile?.sso_session) {
264
+ const ssoSessions = await loadSsoSessionData(init);
265
+ const session = ssoSessions[profile.sso_session];
266
+ const conflictMsg = ` configurations in profile ${profileName} and sso-session ${profile.sso_session}`;
267
+ if (ssoRegion && ssoRegion !== session.sso_region) {
268
+ throw new CredentialsProviderError(`Conflicting SSO region` + conflictMsg, {
269
+ tryNextLink: false,
270
+ logger: init.logger
271
+ });
272
+ }
273
+ if (ssoStartUrl && ssoStartUrl !== session.sso_start_url) {
274
+ throw new CredentialsProviderError(`Conflicting SSO start_url` + conflictMsg, {
275
+ tryNextLink: false,
276
+ logger: init.logger
277
+ });
278
+ }
279
+ profile.sso_region = session.sso_region;
280
+ profile.sso_start_url = session.sso_start_url;
281
+ }
282
+ const { sso_start_url, sso_account_id, sso_region, sso_role_name, sso_session } = validateSsoProfile(profile, init.logger);
283
+ return resolveSSOCredentials({
284
+ ssoStartUrl: sso_start_url,
285
+ ssoSession: sso_session,
286
+ ssoAccountId: sso_account_id,
287
+ ssoRegion: sso_region,
288
+ ssoRoleName: sso_role_name,
289
+ ssoClient,
290
+ clientConfig: init.clientConfig,
291
+ parentClientConfig: init.parentClientConfig,
292
+ callerClientConfig: init.callerClientConfig,
293
+ profile: profileName,
294
+ filepath: init.filepath,
295
+ configFilepath: init.configFilepath,
296
+ ignoreCache: init.ignoreCache,
297
+ logger: init.logger
298
+ });
299
+ } else if (!ssoStartUrl || !ssoAccountId || !ssoRegion || !ssoRoleName) {
300
+ throw new CredentialsProviderError('Incomplete configuration. The fromSSO() argument hash must include "ssoStartUrl", "ssoAccountId", "ssoRegion", "ssoRoleName"', { tryNextLink: false, logger: init.logger });
301
+ } else {
302
+ return resolveSSOCredentials({
303
+ ssoStartUrl,
304
+ ssoSession,
305
+ ssoAccountId,
306
+ ssoRegion,
307
+ ssoRoleName,
308
+ ssoClient,
309
+ clientConfig: init.clientConfig,
310
+ parentClientConfig: init.parentClientConfig,
311
+ callerClientConfig: init.callerClientConfig,
312
+ profile: profileName,
313
+ filepath: init.filepath,
314
+ configFilepath: init.configFilepath,
315
+ ignoreCache: init.ignoreCache,
316
+ logger: init.logger
317
+ });
318
+ }
319
+ };
320
+ export {
321
+ fromSSO,
322
+ isSsoProfile,
323
+ validateSsoProfile
324
+ };
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ externalDataInterceptor
4
+ } from "./chunk-JFXVYYQY.js";
5
+ import {
6
+ setCredentialFeature
7
+ } from "./chunk-N2BGF5AZ.js";
8
+ import {
9
+ CredentialsProviderError
10
+ } from "./chunk-YDW6RZI2.js";
11
+
12
+ // ../node_modules/.bun/@aws-sdk+credential-provider-web-identity@3.972.28/node_modules/@aws-sdk/credential-provider-web-identity/dist-es/fromTokenFile.js
13
+ import { readFileSync } from "fs";
14
+
15
+ // ../node_modules/.bun/@aws-sdk+credential-provider-web-identity@3.972.28/node_modules/@aws-sdk/credential-provider-web-identity/dist-es/fromWebToken.js
16
+ var fromWebToken = (init) => async (awsIdentityProperties) => {
17
+ init.logger?.debug("@aws-sdk/credential-provider-web-identity - fromWebToken");
18
+ const { roleArn, roleSessionName, webIdentityToken, providerId, policyArns, policy, durationSeconds } = init;
19
+ let { roleAssumerWithWebIdentity } = init;
20
+ if (!roleAssumerWithWebIdentity) {
21
+ const { getDefaultRoleAssumerWithWebIdentity } = await import("./sts-MRC7OH6Z.js");
22
+ roleAssumerWithWebIdentity = getDefaultRoleAssumerWithWebIdentity({
23
+ ...init.clientConfig,
24
+ credentialProviderLogger: init.logger,
25
+ parentClientConfig: {
26
+ ...awsIdentityProperties?.callerClientConfig,
27
+ ...init.parentClientConfig
28
+ }
29
+ }, init.clientPlugins);
30
+ }
31
+ return roleAssumerWithWebIdentity({
32
+ RoleArn: roleArn,
33
+ RoleSessionName: roleSessionName ?? `aws-sdk-js-session-${Date.now()}`,
34
+ WebIdentityToken: webIdentityToken,
35
+ ProviderId: providerId,
36
+ PolicyArns: policyArns,
37
+ Policy: policy,
38
+ DurationSeconds: durationSeconds
39
+ });
40
+ };
41
+
42
+ // ../node_modules/.bun/@aws-sdk+credential-provider-web-identity@3.972.28/node_modules/@aws-sdk/credential-provider-web-identity/dist-es/fromTokenFile.js
43
+ var ENV_TOKEN_FILE = "AWS_WEB_IDENTITY_TOKEN_FILE";
44
+ var ENV_ROLE_ARN = "AWS_ROLE_ARN";
45
+ var ENV_ROLE_SESSION_NAME = "AWS_ROLE_SESSION_NAME";
46
+ var fromTokenFile = (init = {}) => async (awsIdentityProperties) => {
47
+ init.logger?.debug("@aws-sdk/credential-provider-web-identity - fromTokenFile");
48
+ const webIdentityTokenFile = init?.webIdentityTokenFile ?? process.env[ENV_TOKEN_FILE];
49
+ const roleArn = init?.roleArn ?? process.env[ENV_ROLE_ARN];
50
+ const roleSessionName = init?.roleSessionName ?? process.env[ENV_ROLE_SESSION_NAME];
51
+ if (!webIdentityTokenFile || !roleArn) {
52
+ throw new CredentialsProviderError("Web identity configuration not specified", {
53
+ logger: init.logger
54
+ });
55
+ }
56
+ const credentials = await fromWebToken({
57
+ ...init,
58
+ webIdentityToken: externalDataInterceptor?.getTokenRecord?.()[webIdentityTokenFile] ?? readFileSync(webIdentityTokenFile, { encoding: "ascii" }),
59
+ roleArn,
60
+ roleSessionName
61
+ })(awsIdentityProperties);
62
+ if (webIdentityTokenFile === process.env[ENV_TOKEN_FILE]) {
63
+ setCredentialFeature(credentials, "CREDENTIALS_ENV_VARS_STS_WEB_ID_TOKEN", "h");
64
+ }
65
+ return credentials;
66
+ };
67
+ export {
68
+ fromTokenFile,
69
+ fromWebToken
70
+ };
@@ -0,0 +1,244 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ fromUtf8,
4
+ toUtf8
5
+ } from "./chunk-ERL3EC7G.js";
6
+
7
+ // ../node_modules/.bun/@smithy+core@3.23.13/node_modules/@smithy/core/dist-es/submodules/event-streams/EventStreamSerde.js
8
+ var EventStreamSerde = class {
9
+ marshaller;
10
+ serializer;
11
+ deserializer;
12
+ serdeContext;
13
+ defaultContentType;
14
+ constructor({ marshaller, serializer, deserializer, serdeContext, defaultContentType }) {
15
+ this.marshaller = marshaller;
16
+ this.serializer = serializer;
17
+ this.deserializer = deserializer;
18
+ this.serdeContext = serdeContext;
19
+ this.defaultContentType = defaultContentType;
20
+ }
21
+ async serializeEventStream({ eventStream, requestSchema, initialRequest }) {
22
+ const marshaller = this.marshaller;
23
+ const eventStreamMember = requestSchema.getEventStreamMember();
24
+ const unionSchema = requestSchema.getMemberSchema(eventStreamMember);
25
+ const serializer = this.serializer;
26
+ const defaultContentType = this.defaultContentType;
27
+ const initialRequestMarker = /* @__PURE__ */ Symbol("initialRequestMarker");
28
+ const eventStreamIterable = {
29
+ async *[Symbol.asyncIterator]() {
30
+ if (initialRequest) {
31
+ const headers = {
32
+ ":event-type": { type: "string", value: "initial-request" },
33
+ ":message-type": { type: "string", value: "event" },
34
+ ":content-type": { type: "string", value: defaultContentType }
35
+ };
36
+ serializer.write(requestSchema, initialRequest);
37
+ const body = serializer.flush();
38
+ yield {
39
+ [initialRequestMarker]: true,
40
+ headers,
41
+ body
42
+ };
43
+ }
44
+ for await (const page of eventStream) {
45
+ yield page;
46
+ }
47
+ }
48
+ };
49
+ return marshaller.serialize(eventStreamIterable, (event) => {
50
+ if (event[initialRequestMarker]) {
51
+ return {
52
+ headers: event.headers,
53
+ body: event.body
54
+ };
55
+ }
56
+ const unionMember = Object.keys(event).find((key) => {
57
+ return key !== "__type";
58
+ }) ?? "";
59
+ const { additionalHeaders, body, eventType, explicitPayloadContentType } = this.writeEventBody(unionMember, unionSchema, event);
60
+ const headers = {
61
+ ":event-type": { type: "string", value: eventType },
62
+ ":message-type": { type: "string", value: "event" },
63
+ ":content-type": { type: "string", value: explicitPayloadContentType ?? defaultContentType },
64
+ ...additionalHeaders
65
+ };
66
+ return {
67
+ headers,
68
+ body
69
+ };
70
+ });
71
+ }
72
+ async deserializeEventStream({ response, responseSchema, initialResponseContainer }) {
73
+ const marshaller = this.marshaller;
74
+ const eventStreamMember = responseSchema.getEventStreamMember();
75
+ const unionSchema = responseSchema.getMemberSchema(eventStreamMember);
76
+ const memberSchemas = unionSchema.getMemberSchemas();
77
+ const initialResponseMarker = /* @__PURE__ */ Symbol("initialResponseMarker");
78
+ const asyncIterable = marshaller.deserialize(response.body, async (event) => {
79
+ const unionMember = Object.keys(event).find((key) => {
80
+ return key !== "__type";
81
+ }) ?? "";
82
+ const body = event[unionMember].body;
83
+ if (unionMember === "initial-response") {
84
+ const dataObject = await this.deserializer.read(responseSchema, body);
85
+ delete dataObject[eventStreamMember];
86
+ return {
87
+ [initialResponseMarker]: true,
88
+ ...dataObject
89
+ };
90
+ } else if (unionMember in memberSchemas) {
91
+ const eventStreamSchema = memberSchemas[unionMember];
92
+ if (eventStreamSchema.isStructSchema()) {
93
+ const out = {};
94
+ let hasBindings = false;
95
+ for (const [name, member] of eventStreamSchema.structIterator()) {
96
+ const { eventHeader, eventPayload } = member.getMergedTraits();
97
+ hasBindings = hasBindings || Boolean(eventHeader || eventPayload);
98
+ if (eventPayload) {
99
+ if (member.isBlobSchema()) {
100
+ out[name] = body;
101
+ } else if (member.isStringSchema()) {
102
+ out[name] = (this.serdeContext?.utf8Encoder ?? toUtf8)(body);
103
+ } else if (member.isStructSchema()) {
104
+ out[name] = await this.deserializer.read(member, body);
105
+ }
106
+ } else if (eventHeader) {
107
+ const value = event[unionMember].headers[name]?.value;
108
+ if (value != null) {
109
+ if (member.isNumericSchema()) {
110
+ if (value && typeof value === "object" && "bytes" in value) {
111
+ out[name] = BigInt(value.toString());
112
+ } else {
113
+ out[name] = Number(value);
114
+ }
115
+ } else {
116
+ out[name] = value;
117
+ }
118
+ }
119
+ }
120
+ }
121
+ if (hasBindings) {
122
+ return {
123
+ [unionMember]: out
124
+ };
125
+ }
126
+ if (body.byteLength === 0) {
127
+ return {
128
+ [unionMember]: {}
129
+ };
130
+ }
131
+ }
132
+ return {
133
+ [unionMember]: await this.deserializer.read(eventStreamSchema, body)
134
+ };
135
+ } else {
136
+ return {
137
+ $unknown: event
138
+ };
139
+ }
140
+ });
141
+ const asyncIterator = asyncIterable[Symbol.asyncIterator]();
142
+ const firstEvent = await asyncIterator.next();
143
+ if (firstEvent.done) {
144
+ return asyncIterable;
145
+ }
146
+ if (firstEvent.value?.[initialResponseMarker]) {
147
+ if (!responseSchema) {
148
+ throw new Error("@smithy::core/protocols - initial-response event encountered in event stream but no response schema given.");
149
+ }
150
+ for (const [key, value] of Object.entries(firstEvent.value)) {
151
+ initialResponseContainer[key] = value;
152
+ }
153
+ }
154
+ return {
155
+ async *[Symbol.asyncIterator]() {
156
+ if (!firstEvent?.value?.[initialResponseMarker]) {
157
+ yield firstEvent.value;
158
+ }
159
+ while (true) {
160
+ const { done, value } = await asyncIterator.next();
161
+ if (done) {
162
+ break;
163
+ }
164
+ yield value;
165
+ }
166
+ }
167
+ };
168
+ }
169
+ writeEventBody(unionMember, unionSchema, event) {
170
+ const serializer = this.serializer;
171
+ let eventType = unionMember;
172
+ let explicitPayloadMember = null;
173
+ let explicitPayloadContentType;
174
+ const isKnownSchema = (() => {
175
+ const struct = unionSchema.getSchema();
176
+ return struct[4].includes(unionMember);
177
+ })();
178
+ const additionalHeaders = {};
179
+ if (!isKnownSchema) {
180
+ const [type, value] = event[unionMember];
181
+ eventType = type;
182
+ serializer.write(15, value);
183
+ } else {
184
+ const eventSchema = unionSchema.getMemberSchema(unionMember);
185
+ if (eventSchema.isStructSchema()) {
186
+ for (const [memberName, memberSchema] of eventSchema.structIterator()) {
187
+ const { eventHeader, eventPayload } = memberSchema.getMergedTraits();
188
+ if (eventPayload) {
189
+ explicitPayloadMember = memberName;
190
+ } else if (eventHeader) {
191
+ const value = event[unionMember][memberName];
192
+ let type = "binary";
193
+ if (memberSchema.isNumericSchema()) {
194
+ if ((-2) ** 31 <= value && value <= 2 ** 31 - 1) {
195
+ type = "integer";
196
+ } else {
197
+ type = "long";
198
+ }
199
+ } else if (memberSchema.isTimestampSchema()) {
200
+ type = "timestamp";
201
+ } else if (memberSchema.isStringSchema()) {
202
+ type = "string";
203
+ } else if (memberSchema.isBooleanSchema()) {
204
+ type = "boolean";
205
+ }
206
+ if (value != null) {
207
+ additionalHeaders[memberName] = {
208
+ type,
209
+ value
210
+ };
211
+ delete event[unionMember][memberName];
212
+ }
213
+ }
214
+ }
215
+ if (explicitPayloadMember !== null) {
216
+ const payloadSchema = eventSchema.getMemberSchema(explicitPayloadMember);
217
+ if (payloadSchema.isBlobSchema()) {
218
+ explicitPayloadContentType = "application/octet-stream";
219
+ } else if (payloadSchema.isStringSchema()) {
220
+ explicitPayloadContentType = "text/plain";
221
+ }
222
+ serializer.write(payloadSchema, event[unionMember][explicitPayloadMember]);
223
+ } else {
224
+ serializer.write(eventSchema, event[unionMember]);
225
+ }
226
+ } else if (eventSchema.isUnitSchema()) {
227
+ serializer.write(eventSchema, {});
228
+ } else {
229
+ throw new Error("@smithy/core/event-streams - non-struct member not supported in event stream union.");
230
+ }
231
+ }
232
+ const messageSerialization = serializer.flush() ?? new Uint8Array();
233
+ const body = typeof messageSerialization === "string" ? (this.serdeContext?.utf8Decoder ?? fromUtf8)(messageSerialization) : messageSerialization;
234
+ return {
235
+ body,
236
+ eventType,
237
+ explicitPayloadContentType,
238
+ additionalHeaders
239
+ };
240
+ }
241
+ };
242
+ export {
243
+ EventStreamSerde
244
+ };