@datastream/aws
Advanced tools
+11
-20
| import { createWritableStream, timeout } from "@datastream/core"; | ||
| import { DynamoDBClient } from "@aws-sdk/client-dynamodb"; | ||
| import { | ||
| BatchGetCommand, | ||
| BatchWriteCommand, | ||
| DynamoDBClient, | ||
| BatchGetItemCommand, | ||
| BatchWriteItemCommand, | ||
| QueryCommand, | ||
| ScanCommand, | ||
| DynamoDBDocumentClient | ||
| } from "@aws-sdk/lib-dynamodb"; | ||
| ScanCommand | ||
| } from "@aws-sdk/client-dynamodb"; | ||
| const awsClientDefaults = { | ||
@@ -21,12 +20,5 @@ // https://aws.amazon.com/compliance/fips/ | ||
| let client = new DynamoDBClient(awsClientDefaults); | ||
| let dynamodbDocument; | ||
| const awsDynamoDBSetClient = (ddbClient, translateConfig) => { | ||
| client = ddbClient; | ||
| awsDynamoDBDocumentSetClient( | ||
| DynamoDBDocumentClient.from(client, translateConfig) | ||
| ); | ||
| }; | ||
| const awsDynamoDBDocumentSetClient = (ddbdocClient) => { | ||
| dynamodbDocument = ddbdocClient; | ||
| }; | ||
| awsDynamoDBSetClient(client); | ||
@@ -37,3 +29,3 @@ const awsDynamoDBQueryStream = async (options, streamOptions) => { | ||
| while (expectMore) { | ||
| const response = await dynamodbDocument.send(new QueryCommand(options2)); | ||
| const response = await client.send(new QueryCommand(options2)); | ||
| for (const item of response.Items) { | ||
@@ -52,3 +44,3 @@ yield item; | ||
| while (expectMore) { | ||
| const response = await dynamodbDocument.send(new ScanCommand(options2)); | ||
| const response = await client.send(new ScanCommand(options2)); | ||
| for (const item of response.Items) { | ||
@@ -68,4 +60,4 @@ yield item; | ||
| while (true) { | ||
| const response = await dynamodbDocument.send( | ||
| new BatchGetCommand({ | ||
| const response = await client.send( | ||
| new BatchGetItemCommand({ | ||
| RequestItems: { | ||
@@ -132,4 +124,4 @@ [options2.TableName]: { Keys: options2.Keys } | ||
| options.retryMaxCount ??= 10; | ||
| const { UnprocessedItems } = await dynamodbDocument.send( | ||
| new BatchWriteCommand({ | ||
| const { UnprocessedItems } = await client.send( | ||
| new BatchWriteItemCommand({ | ||
| RequestItems: { | ||
@@ -168,3 +160,2 @@ [options.TableName]: batch | ||
| awsDynamoDBDeleteItemStream, | ||
| awsDynamoDBDocumentSetClient, | ||
| awsDynamoDBGetItemStream, | ||
@@ -171,0 +162,0 @@ awsDynamoDBPutItemStream, |
| { | ||
| "version": 3, | ||
| "sources": ["dynamodb.js"], | ||
| "sourcesContent": ["import { createWritableStream, timeout } from '@datastream/core'\nimport { DynamoDBClient } from '@aws-sdk/client-dynamodb'\n\nimport {\n BatchGetCommand,\n BatchWriteCommand,\n QueryCommand,\n ScanCommand,\n DynamoDBDocumentClient\n} from '@aws-sdk/lib-dynamodb'\n\nconst awsClientDefaults = {\n // https://aws.amazon.com/compliance/fips/\n useFipsEndpoint: [\n 'us-east-1',\n 'us-east-2',\n 'us-west-1',\n 'us-west-2',\n 'ca-central-1'\n ].includes(process.env.AWS_REGION)\n}\n\nlet client = new DynamoDBClient(awsClientDefaults)\nlet dynamodbDocument\nexport const awsDynamoDBSetClient = (ddbClient, translateConfig) => {\n client = ddbClient\n awsDynamoDBDocumentSetClient(\n DynamoDBDocumentClient.from(client, translateConfig)\n )\n}\nexport const awsDynamoDBDocumentSetClient = (ddbdocClient) => {\n dynamodbDocument = ddbdocClient\n}\nawsDynamoDBSetClient(client)\n\n// Docs: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html\n\n// options = {TableName, ...}\n\nexport const awsDynamoDBQueryStream = async (options, streamOptions) => {\n async function * command (options) {\n let expectMore = true\n while (expectMore) {\n const response = await dynamodbDocument.send(new QueryCommand(options))\n for (const item of response.Items) {\n yield item\n }\n options.ExclusiveStartKey = response.LastEvaluatedKey\n expectMore = Object.keys(options.ExclusiveStartKey).length\n }\n }\n return command(options)\n}\n\nexport const awsDynamoDBScanStream = async (options, streamOptions) => {\n async function * command (options) {\n let expectMore = true\n while (expectMore) {\n const response = await dynamodbDocument.send(new ScanCommand(options))\n for (const item of response.Items) {\n yield item\n }\n options.ExclusiveStartKey = response.LastEvaluatedKey\n expectMore = Object.keys(options.ExclusiveStartKey).length\n }\n }\n return command(options)\n}\n\n// TODO awsDynamoDBExecuteStatementStream\n\n// TODO max Keys.length = 100\nexport const awsDynamoDBGetItemStream = async (options, streamOptions) => {\n options.retryCount ??= 0\n options.retryMaxCount ??= 10\n async function * command (options) {\n while (true) {\n const response = await dynamodbDocument.send(\n new BatchGetCommand({\n RequestItems: {\n [options.TableName]: { Keys: options.Keys }\n }\n })\n )\n for (const item of response.Responses[options.TableName]) {\n yield item\n }\n const UnprocessedKeys =\n response?.UnprocessedKeys?.[options.TableName]?.Keys ?? []\n if (!UnprocessedKeys.length) {\n break\n }\n\n if (options.retryCount >= options.retryMaxCount) {\n throw new Error('awsDynamoDBBatchGetItem has UnprocessedKeys', {\n cause: {\n ...options,\n UnprocessedKeysCount: UnprocessedKeys.length\n }\n })\n }\n\n await timeout(3 ** options.retryCount++) // 3^10 == 59sec\n\n options.Keys = UnprocessedKeys\n }\n }\n return command(options)\n}\n\nexport const awsDynamoDBPutItemStream = (options, streamOptions) => {\n let batch = []\n const write = async (chunk) => {\n if (batch.length === 25) {\n await dynamodbBatchWrite(options, batch, streamOptions)\n batch = []\n }\n batch.push({\n PutRequest: {\n Item: chunk\n }\n })\n }\n const final = () => dynamodbBatchWrite(options, batch, streamOptions)\n return createWritableStream(write, final, streamOptions)\n}\n\nexport const awsDynamoDBDeleteItemStream = (options, streamOptions) => {\n let batch = []\n const write = async (chunk) => {\n if (batch.length === 25) {\n await dynamodbBatchWrite(options, batch, streamOptions)\n batch = []\n }\n batch.push({\n DeleteRequest: {\n Key: chunk\n }\n })\n }\n const final = () => dynamodbBatchWrite(options, batch, streamOptions)\n return createWritableStream(write, final, streamOptions)\n}\n\nconst dynamodbBatchWrite = async (options, batch, streamOptions) => {\n options.retryCount ??= 0\n options.retryMaxCount ??= 10\n const { UnprocessedItems } = await dynamodbDocument.send(\n new BatchWriteCommand({\n RequestItems: {\n [options.TableName]: batch\n }\n })\n )\n if (UnprocessedItems?.[options.TableName]?.length) {\n if (options.retryCount >= options.retryMaxCount) {\n throw new Error('awsDynamoDBBatchWriteItem has UnprocessedItems', {\n cause: {\n ...options,\n UnprocessedItemsCount: UnprocessedItems[options.TableName].length\n }\n })\n }\n\n await timeout(3 ** options.retryCount++) // 3^10 == 59sec\n return dynamodbBatchWrite(\n options,\n UnprocessedItems[options.TableName],\n streamOptions\n )\n }\n options.retryCount = 0 // reset for next batch\n}\n\nexport default {\n setClient: awsDynamoDBSetClient,\n queryStream: awsDynamoDBQueryStream,\n scanStream: awsDynamoDBScanStream,\n getItemStream: awsDynamoDBGetItemStream,\n putItemStream: awsDynamoDBPutItemStream,\n deleteItemStream: awsDynamoDBDeleteItemStream\n}\n"], | ||
| "mappings": "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", | ||
| "sourcesContent": ["import { createWritableStream, timeout } from '@datastream/core'\nimport {\n DynamoDBClient,\n BatchGetItemCommand,\n BatchWriteItemCommand,\n QueryCommand,\n ScanCommand\n} from '@aws-sdk/client-dynamodb'\n\nconst awsClientDefaults = {\n // https://aws.amazon.com/compliance/fips/\n useFipsEndpoint: [\n 'us-east-1',\n 'us-east-2',\n 'us-west-1',\n 'us-west-2',\n 'ca-central-1'\n ].includes(process.env.AWS_REGION)\n}\n\nlet client = new DynamoDBClient(awsClientDefaults)\nexport const awsDynamoDBSetClient = (ddbClient, translateConfig) => {\n client = ddbClient\n}\nawsDynamoDBSetClient(client)\n\n// options = {TableName, ...}\n\nexport const awsDynamoDBQueryStream = async (options, streamOptions) => {\n async function * command (options) {\n let expectMore = true\n while (expectMore) {\n const response = await client.send(new QueryCommand(options))\n for (const item of response.Items) {\n yield item\n }\n options.ExclusiveStartKey = response.LastEvaluatedKey\n expectMore = Object.keys(options.ExclusiveStartKey).length\n }\n }\n return command(options)\n}\n\nexport const awsDynamoDBScanStream = async (options, streamOptions) => {\n async function * command (options) {\n let expectMore = true\n while (expectMore) {\n const response = await client.send(new ScanCommand(options))\n for (const item of response.Items) {\n yield item\n }\n options.ExclusiveStartKey = response.LastEvaluatedKey\n expectMore = Object.keys(options.ExclusiveStartKey).length\n }\n }\n return command(options)\n}\n\n// TODO awsDynamoDBExecuteStatementStream\n\n// TODO max Keys.length = 100\nexport const awsDynamoDBGetItemStream = async (options, streamOptions) => {\n options.retryCount ??= 0\n options.retryMaxCount ??= 10\n async function * command (options) {\n while (true) {\n const response = await client.send(\n new BatchGetItemCommand({\n RequestItems: {\n [options.TableName]: { Keys: options.Keys }\n }\n })\n )\n for (const item of response.Responses[options.TableName]) {\n yield item\n }\n const UnprocessedKeys =\n response?.UnprocessedKeys?.[options.TableName]?.Keys ?? []\n if (!UnprocessedKeys.length) {\n break\n }\n\n if (options.retryCount >= options.retryMaxCount) {\n throw new Error('awsDynamoDBBatchGetItem has UnprocessedKeys', {\n cause: {\n ...options,\n UnprocessedKeysCount: UnprocessedKeys.length\n }\n })\n }\n\n await timeout(3 ** options.retryCount++) // 3^10 == 59sec\n\n options.Keys = UnprocessedKeys\n }\n }\n return command(options)\n}\n\nexport const awsDynamoDBPutItemStream = (options, streamOptions) => {\n let batch = []\n const write = async (chunk) => {\n if (batch.length === 25) {\n await dynamodbBatchWrite(options, batch, streamOptions)\n batch = []\n }\n batch.push({\n PutRequest: {\n Item: chunk\n }\n })\n }\n const final = () => dynamodbBatchWrite(options, batch, streamOptions)\n return createWritableStream(write, final, streamOptions)\n}\n\nexport const awsDynamoDBDeleteItemStream = (options, streamOptions) => {\n let batch = []\n const write = async (chunk) => {\n if (batch.length === 25) {\n await dynamodbBatchWrite(options, batch, streamOptions)\n batch = []\n }\n batch.push({\n DeleteRequest: {\n Key: chunk\n }\n })\n }\n const final = () => dynamodbBatchWrite(options, batch, streamOptions)\n return createWritableStream(write, final, streamOptions)\n}\n\nconst dynamodbBatchWrite = async (options, batch, streamOptions) => {\n options.retryCount ??= 0\n options.retryMaxCount ??= 10\n const { UnprocessedItems } = await client.send(\n new BatchWriteItemCommand({\n RequestItems: {\n [options.TableName]: batch\n }\n })\n )\n if (UnprocessedItems?.[options.TableName]?.length) {\n if (options.retryCount >= options.retryMaxCount) {\n throw new Error('awsDynamoDBBatchWriteItem has UnprocessedItems', {\n cause: {\n ...options,\n UnprocessedItemsCount: UnprocessedItems[options.TableName].length\n }\n })\n }\n\n await timeout(3 ** options.retryCount++) // 3^10 == 59sec\n return dynamodbBatchWrite(\n options,\n UnprocessedItems[options.TableName],\n streamOptions\n )\n }\n options.retryCount = 0 // reset for next batch\n}\n\nexport default {\n setClient: awsDynamoDBSetClient,\n queryStream: awsDynamoDBQueryStream,\n scanStream: awsDynamoDBScanStream,\n getItemStream: awsDynamoDBGetItemStream,\n putItemStream: awsDynamoDBPutItemStream,\n deleteItemStream: awsDynamoDBDeleteItemStream\n}\n"], | ||
| "mappings": "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", | ||
| "names": ["options"] | ||
| } |
+11
-20
| import { createWritableStream, timeout } from "@datastream/core"; | ||
| import { DynamoDBClient } from "@aws-sdk/client-dynamodb"; | ||
| import { | ||
| BatchGetCommand, | ||
| BatchWriteCommand, | ||
| DynamoDBClient, | ||
| BatchGetItemCommand, | ||
| BatchWriteItemCommand, | ||
| QueryCommand, | ||
| ScanCommand, | ||
| DynamoDBDocumentClient | ||
| } from "@aws-sdk/lib-dynamodb"; | ||
| ScanCommand | ||
| } from "@aws-sdk/client-dynamodb"; | ||
| const awsClientDefaults = { | ||
@@ -21,12 +20,5 @@ // https://aws.amazon.com/compliance/fips/ | ||
| let client = new DynamoDBClient(awsClientDefaults); | ||
| let dynamodbDocument; | ||
| const awsDynamoDBSetClient = (ddbClient, translateConfig) => { | ||
| client = ddbClient; | ||
| awsDynamoDBDocumentSetClient( | ||
| DynamoDBDocumentClient.from(client, translateConfig) | ||
| ); | ||
| }; | ||
| const awsDynamoDBDocumentSetClient = (ddbdocClient) => { | ||
| dynamodbDocument = ddbdocClient; | ||
| }; | ||
| awsDynamoDBSetClient(client); | ||
@@ -37,3 +29,3 @@ const awsDynamoDBQueryStream = async (options, streamOptions) => { | ||
| while (expectMore) { | ||
| const response = await dynamodbDocument.send(new QueryCommand(options2)); | ||
| const response = await client.send(new QueryCommand(options2)); | ||
| for (const item of response.Items) { | ||
@@ -52,3 +44,3 @@ yield item; | ||
| while (expectMore) { | ||
| const response = await dynamodbDocument.send(new ScanCommand(options2)); | ||
| const response = await client.send(new ScanCommand(options2)); | ||
| for (const item of response.Items) { | ||
@@ -68,4 +60,4 @@ yield item; | ||
| while (true) { | ||
| const response = await dynamodbDocument.send( | ||
| new BatchGetCommand({ | ||
| const response = await client.send( | ||
| new BatchGetItemCommand({ | ||
| RequestItems: { | ||
@@ -132,4 +124,4 @@ [options2.TableName]: { Keys: options2.Keys } | ||
| options.retryMaxCount ??= 10; | ||
| const { UnprocessedItems } = await dynamodbDocument.send( | ||
| new BatchWriteCommand({ | ||
| const { UnprocessedItems } = await client.send( | ||
| new BatchWriteItemCommand({ | ||
| RequestItems: { | ||
@@ -168,3 +160,2 @@ [options.TableName]: batch | ||
| awsDynamoDBDeleteItemStream, | ||
| awsDynamoDBDocumentSetClient, | ||
| awsDynamoDBGetItemStream, | ||
@@ -171,0 +162,0 @@ awsDynamoDBPutItemStream, |
| { | ||
| "version": 3, | ||
| "sources": ["dynamodb.js"], | ||
| "sourcesContent": ["import { createWritableStream, timeout } from '@datastream/core'\nimport { DynamoDBClient } from '@aws-sdk/client-dynamodb'\n\nimport {\n BatchGetCommand,\n BatchWriteCommand,\n QueryCommand,\n ScanCommand,\n DynamoDBDocumentClient\n} from '@aws-sdk/lib-dynamodb'\n\nconst awsClientDefaults = {\n // https://aws.amazon.com/compliance/fips/\n useFipsEndpoint: [\n 'us-east-1',\n 'us-east-2',\n 'us-west-1',\n 'us-west-2',\n 'ca-central-1'\n ].includes(process.env.AWS_REGION)\n}\n\nlet client = new DynamoDBClient(awsClientDefaults)\nlet dynamodbDocument\nexport const awsDynamoDBSetClient = (ddbClient, translateConfig) => {\n client = ddbClient\n awsDynamoDBDocumentSetClient(\n DynamoDBDocumentClient.from(client, translateConfig)\n )\n}\nexport const awsDynamoDBDocumentSetClient = (ddbdocClient) => {\n dynamodbDocument = ddbdocClient\n}\nawsDynamoDBSetClient(client)\n\n// Docs: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html\n\n// options = {TableName, ...}\n\nexport const awsDynamoDBQueryStream = async (options, streamOptions) => {\n async function * command (options) {\n let expectMore = true\n while (expectMore) {\n const response = await dynamodbDocument.send(new QueryCommand(options))\n for (const item of response.Items) {\n yield item\n }\n options.ExclusiveStartKey = response.LastEvaluatedKey\n expectMore = Object.keys(options.ExclusiveStartKey).length\n }\n }\n return command(options)\n}\n\nexport const awsDynamoDBScanStream = async (options, streamOptions) => {\n async function * command (options) {\n let expectMore = true\n while (expectMore) {\n const response = await dynamodbDocument.send(new ScanCommand(options))\n for (const item of response.Items) {\n yield item\n }\n options.ExclusiveStartKey = response.LastEvaluatedKey\n expectMore = Object.keys(options.ExclusiveStartKey).length\n }\n }\n return command(options)\n}\n\n// TODO awsDynamoDBExecuteStatementStream\n\n// TODO max Keys.length = 100\nexport const awsDynamoDBGetItemStream = async (options, streamOptions) => {\n options.retryCount ??= 0\n options.retryMaxCount ??= 10\n async function * command (options) {\n while (true) {\n const response = await dynamodbDocument.send(\n new BatchGetCommand({\n RequestItems: {\n [options.TableName]: { Keys: options.Keys }\n }\n })\n )\n for (const item of response.Responses[options.TableName]) {\n yield item\n }\n const UnprocessedKeys =\n response?.UnprocessedKeys?.[options.TableName]?.Keys ?? []\n if (!UnprocessedKeys.length) {\n break\n }\n\n if (options.retryCount >= options.retryMaxCount) {\n throw new Error('awsDynamoDBBatchGetItem has UnprocessedKeys', {\n cause: {\n ...options,\n UnprocessedKeysCount: UnprocessedKeys.length\n }\n })\n }\n\n await timeout(3 ** options.retryCount++) // 3^10 == 59sec\n\n options.Keys = UnprocessedKeys\n }\n }\n return command(options)\n}\n\nexport const awsDynamoDBPutItemStream = (options, streamOptions) => {\n let batch = []\n const write = async (chunk) => {\n if (batch.length === 25) {\n await dynamodbBatchWrite(options, batch, streamOptions)\n batch = []\n }\n batch.push({\n PutRequest: {\n Item: chunk\n }\n })\n }\n const final = () => dynamodbBatchWrite(options, batch, streamOptions)\n return createWritableStream(write, final, streamOptions)\n}\n\nexport const awsDynamoDBDeleteItemStream = (options, streamOptions) => {\n let batch = []\n const write = async (chunk) => {\n if (batch.length === 25) {\n await dynamodbBatchWrite(options, batch, streamOptions)\n batch = []\n }\n batch.push({\n DeleteRequest: {\n Key: chunk\n }\n })\n }\n const final = () => dynamodbBatchWrite(options, batch, streamOptions)\n return createWritableStream(write, final, streamOptions)\n}\n\nconst dynamodbBatchWrite = async (options, batch, streamOptions) => {\n options.retryCount ??= 0\n options.retryMaxCount ??= 10\n const { UnprocessedItems } = await dynamodbDocument.send(\n new BatchWriteCommand({\n RequestItems: {\n [options.TableName]: batch\n }\n })\n )\n if (UnprocessedItems?.[options.TableName]?.length) {\n if (options.retryCount >= options.retryMaxCount) {\n throw new Error('awsDynamoDBBatchWriteItem has UnprocessedItems', {\n cause: {\n ...options,\n UnprocessedItemsCount: UnprocessedItems[options.TableName].length\n }\n })\n }\n\n await timeout(3 ** options.retryCount++) // 3^10 == 59sec\n return dynamodbBatchWrite(\n options,\n UnprocessedItems[options.TableName],\n streamOptions\n )\n }\n options.retryCount = 0 // reset for next batch\n}\n\nexport default {\n setClient: awsDynamoDBSetClient,\n queryStream: awsDynamoDBQueryStream,\n scanStream: awsDynamoDBScanStream,\n getItemStream: awsDynamoDBGetItemStream,\n putItemStream: awsDynamoDBPutItemStream,\n deleteItemStream: awsDynamoDBDeleteItemStream\n}\n"], | ||
| "mappings": "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", | ||
| "sourcesContent": ["import { createWritableStream, timeout } from '@datastream/core'\nimport {\n DynamoDBClient,\n BatchGetItemCommand,\n BatchWriteItemCommand,\n QueryCommand,\n ScanCommand\n} from '@aws-sdk/client-dynamodb'\n\nconst awsClientDefaults = {\n // https://aws.amazon.com/compliance/fips/\n useFipsEndpoint: [\n 'us-east-1',\n 'us-east-2',\n 'us-west-1',\n 'us-west-2',\n 'ca-central-1'\n ].includes(process.env.AWS_REGION)\n}\n\nlet client = new DynamoDBClient(awsClientDefaults)\nexport const awsDynamoDBSetClient = (ddbClient, translateConfig) => {\n client = ddbClient\n}\nawsDynamoDBSetClient(client)\n\n// options = {TableName, ...}\n\nexport const awsDynamoDBQueryStream = async (options, streamOptions) => {\n async function * command (options) {\n let expectMore = true\n while (expectMore) {\n const response = await client.send(new QueryCommand(options))\n for (const item of response.Items) {\n yield item\n }\n options.ExclusiveStartKey = response.LastEvaluatedKey\n expectMore = Object.keys(options.ExclusiveStartKey).length\n }\n }\n return command(options)\n}\n\nexport const awsDynamoDBScanStream = async (options, streamOptions) => {\n async function * command (options) {\n let expectMore = true\n while (expectMore) {\n const response = await client.send(new ScanCommand(options))\n for (const item of response.Items) {\n yield item\n }\n options.ExclusiveStartKey = response.LastEvaluatedKey\n expectMore = Object.keys(options.ExclusiveStartKey).length\n }\n }\n return command(options)\n}\n\n// TODO awsDynamoDBExecuteStatementStream\n\n// TODO max Keys.length = 100\nexport const awsDynamoDBGetItemStream = async (options, streamOptions) => {\n options.retryCount ??= 0\n options.retryMaxCount ??= 10\n async function * command (options) {\n while (true) {\n const response = await client.send(\n new BatchGetItemCommand({\n RequestItems: {\n [options.TableName]: { Keys: options.Keys }\n }\n })\n )\n for (const item of response.Responses[options.TableName]) {\n yield item\n }\n const UnprocessedKeys =\n response?.UnprocessedKeys?.[options.TableName]?.Keys ?? []\n if (!UnprocessedKeys.length) {\n break\n }\n\n if (options.retryCount >= options.retryMaxCount) {\n throw new Error('awsDynamoDBBatchGetItem has UnprocessedKeys', {\n cause: {\n ...options,\n UnprocessedKeysCount: UnprocessedKeys.length\n }\n })\n }\n\n await timeout(3 ** options.retryCount++) // 3^10 == 59sec\n\n options.Keys = UnprocessedKeys\n }\n }\n return command(options)\n}\n\nexport const awsDynamoDBPutItemStream = (options, streamOptions) => {\n let batch = []\n const write = async (chunk) => {\n if (batch.length === 25) {\n await dynamodbBatchWrite(options, batch, streamOptions)\n batch = []\n }\n batch.push({\n PutRequest: {\n Item: chunk\n }\n })\n }\n const final = () => dynamodbBatchWrite(options, batch, streamOptions)\n return createWritableStream(write, final, streamOptions)\n}\n\nexport const awsDynamoDBDeleteItemStream = (options, streamOptions) => {\n let batch = []\n const write = async (chunk) => {\n if (batch.length === 25) {\n await dynamodbBatchWrite(options, batch, streamOptions)\n batch = []\n }\n batch.push({\n DeleteRequest: {\n Key: chunk\n }\n })\n }\n const final = () => dynamodbBatchWrite(options, batch, streamOptions)\n return createWritableStream(write, final, streamOptions)\n}\n\nconst dynamodbBatchWrite = async (options, batch, streamOptions) => {\n options.retryCount ??= 0\n options.retryMaxCount ??= 10\n const { UnprocessedItems } = await client.send(\n new BatchWriteItemCommand({\n RequestItems: {\n [options.TableName]: batch\n }\n })\n )\n if (UnprocessedItems?.[options.TableName]?.length) {\n if (options.retryCount >= options.retryMaxCount) {\n throw new Error('awsDynamoDBBatchWriteItem has UnprocessedItems', {\n cause: {\n ...options,\n UnprocessedItemsCount: UnprocessedItems[options.TableName].length\n }\n })\n }\n\n await timeout(3 ** options.retryCount++) // 3^10 == 59sec\n return dynamodbBatchWrite(\n options,\n UnprocessedItems[options.TableName],\n streamOptions\n )\n }\n options.retryCount = 0 // reset for next batch\n}\n\nexport default {\n setClient: awsDynamoDBSetClient,\n queryStream: awsDynamoDBQueryStream,\n scanStream: awsDynamoDBScanStream,\n getItemStream: awsDynamoDBGetItemStream,\n putItemStream: awsDynamoDBPutItemStream,\n deleteItemStream: awsDynamoDBDeleteItemStream\n}\n"], | ||
| "mappings": "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", | ||
| "names": ["options"] | ||
| } |
+10
-6
| { | ||
| "name": "@datastream/aws", | ||
| "version": "0.0.30", | ||
| "version": "0.0.31", | ||
| "description": "", | ||
@@ -127,2 +127,8 @@ "type": "module", | ||
| "keywords": [ | ||
| "AWS", | ||
| "DynamoDB", | ||
| "Lambda", | ||
| "S3", | ||
| "SNS", | ||
| "SQS", | ||
| "Web Stream API", | ||
@@ -145,6 +151,6 @@ "Node Stream API" | ||
| "dependencies": { | ||
| "@datastream/aws": "0.0.30", | ||
| "@datastream/core": "0.0.30" | ||
| "@datastream/aws": "0.0.31", | ||
| "@datastream/core": "0.0.31" | ||
| }, | ||
| "gitHead": "6ddc0fadabf5f3702a51aebae1fc6b252c6ae8d4", | ||
| "gitHead": "108ff1d40f9faa08491d7494ce5fd5518bb82679", | ||
| "devDependencies": { | ||
@@ -157,7 +163,5 @@ "@aws-sdk/client-dynamodb": "^3.0.0", | ||
| "@aws-sdk/client-ssm": "^3.0.0", | ||
| "@aws-sdk/lib-dynamodb": "^3.0.0", | ||
| "@aws-sdk/lib-storage": "^3.0.0", | ||
| "@datastream/charset": "0.0.30", | ||
| "aws-sdk-client-mock": "^2.0.0" | ||
| } | ||
| } |
+0
-1
@@ -26,3 +26,2 @@ import { | ||
| const response = await client.send(new ReceiveMessageCommand(options2)); | ||
| console.log(response); | ||
| for (const item of response.Messages) { | ||
@@ -29,0 +28,0 @@ yield item; |
+2
-2
| { | ||
| "version": 3, | ||
| "sources": ["sqs.js"], | ||
| "sourcesContent": ["import {\n SQSClient,\n ReceiveMessageCommand,\n DeleteMessageBatchCommand,\n SendMessageBatchCommand\n} from '@aws-sdk/client-sqs'\nimport { createWritableStream } from '@datastream/core'\n\nconst awsClientDefaults = {\n // https://aws.amazon.com/compliance/fips/\n useFipsEndpoint: [\n 'us-east-1',\n 'us-east-2',\n 'us-west-1',\n 'us-west-2'\n ].includes(process.env.AWS_REGION)\n}\n\nlet client = new SQSClient(awsClientDefaults)\nexport const awsSQSSetClient = (sqsClient) => {\n client = sqsClient\n}\n\nexport const awsSQSReceiveMessageStream = async (\n options,\n streamOptions = {}\n) => {\n // TODO needs option to keep polling or not\n async function * command (options) {\n let expectMore = true\n while (expectMore) {\n const response = await client.send(new ReceiveMessageCommand(options))\n console.log(response)\n for (const item of response.Messages) {\n yield item\n }\n expectMore = response.Messages.length\n }\n }\n return command(options)\n}\n\nexport const awsSQSDeleteMessageStream = (options, streamOptions) => {\n let batch = []\n const send = () => {\n options.Entries = batch\n batch = []\n return client.send(new DeleteMessageBatchCommand(options))\n }\n const write = async (chunk) => {\n if (batch.length === 10) {\n await send()\n }\n batch.push(chunk)\n }\n const final = send\n return createWritableStream(write, final, streamOptions)\n}\n\nexport const awsSQSSendMessageStream = (options, streamOptions) => {\n let batch = []\n const send = () => {\n options.Entries = batch\n batch = []\n return client.send(new SendMessageBatchCommand(options))\n }\n const write = async (chunk) => {\n if (batch.length === 10) {\n await send()\n }\n batch.push(chunk)\n }\n const final = send\n return createWritableStream(write, final, streamOptions)\n}\n\nexport default {\n setClient: awsSQSSetClient,\n sendMessageStream: awsSQSSendMessageStream,\n receiveMessageStream: awsSQSReceiveMessageStream,\n deleteMessageStream: awsSQSDeleteMessageStream\n}\n"], | ||
| "mappings": "AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,4BAA4B;AAErC,MAAM,oBAAoB;AAAA;AAAA,EAExB,iBAAiB;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,SAAS,QAAQ,IAAI,UAAU;AACnC;AAEA,IAAI,SAAS,IAAI,UAAU,iBAAiB;AACrC,MAAM,kBAAkB,CAAC,cAAc;AAC5C,WAAS;AACX;AAEO,MAAM,6BAA6B,OACxC,SACA,gBAAgB,CAAC,MACd;AAEH,kBAAiB,QAASA,UAAS;AACjC,QAAI,aAAa;AACjB,WAAO,YAAY;AACjB,YAAM,WAAW,MAAM,OAAO,KAAK,IAAI,sBAAsBA,QAAO,CAAC;AACrE,cAAQ,IAAI,QAAQ;AACpB,iBAAW,QAAQ,SAAS,UAAU;AACpC,cAAM;AAAA,MACR;AACA,mBAAa,SAAS,SAAS;AAAA,IACjC;AAAA,EACF;AACA,SAAO,QAAQ,OAAO;AACxB;AAEO,MAAM,4BAA4B,CAAC,SAAS,kBAAkB;AACnE,MAAI,QAAQ,CAAC;AACb,QAAM,OAAO,MAAM;AACjB,YAAQ,UAAU;AAClB,YAAQ,CAAC;AACT,WAAO,OAAO,KAAK,IAAI,0BAA0B,OAAO,CAAC;AAAA,EAC3D;AACA,QAAM,QAAQ,OAAO,UAAU;AAC7B,QAAI,MAAM,WAAW,IAAI;AACvB,YAAM,KAAK;AAAA,IACb;AACA,UAAM,KAAK,KAAK;AAAA,EAClB;AACA,QAAM,QAAQ;AACd,SAAO,qBAAqB,OAAO,OAAO,aAAa;AACzD;AAEO,MAAM,0BAA0B,CAAC,SAAS,kBAAkB;AACjE,MAAI,QAAQ,CAAC;AACb,QAAM,OAAO,MAAM;AACjB,YAAQ,UAAU;AAClB,YAAQ,CAAC;AACT,WAAO,OAAO,KAAK,IAAI,wBAAwB,OAAO,CAAC;AAAA,EACzD;AACA,QAAM,QAAQ,OAAO,UAAU;AAC7B,QAAI,MAAM,WAAW,IAAI;AACvB,YAAM,KAAK;AAAA,IACb;AACA,UAAM,KAAK,KAAK;AAAA,EAClB;AACA,QAAM,QAAQ;AACd,SAAO,qBAAqB,OAAO,OAAO,aAAa;AACzD;AAEA,IAAO,cAAQ;AAAA,EACb,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB,sBAAsB;AAAA,EACtB,qBAAqB;AACvB;", | ||
| "sourcesContent": ["import {\n SQSClient,\n ReceiveMessageCommand,\n DeleteMessageBatchCommand,\n SendMessageBatchCommand\n} from '@aws-sdk/client-sqs'\nimport { createWritableStream } from '@datastream/core'\n\nconst awsClientDefaults = {\n // https://aws.amazon.com/compliance/fips/\n useFipsEndpoint: [\n 'us-east-1',\n 'us-east-2',\n 'us-west-1',\n 'us-west-2'\n ].includes(process.env.AWS_REGION)\n}\n\nlet client = new SQSClient(awsClientDefaults)\nexport const awsSQSSetClient = (sqsClient) => {\n client = sqsClient\n}\n\nexport const awsSQSReceiveMessageStream = async (\n options,\n streamOptions = {}\n) => {\n // TODO needs option to keep polling or not\n async function * command (options) {\n let expectMore = true\n while (expectMore) {\n const response = await client.send(new ReceiveMessageCommand(options))\n for (const item of response.Messages) {\n yield item\n }\n expectMore = response.Messages.length\n }\n }\n return command(options)\n}\n\nexport const awsSQSDeleteMessageStream = (options, streamOptions) => {\n let batch = []\n const send = () => {\n options.Entries = batch\n batch = []\n return client.send(new DeleteMessageBatchCommand(options))\n }\n const write = async (chunk) => {\n if (batch.length === 10) {\n await send()\n }\n batch.push(chunk)\n }\n const final = send\n return createWritableStream(write, final, streamOptions)\n}\n\nexport const awsSQSSendMessageStream = (options, streamOptions) => {\n let batch = []\n const send = () => {\n options.Entries = batch\n batch = []\n return client.send(new SendMessageBatchCommand(options))\n }\n const write = async (chunk) => {\n if (batch.length === 10) {\n await send()\n }\n batch.push(chunk)\n }\n const final = send\n return createWritableStream(write, final, streamOptions)\n}\n\nexport default {\n setClient: awsSQSSetClient,\n sendMessageStream: awsSQSSendMessageStream,\n receiveMessageStream: awsSQSReceiveMessageStream,\n deleteMessageStream: awsSQSDeleteMessageStream\n}\n"], | ||
| "mappings": "AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,4BAA4B;AAErC,MAAM,oBAAoB;AAAA;AAAA,EAExB,iBAAiB;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,SAAS,QAAQ,IAAI,UAAU;AACnC;AAEA,IAAI,SAAS,IAAI,UAAU,iBAAiB;AACrC,MAAM,kBAAkB,CAAC,cAAc;AAC5C,WAAS;AACX;AAEO,MAAM,6BAA6B,OACxC,SACA,gBAAgB,CAAC,MACd;AAEH,kBAAiB,QAASA,UAAS;AACjC,QAAI,aAAa;AACjB,WAAO,YAAY;AACjB,YAAM,WAAW,MAAM,OAAO,KAAK,IAAI,sBAAsBA,QAAO,CAAC;AACrE,iBAAW,QAAQ,SAAS,UAAU;AACpC,cAAM;AAAA,MACR;AACA,mBAAa,SAAS,SAAS;AAAA,IACjC;AAAA,EACF;AACA,SAAO,QAAQ,OAAO;AACxB;AAEO,MAAM,4BAA4B,CAAC,SAAS,kBAAkB;AACnE,MAAI,QAAQ,CAAC;AACb,QAAM,OAAO,MAAM;AACjB,YAAQ,UAAU;AAClB,YAAQ,CAAC;AACT,WAAO,OAAO,KAAK,IAAI,0BAA0B,OAAO,CAAC;AAAA,EAC3D;AACA,QAAM,QAAQ,OAAO,UAAU;AAC7B,QAAI,MAAM,WAAW,IAAI;AACvB,YAAM,KAAK;AAAA,IACb;AACA,UAAM,KAAK,KAAK;AAAA,EAClB;AACA,QAAM,QAAQ;AACd,SAAO,qBAAqB,OAAO,OAAO,aAAa;AACzD;AAEO,MAAM,0BAA0B,CAAC,SAAS,kBAAkB;AACjE,MAAI,QAAQ,CAAC;AACb,QAAM,OAAO,MAAM;AACjB,YAAQ,UAAU;AAClB,YAAQ,CAAC;AACT,WAAO,OAAO,KAAK,IAAI,wBAAwB,OAAO,CAAC;AAAA,EACzD;AACA,QAAM,QAAQ,OAAO,UAAU;AAC7B,QAAI,MAAM,WAAW,IAAI;AACvB,YAAM,KAAK;AAAA,IACb;AACA,UAAM,KAAK,KAAK;AAAA,EAClB;AACA,QAAM,QAAQ;AACd,SAAO,qBAAqB,OAAO,OAAO,aAAa;AACzD;AAEA,IAAO,cAAQ;AAAA,EACb,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB,sBAAsB;AAAA,EACtB,qBAAqB;AACvB;", | ||
| "names": ["options"] | ||
| } |
+0
-1
@@ -26,3 +26,2 @@ import { | ||
| const response = await client.send(new ReceiveMessageCommand(options2)); | ||
| console.log(response); | ||
| for (const item of response.Messages) { | ||
@@ -29,0 +28,0 @@ yield item; |
+2
-2
| { | ||
| "version": 3, | ||
| "sources": ["sqs.js"], | ||
| "sourcesContent": ["import {\n SQSClient,\n ReceiveMessageCommand,\n DeleteMessageBatchCommand,\n SendMessageBatchCommand\n} from '@aws-sdk/client-sqs'\nimport { createWritableStream } from '@datastream/core'\n\nconst awsClientDefaults = {\n // https://aws.amazon.com/compliance/fips/\n useFipsEndpoint: [\n 'us-east-1',\n 'us-east-2',\n 'us-west-1',\n 'us-west-2'\n ].includes(process.env.AWS_REGION)\n}\n\nlet client = new SQSClient(awsClientDefaults)\nexport const awsSQSSetClient = (sqsClient) => {\n client = sqsClient\n}\n\nexport const awsSQSReceiveMessageStream = async (\n options,\n streamOptions = {}\n) => {\n // TODO needs option to keep polling or not\n async function * command (options) {\n let expectMore = true\n while (expectMore) {\n const response = await client.send(new ReceiveMessageCommand(options))\n console.log(response)\n for (const item of response.Messages) {\n yield item\n }\n expectMore = response.Messages.length\n }\n }\n return command(options)\n}\n\nexport const awsSQSDeleteMessageStream = (options, streamOptions) => {\n let batch = []\n const send = () => {\n options.Entries = batch\n batch = []\n return client.send(new DeleteMessageBatchCommand(options))\n }\n const write = async (chunk) => {\n if (batch.length === 10) {\n await send()\n }\n batch.push(chunk)\n }\n const final = send\n return createWritableStream(write, final, streamOptions)\n}\n\nexport const awsSQSSendMessageStream = (options, streamOptions) => {\n let batch = []\n const send = () => {\n options.Entries = batch\n batch = []\n return client.send(new SendMessageBatchCommand(options))\n }\n const write = async (chunk) => {\n if (batch.length === 10) {\n await send()\n }\n batch.push(chunk)\n }\n const final = send\n return createWritableStream(write, final, streamOptions)\n}\n\nexport default {\n setClient: awsSQSSetClient,\n sendMessageStream: awsSQSSendMessageStream,\n receiveMessageStream: awsSQSReceiveMessageStream,\n deleteMessageStream: awsSQSDeleteMessageStream\n}\n"], | ||
| "mappings": "AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,4BAA4B;AAErC,MAAM,oBAAoB;AAAA;AAAA,EAExB,iBAAiB;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,SAAS,QAAQ,IAAI,UAAU;AACnC;AAEA,IAAI,SAAS,IAAI,UAAU,iBAAiB;AACrC,MAAM,kBAAkB,CAAC,cAAc;AAC5C,WAAS;AACX;AAEO,MAAM,6BAA6B,OACxC,SACA,gBAAgB,CAAC,MACd;AAEH,kBAAiB,QAASA,UAAS;AACjC,QAAI,aAAa;AACjB,WAAO,YAAY;AACjB,YAAM,WAAW,MAAM,OAAO,KAAK,IAAI,sBAAsBA,QAAO,CAAC;AACrE,cAAQ,IAAI,QAAQ;AACpB,iBAAW,QAAQ,SAAS,UAAU;AACpC,cAAM;AAAA,MACR;AACA,mBAAa,SAAS,SAAS;AAAA,IACjC;AAAA,EACF;AACA,SAAO,QAAQ,OAAO;AACxB;AAEO,MAAM,4BAA4B,CAAC,SAAS,kBAAkB;AACnE,MAAI,QAAQ,CAAC;AACb,QAAM,OAAO,MAAM;AACjB,YAAQ,UAAU;AAClB,YAAQ,CAAC;AACT,WAAO,OAAO,KAAK,IAAI,0BAA0B,OAAO,CAAC;AAAA,EAC3D;AACA,QAAM,QAAQ,OAAO,UAAU;AAC7B,QAAI,MAAM,WAAW,IAAI;AACvB,YAAM,KAAK;AAAA,IACb;AACA,UAAM,KAAK,KAAK;AAAA,EAClB;AACA,QAAM,QAAQ;AACd,SAAO,qBAAqB,OAAO,OAAO,aAAa;AACzD;AAEO,MAAM,0BAA0B,CAAC,SAAS,kBAAkB;AACjE,MAAI,QAAQ,CAAC;AACb,QAAM,OAAO,MAAM;AACjB,YAAQ,UAAU;AAClB,YAAQ,CAAC;AACT,WAAO,OAAO,KAAK,IAAI,wBAAwB,OAAO,CAAC;AAAA,EACzD;AACA,QAAM,QAAQ,OAAO,UAAU;AAC7B,QAAI,MAAM,WAAW,IAAI;AACvB,YAAM,KAAK;AAAA,IACb;AACA,UAAM,KAAK,KAAK;AAAA,EAClB;AACA,QAAM,QAAQ;AACd,SAAO,qBAAqB,OAAO,OAAO,aAAa;AACzD;AAEA,IAAO,cAAQ;AAAA,EACb,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB,sBAAsB;AAAA,EACtB,qBAAqB;AACvB;", | ||
| "sourcesContent": ["import {\n SQSClient,\n ReceiveMessageCommand,\n DeleteMessageBatchCommand,\n SendMessageBatchCommand\n} from '@aws-sdk/client-sqs'\nimport { createWritableStream } from '@datastream/core'\n\nconst awsClientDefaults = {\n // https://aws.amazon.com/compliance/fips/\n useFipsEndpoint: [\n 'us-east-1',\n 'us-east-2',\n 'us-west-1',\n 'us-west-2'\n ].includes(process.env.AWS_REGION)\n}\n\nlet client = new SQSClient(awsClientDefaults)\nexport const awsSQSSetClient = (sqsClient) => {\n client = sqsClient\n}\n\nexport const awsSQSReceiveMessageStream = async (\n options,\n streamOptions = {}\n) => {\n // TODO needs option to keep polling or not\n async function * command (options) {\n let expectMore = true\n while (expectMore) {\n const response = await client.send(new ReceiveMessageCommand(options))\n for (const item of response.Messages) {\n yield item\n }\n expectMore = response.Messages.length\n }\n }\n return command(options)\n}\n\nexport const awsSQSDeleteMessageStream = (options, streamOptions) => {\n let batch = []\n const send = () => {\n options.Entries = batch\n batch = []\n return client.send(new DeleteMessageBatchCommand(options))\n }\n const write = async (chunk) => {\n if (batch.length === 10) {\n await send()\n }\n batch.push(chunk)\n }\n const final = send\n return createWritableStream(write, final, streamOptions)\n}\n\nexport const awsSQSSendMessageStream = (options, streamOptions) => {\n let batch = []\n const send = () => {\n options.Entries = batch\n batch = []\n return client.send(new SendMessageBatchCommand(options))\n }\n const write = async (chunk) => {\n if (batch.length === 10) {\n await send()\n }\n batch.push(chunk)\n }\n const final = send\n return createWritableStream(write, final, streamOptions)\n}\n\nexport default {\n setClient: awsSQSSetClient,\n sendMessageStream: awsSQSSendMessageStream,\n receiveMessageStream: awsSQSReceiveMessageStream,\n deleteMessageStream: awsSQSDeleteMessageStream\n}\n"], | ||
| "mappings": "AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,4BAA4B;AAErC,MAAM,oBAAoB;AAAA;AAAA,EAExB,iBAAiB;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,SAAS,QAAQ,IAAI,UAAU;AACnC;AAEA,IAAI,SAAS,IAAI,UAAU,iBAAiB;AACrC,MAAM,kBAAkB,CAAC,cAAc;AAC5C,WAAS;AACX;AAEO,MAAM,6BAA6B,OACxC,SACA,gBAAgB,CAAC,MACd;AAEH,kBAAiB,QAASA,UAAS;AACjC,QAAI,aAAa;AACjB,WAAO,YAAY;AACjB,YAAM,WAAW,MAAM,OAAO,KAAK,IAAI,sBAAsBA,QAAO,CAAC;AACrE,iBAAW,QAAQ,SAAS,UAAU;AACpC,cAAM;AAAA,MACR;AACA,mBAAa,SAAS,SAAS;AAAA,IACjC;AAAA,EACF;AACA,SAAO,QAAQ,OAAO;AACxB;AAEO,MAAM,4BAA4B,CAAC,SAAS,kBAAkB;AACnE,MAAI,QAAQ,CAAC;AACb,QAAM,OAAO,MAAM;AACjB,YAAQ,UAAU;AAClB,YAAQ,CAAC;AACT,WAAO,OAAO,KAAK,IAAI,0BAA0B,OAAO,CAAC;AAAA,EAC3D;AACA,QAAM,QAAQ,OAAO,UAAU;AAC7B,QAAI,MAAM,WAAW,IAAI;AACvB,YAAM,KAAK;AAAA,IACb;AACA,UAAM,KAAK,KAAK;AAAA,EAClB;AACA,QAAM,QAAQ;AACd,SAAO,qBAAqB,OAAO,OAAO,aAAa;AACzD;AAEO,MAAM,0BAA0B,CAAC,SAAS,kBAAkB;AACjE,MAAI,QAAQ,CAAC;AACb,QAAM,OAAO,MAAM;AACjB,YAAQ,UAAU;AAClB,YAAQ,CAAC;AACT,WAAO,OAAO,KAAK,IAAI,wBAAwB,OAAO,CAAC;AAAA,EACzD;AACA,QAAM,QAAQ,OAAO,UAAU;AAC7B,QAAI,MAAM,WAAW,IAAI;AACvB,YAAM,KAAK;AAAA,IACb;AACA,UAAM,KAAK,KAAK;AAAA,EAClB;AACA,QAAM,QAAQ;AACd,SAAO,qBAAqB,OAAO,OAAO,aAAa;AACzD;AAEA,IAAO,cAAQ;AAAA,EACb,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB,sBAAsB;AAAA,EACtB,qBAAqB;AACvB;", | ||
| "names": ["options"] | ||
| } |
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
8
-20%65014
-2.84%805
-2.42%+ Added
- Removed
Updated
Updated