diff --git a/apps/engine/package.json b/apps/engine/package.json index ccf23f338..514c5ac07 100644 --- a/apps/engine/package.json +++ b/apps/engine/package.json @@ -44,6 +44,7 @@ "@hono/node-server": "^1", "@scalar/hono-api-reference": "^0.6", "@stripe/sync-destination-google-sheets": "workspace:*", + "@stripe/sync-destination-aws-dsql": "workspace:*", "@stripe/sync-destination-postgres": "workspace:*", "@stripe/sync-hono-zod-openapi": "workspace:*", "@stripe/sync-integration-supabase": "workspace:*", diff --git a/apps/engine/src/lib/default-connectors.ts b/apps/engine/src/lib/default-connectors.ts index a3414b114..a73a561ea 100644 --- a/apps/engine/src/lib/default-connectors.ts +++ b/apps/engine/src/lib/default-connectors.ts @@ -1,4 +1,5 @@ import sourceStripe from '@stripe/sync-source-stripe' +import destinationAwsDsql from '@stripe/sync-destination-aws-dsql' import destinationPostgres from '@stripe/sync-destination-postgres' import destinationGoogleSheets from '@stripe/sync-destination-google-sheets' import type { RegisteredConnectors } from './resolver.js' @@ -7,6 +8,7 @@ import type { RegisteredConnectors } from './resolver.js' export const defaultConnectors: RegisteredConnectors = { sources: { stripe: sourceStripe }, destinations: { + aws_dsql: destinationAwsDsql, postgres: destinationPostgres, google_sheets: destinationGoogleSheets, }, diff --git a/demo/README.md b/demo/README.md index 8c9caf6c4..fd36ff976 100644 --- a/demo/README.md +++ b/demo/README.md @@ -96,13 +96,28 @@ This syncs `products`, `prices`, and `customers` into Postgres with full schema ## All demos -| Script | What it does | Required env vars | -|--------|-------------|-------------------| -| `read-from-stripe.sh` | Read from Stripe, output NDJSON to stdout | `STRIPE_API_KEY` | -| `write-to-postgres.sh` | Write NDJSON (stdin or sample data) to Postgres | `DATABASE_URL` | -| `write-to-sheets.sh` | Write NDJSON (stdin or sample data) to Google Sheets | `GOOGLE_*` | -| `stripe-to-postgres.sh` | Stripe → Postgres via the engine | `STRIPE_API_KEY`, `DATABASE_URL` | -| `stripe-to-google-sheets.sh` | Stripe → Google Sheets via the engine | `STRIPE_API_KEY`, `GOOGLE_*` | +| Script | What it does | Required env vars | +| ---------------------------- | ---------------------------------------------------- | -------------------------------- | +| `read-from-stripe.sh` | Read from Stripe, output NDJSON to stdout | `STRIPE_API_KEY` | +| `write-to-postgres.sh` | Write NDJSON (stdin or sample data) to Postgres | `DATABASE_URL` | +| `write-to-sheets.sh` | Write NDJSON (stdin or sample data) to Google Sheets | `GOOGLE_*` | +| `stripe-to-postgres.sh` | Stripe → Postgres via the engine | `STRIPE_API_KEY`, `DATABASE_URL` | +| `stripe-to-google-sheets.sh` | Stripe → Google Sheets via the engine | `STRIPE_API_KEY`, `GOOGLE_*` | +| `stripe-to-dsql.ts` | Stripe → AWS DSQL via the engine | `STRIPE_API_KEY`, `AWS_*` | + +### Stripe → AWS DSQL + +Sync Stripe data to [Aurora DSQL](https://aws.amazon.com/rds/aurora/dsql/) (serverless distributed SQL): + +```sh +# One-time: provision the DSQL cluster +cd terraform && terraform init && terraform apply && cd .. + +# Sync (auto-reads endpoint from terraform output) +node --import tsx demo/stripe-to-dsql.ts +``` + +Or with explicit env vars: `DSQL_ENDPOINT=.dsql..on.aws node --import tsx demo/stripe-to-dsql.ts` ### TypeScript API @@ -115,7 +130,7 @@ node --import tsx demo/stripe-to-google-sheets.ts ## Utilities -| Script | What it does | -|--------|-------------| -| `reset-postgres.sh` | Drop all tables and non-system schemas | -| `webhooksite.sh` | Set up webhook forwarding for live Stripe events | +| Script | What it does | +| ------------------- | ------------------------------------------------ | +| `reset-postgres.sh` | Drop all tables and non-system schemas | +| `webhooksite.sh` | Set up webhook forwarding for live Stripe events | diff --git a/demo/stripe-to-dsql.ts b/demo/stripe-to-dsql.ts new file mode 100644 index 000000000..e1c6c9c70 --- /dev/null +++ b/demo/stripe-to-dsql.ts @@ -0,0 +1,94 @@ +/** + * Sync Stripe → AWS DSQL via the engine API (TypeScript). + * + * Usage: + * npx tsx demo/stripe-to-dsql.ts + * bun demo/stripe-to-dsql.ts + * + * Env: + * STRIPE_API_KEY — Stripe secret key + * DSQL_ENDPOINT — DSQL cluster endpoint (e.g. .dsql.us-east-1.on.aws) + * AWS_REGION — AWS region (default: us-east-1) + * AWS_ACCESS_KEY_ID — AWS credentials + * AWS_SECRET_ACCESS_KEY — AWS credentials + */ +import { execSync } from 'node:child_process' +import { createConnectorResolver, createEngine } from '../apps/engine/src/lib/index.js' +import { defaultConnectors } from '../apps/engine/src/lib/default-connectors.js' +import { fileStateStore } from '../apps/engine/src/lib/state-store.js' +import type { PipelineConfig } from '../packages/protocol/src/index.js' +import { buildPoolConfig, pg } from '../packages/destination-aws-dsql/src/index.js' + +const stripeApiKey = process.env.STRIPE_API_KEY +const region = process.env.AWS_REGION ?? 'us-east-1' + +// Auto-read endpoint from terraform output if not set +const dsqlEndpoint = + process.env.DSQL_ENDPOINT ?? + (() => { + try { + return execSync('terraform -chdir=terraform output -raw cluster_endpoint', { + encoding: 'utf8', + }).trim() + } catch { + return undefined + } + })() + +if (!stripeApiKey) throw new Error('Set STRIPE_API_KEY') +if (!dsqlEndpoint) + throw new Error('Set DSQL_ENDPOINT or run `terraform -chdir=terraform apply` first') + +const pipeline: PipelineConfig = { + source: { type: 'stripe', stripe: { api_key: stripeApiKey, backfill_limit: 10 } }, + destination: { + type: 'aws_dsql', + aws_dsql: { endpoint: dsqlEndpoint, region, schema: 'public' }, + }, + streams: [{ name: 'products' }, { name: 'prices' }, { name: 'customers' }], +} + +const resolver = await createConnectorResolver(defaultConnectors, { path: true }) +const engine = await createEngine(resolver) + +// Create tables +for await (const _msg of engine.pipeline_setup(pipeline)) { +} + +// State: file-backed, resumable across runs +const store = fileStateStore('.sync-state-dsql.json') +const state = await store.get() + +// Sync +for await (const msg of engine.pipeline_sync(pipeline, { state })) { + if (msg.type === 'source_state') { + if (msg.source_state.state_type === 'global') await store.setGlobal(msg.source_state.data) + else await store.set(msg.source_state.stream, msg.source_state.data) + } + console.log(JSON.stringify(msg)) +} + +// Verify: query DSQL to show what was synced +console.log('\n--- Verifying data in DSQL ---') +const poolConfig = await buildPoolConfig({ + endpoint: dsqlEndpoint, + region, + schema: 'public', + batch_size: 100, +}) +const pool = new pg.Pool(poolConfig) + +for (const table of ['customers', 'prices', 'products']) { + const { rows } = await pool.query(`SELECT count(*) FROM ${table}`) + console.log(`${table}: ${rows[0].count} rows`) +} + +console.log('\nSample rows:') +for (const table of ['customers', 'products']) { + const { rows } = await pool.query( + `SELECT id, substring(_raw_data, 1, 100) as data FROM ${table} LIMIT 2` + ) + for (const row of rows) console.log(` [${table}] ${row.id}: ${row.data}...`) +} + +await pool.end() diff --git a/packages/destination-aws-dsql/package.json b/packages/destination-aws-dsql/package.json new file mode 100644 index 000000000..1600357cc --- /dev/null +++ b/packages/destination-aws-dsql/package.json @@ -0,0 +1,32 @@ +{ + "name": "@stripe/sync-destination-aws-dsql", + "version": "0.1.0", + "private": false, + "type": "module", + "exports": { + ".": { + "bun": "./src/index.ts", + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "scripts": { + "build": "tsc", + "test": "vitest" + }, + "files": [ + "dist", + "src" + ], + "dependencies": { + "@aws-sdk/dsql-signer": "^3.1013.0", + "@stripe/sync-protocol": "workspace:*", + "@stripe/sync-util-postgres": "workspace:*", + "pg": "^8.16.3", + "zod": "^4.3.6" + }, + "devDependencies": { + "@types/pg": "^8.15.5", + "vitest": "^3.2.4" + } +} diff --git a/packages/destination-aws-dsql/src/index.ts b/packages/destination-aws-dsql/src/index.ts new file mode 100644 index 000000000..f3ff3a36f --- /dev/null +++ b/packages/destination-aws-dsql/src/index.ts @@ -0,0 +1,212 @@ +import pg from 'pg' +import type { PoolConfig } from 'pg' +import { DsqlSigner } from '@aws-sdk/dsql-signer' +import type { Destination, DestinationInput, LogMessage } from '@stripe/sync-protocol' +import { sql, upsert } from '@stripe/sync-util-postgres' +import defaultSpec from './spec.js' +import type { Config } from './spec.js' + +export { configSchema, type Config } from './spec.js' +export { default as pg } from 'pg' + +function logMsg(message: string, level: LogMessage['log']['level'] = 'info'): LogMessage { + return { type: 'log', log: { level, message } } +} + +/** Generate a fresh DSQL IAM auth token. */ +async function generateToken(endpoint: string, region: string): Promise { + const signer = new DsqlSigner({ hostname: endpoint, region }) + return signer.getDbConnectAdminAuthToken() +} + +/** Build a pg PoolConfig for DSQL with rotating IAM auth tokens. */ +export async function buildPoolConfig(config: Config): Promise { + const token = await generateToken(config.endpoint, config.region) + return { + host: config.endpoint, + port: 5432, + database: 'postgres', + user: 'admin', + password: token, + ssl: true, + } +} + +function createPool(poolConfig: PoolConfig): pg.Pool { + const pool = new pg.Pool(poolConfig) + pool.on('error', (err) => { + console.error('DSQL destination pool error:', err) + }) + return pool +} + +/** + * Build a CREATE TABLE IF NOT EXISTS statement for DSQL. + * + * DSQL does not support: triggers, generated columns, PL/pgSQL DO blocks, jsonb. + * We store _raw_data as text (JSON-serialized) with id as primary key. + */ +function buildCreateTableSQL(schema: string, tableName: string): string { + const q = (s: string) => `"${s.replace(/"/g, '""')}"` + return sql` + CREATE TABLE IF NOT EXISTS ${q(schema)}.${q(tableName)} ( + "id" text NOT NULL, + "_raw_data" text NOT NULL, + "_last_synced_at" timestamptz, + "_updated_at" timestamptz NOT NULL DEFAULT now(), + PRIMARY KEY ("id") + ) + ` +} + +/** + * Upsert records into a DSQL table. + * Explicitly sets _updated_at = now() since DSQL has no trigger support. + */ +async function upsertMany( + pool: pg.Pool, + schema: string, + table: string, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + entries: Record[] +): Promise { + if (!entries.length) return + await upsert( + pool, + entries.map((e) => ({ + id: String(e.id ?? ''), + _raw_data: JSON.stringify(e), + _updated_at: new Date().toISOString(), + })), + { + schema, + table, + keyColumns: ['id'], + noDiffColumns: ['_updated_at'], + } + ) +} + +/** Check if an error looks transient. */ +function isTransient(err: unknown): boolean { + if (!(err instanceof Error)) return false + const msg = err.message.toLowerCase() + return msg.includes('econnrefused') || msg.includes('timeout') || msg.includes('connection') +} + +const destination = { + async *spec() { + yield { type: 'spec' as const, spec: defaultSpec } + }, + + async *check({ config }) { + const pool = createPool(await buildPoolConfig(config)) + try { + await pool.query('SELECT 1') + yield { + type: 'connection_status' as const, + connection_status: { status: 'succeeded' as const }, + } + } catch (err) { + yield { + type: 'connection_status' as const, + connection_status: { + status: 'failed' as const, + message: err instanceof Error ? err.message : String(err), + }, + } + } finally { + await pool.end() + } + }, + + async *setup({ config, catalog }) { + const pool = createPool(await buildPoolConfig(config)) + try { + yield logMsg(`Creating schema "${config.schema}" (${catalog.streams.length} streams)`) + await pool.query(sql`CREATE SCHEMA IF NOT EXISTS "${config.schema}"`) + // DSQL requires sequential DDL — concurrent CREATE TABLE causes OC001 conflicts + for (const cs of catalog.streams) { + await pool.query(buildCreateTableSQL(config.schema, cs.stream.name)) + } + } finally { + await pool.end() + } + }, + + async *teardown({ config }) { + const PROTECTED = new Set(['public', 'information_schema', 'pg_catalog', 'pg_toast']) + if (PROTECTED.has(config.schema)) { + throw new Error(`Refusing to drop protected schema "${config.schema}"`) + } + const pool = createPool(await buildPoolConfig(config)) + try { + await pool.query(sql`DROP SCHEMA IF EXISTS "${config.schema}" CASCADE`) + } finally { + await pool.end() + } + }, + + async *write({ config }, $stdin) { + const pool = createPool(await buildPoolConfig(config)) + const batchSize = config.batch_size + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const streamBuffers = new Map[]>() + + const flushStream = async (streamName: string) => { + const buffer = streamBuffers.get(streamName) + if (!buffer || buffer.length === 0) return + await upsertMany(pool, config.schema, streamName, buffer) + streamBuffers.set(streamName, []) + } + + const flushAll = async () => { + for (const streamName of streamBuffers.keys()) { + await flushStream(streamName) + } + } + + try { + for await (const msg of $stdin as AsyncIterable) { + if (msg.type === 'record') { + const { stream, data } = msg.record + if (!streamBuffers.has(stream)) streamBuffers.set(stream, []) + const buffer = streamBuffers.get(stream)! + buffer.push(data as Record) + if (buffer.length >= batchSize) await flushStream(stream) + } else if (msg.type === 'source_state') { + if (msg.source_state.state_type !== 'global') { + await flushStream(msg.source_state.stream) + } + yield msg + } + } + await flushAll() + } catch (err: unknown) { + try { + await flushAll() + } catch { + // ignore flush errors during error handling + } + yield { + type: 'trace' as const, + trace: { + trace_type: 'error' as const, + error: { + failure_type: isTransient(err) + ? ('transient_error' as const) + : ('system_error' as const), + message: err instanceof Error ? err.message : String(err), + stack_trace: err instanceof Error ? err.stack : undefined, + }, + }, + } + } finally { + await pool.end() + } + + yield logMsg(`DSQL destination: wrote to schema "${config.schema}"`) + }, +} satisfies Destination + +export default destination diff --git a/packages/destination-aws-dsql/src/spec.ts b/packages/destination-aws-dsql/src/spec.ts new file mode 100644 index 000000000..eb0edb930 --- /dev/null +++ b/packages/destination-aws-dsql/src/spec.ts @@ -0,0 +1,15 @@ +import { z } from 'zod' +import type { ConnectorSpecification } from '@stripe/sync-protocol' + +export const configSchema = z.object({ + endpoint: z.string().describe('DSQL cluster endpoint (e.g. .dsql..on.aws)'), + region: z.string().describe('AWS region for the DSQL cluster'), + schema: z.string().default('public').describe('Target schema name'), + batch_size: z.number().default(100).describe('Records to buffer before flushing'), +}) + +export type Config = z.infer + +export default { + config: z.toJSONSchema(configSchema), +} satisfies ConnectorSpecification diff --git a/packages/destination-aws-dsql/tsconfig.json b/packages/destination-aws-dsql/tsconfig.json new file mode 100644 index 000000000..2481fe545 --- /dev/null +++ b/packages/destination-aws-dsql/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["src/**/*.test.ts", "src/**/__tests__/**"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d6fb5a91b..e5a3c26e5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -152,6 +152,9 @@ importers: '@scalar/hono-api-reference': specifier: ^0.6 version: 0.6.0(hono@4.12.8) + '@stripe/sync-destination-aws-dsql': + specifier: workspace:* + version: link:../../packages/destination-aws-dsql '@stripe/sync-destination-google-sheets': specifier: workspace:* version: link:../../packages/destination-google-sheets @@ -458,6 +461,31 @@ importers: specifier: ^3.2.1 version: 3.2.4(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.1) + packages/destination-aws-dsql: + dependencies: + '@aws-sdk/dsql-signer': + specifier: ^3.1013.0 + version: 3.1028.0 + '@stripe/sync-protocol': + specifier: workspace:* + version: link:../protocol + '@stripe/sync-util-postgres': + specifier: workspace:* + version: link:../util-postgres + pg: + specifier: ^8.16.3 + version: 8.16.3 + zod: + specifier: ^4.3.6 + version: 4.3.6 + devDependencies: + '@types/pg': + specifier: ^8.15.5 + version: 8.20.0 + vitest: + specifier: ^3.2.4 + version: 3.2.4(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.1) + packages/destination-google-sheets: dependencies: '@stripe/sync-protocol': @@ -703,6 +731,10 @@ packages: resolution: {integrity: sha512-lY6g5L95jBNgOUitUhfV2N/W+i08jHEl3xuLODYSQH5Sf50V+LkVYBSyZRLtv2RyuXZXiV7yQ+acpswK1tlrOA==} engines: {node: '>=20.0.0'} + '@aws-sdk/core@3.973.27': + resolution: {integrity: sha512-CUZ5m8hwMCH6OYI4Li/WgMfIEx10Q2PLI9Y3XOUTPGZJ53aZ0007jCv+X/ywsaERyKPdw5MRZWk877roQksQ4A==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-cognito-identity@3.972.15': resolution: {integrity: sha512-0AMijF7UtIZuYig8kUBYNa3Z+fLQ4Oid09T/hQYoBkJoJ4IVl8txw8f5KbfUScw8n9m2IuCd5VZLBo5g+NddYg==} engines: {node: '>=20.0.0'} @@ -711,46 +743,94 @@ packages: resolution: {integrity: sha512-vI0QN96DFx3g9AunfOWF3CS4cMkqFiR/WM/FyP9QHr5rZ2dKPkYwP3tCgAOvGuu9CXI7dC1vU2FVUuZ+tfpNvQ==} engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-env@3.972.25': + resolution: {integrity: sha512-6QfI0wv4jpG5CrdO/AO0JfZ2ux+tKwJPrUwmvxXF50vI5KIypKVGNF6b4vlkYEnKumDTI1NX2zUBi8JoU5QU3A==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-http@3.972.22': resolution: {integrity: sha512-aS/81smalpe7XDnuQfOq4LIPuaV2PRKU2aMTrHcqO5BD4HwO5kESOHNcec2AYfBtLtIDqgF6RXisgBnfK/jt0w==} engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-http@3.972.27': + resolution: {integrity: sha512-3V3Usj9Gs93h865DqN4M2NWJhC5kXU9BvZskfN3+69omuYlE3TZxOEcVQtBGLOloJB7BVfJKXVLqeNhOzHqSlQ==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-ini@3.972.22': resolution: {integrity: sha512-rpF8fBT0LllMDp78s62aL2A/8MaccjyJ0ORzqu+ZADeECLSrrCWIeeXsuRam+pxiAMkI1uIyDZJmgLGdadkPXw==} engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-ini@3.972.29': + resolution: {integrity: sha512-SiBuAnXecCbT/OpAf3vqyI/AVE3mTaYr9ShXLybxZiPLBiPCCOIWSGAtYYGQWMRvobBTiqOewaB+wcgMMZI2Aw==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-login@3.972.22': resolution: {integrity: sha512-u33CO9zeNznlVSg9tWTCRYxaGkqr1ufU6qeClpmzAabXZa8RZxQoVXxL5T53oZJFzQYj+FImORCSsi7H7B77gQ==} engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-login@3.972.29': + resolution: {integrity: sha512-OGOslTbOlxXexKMqhxCEbBQbUIfuhGxU5UXw3Fm56ypXHvrXH4aTt/xb5Y884LOoteP1QST1lVZzHfcTnWhiPQ==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-node@3.972.23': resolution: {integrity: sha512-U8tyLbLOZItuVWTH0ay9gWo4xMqZwqQbg1oMzdU4FQSkTpqXemm4X0uoKBR6llqAStgBp30ziKFJHTA43l4qMw==} engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-node@3.972.30': + resolution: {integrity: sha512-FMnAnWxc8PG+ZrZ2OBKzY4luCUJhe9CG0B9YwYr4pzrYGLXBS2rl+UoUvjGbAwiptxRL6hyA3lFn03Bv1TLqTw==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-process@3.972.20': resolution: {integrity: sha512-QRfk7GbA4/HDRjhP3QYR6QBr/QKreVoOzvvlRHnOuGgYJkeoPgPY3LAI1kK1ZMgZ4hH9KiGp757/ntol+INAig==} engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-process@3.972.25': + resolution: {integrity: sha512-HR7ynNRdNhNsdVCOCegy1HsfsRzozCOPtD3RzzT1JouuaHobWyRfJzCBue/3jP7gECHt+kQyZUvwg/cYLWurNQ==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-sso@3.972.22': resolution: {integrity: sha512-4vqlSaUbBj4aNPVKfB6yXuIQ2Z2mvLfIGba2OzzF6zUkN437/PGWsxBU2F8QPSFHti6seckvyCXidU3H+R8NvQ==} engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-sso@3.972.29': + resolution: {integrity: sha512-HWv4SEq3jZDYPlwryZVef97+U8CxxRos5mK8sgGO1dQaFZpV5giZLzqGE5hkDmh2csYcBO2uf5XHjPTpZcJlig==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-web-identity@3.972.22': resolution: {integrity: sha512-/wN1CYg2rVLhW8/jLxMWacQrkpaynnL+4j/Z+e6X1PfoE6NiC0BeOw3i0JmtZrKun85wNV5GmspvuWJihfeeUw==} engines: {node: '>=20.0.0'} + '@aws-sdk/credential-provider-web-identity@3.972.29': + resolution: {integrity: sha512-PdMBza1WEKEUPFEmMGCfnU2RYCz9MskU2e8JxjyUOsMKku7j9YaDKvbDi2dzC0ihFoM6ods2SbhfAAro+Gwlew==} + engines: {node: '>=20.0.0'} + '@aws-sdk/credential-providers@3.1013.0': resolution: {integrity: sha512-rKH7zPFYmxe+lWrVvgT920Ja1KEJFwg3jm3z2Nk6i4TedPUa0EwjLtgbgBesLG9EsY/WOF01SMC0d6BrY2wiWw==} engines: {node: '>=20.0.0'} + '@aws-sdk/dsql-signer@3.1028.0': + resolution: {integrity: sha512-qR38S0uKpU189SHnP85GXwSOU6MOetB2Ch7vT6wk5ABPHr0KOdKPsDCrxNYRKBxcw1+RNHYWzWRq0SMKW3JM8Q==} + engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-host-header@3.972.8': resolution: {integrity: sha512-wAr2REfKsqoKQ+OkNqvOShnBoh+nkPurDKW7uAeVSu6kUECnWlSJiPvnoqxGlfousEY/v9LfS9sNc46hjSYDIQ==} engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-host-header@3.972.9': + resolution: {integrity: sha512-je5vRdNw4SkuTnmRbFZLdye4sQ0faLt8kwka5wnnSU30q1mHO4X+idGEJOOE+Tn1ME7Oryn05xxkDvIb3UaLaQ==} + engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-logger@3.972.8': resolution: {integrity: sha512-CWl5UCM57WUFaFi5kB7IBY1UmOeLvNZAZ2/OZ5l20ldiJ3TiIz1pC65gYj8X0BCPWkeR1E32mpsCk1L1I4n+lA==} engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-logger@3.972.9': + resolution: {integrity: sha512-HsVgDrruhqI28RkaXALm8grJ7Agc1wF6Et0xh6pom8NdO2VdO/SD9U/tPwUjewwK/pVoka+EShBxyCvgsPCtog==} + engines: {node: '>=20.0.0'} + + '@aws-sdk/middleware-recursion-detection@3.972.10': + resolution: {integrity: sha512-RVQQbq5orQ/GHUnXvqEOj2HHPBJm+mM+ySwZKS5UaLBwra5ugRtiH09PLUoOZRl7a1YzaOzXSuGbn9iD5j60WQ==} + engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-recursion-detection@3.972.8': resolution: {integrity: sha512-BnnvYs2ZEpdlmZ2PNlV2ZyQ8j8AEkMTjN79y/YA475ER1ByFYrkVR85qmhni8oeTaJcDqbx364wDpitDAA/wCA==} engines: {node: '>=20.0.0'} @@ -759,14 +839,26 @@ packages: resolution: {integrity: sha512-HQu8QoqGZZTvg0Spl9H39QTsSMFwgu+8yz/QGKndXFLk9FZMiCiIgBCVlTVKMDvVbgqIzD9ig+/HmXsIL2Rb+g==} engines: {node: '>=20.0.0'} + '@aws-sdk/middleware-user-agent@3.972.29': + resolution: {integrity: sha512-f/sIRzuTfEjg6NsbMYvye2VsmnQoNgntntleQyx5uGacUYzszbfIlO3GcI6G6daWUmTm0IDZc11qMHWwF0o0mQ==} + engines: {node: '>=20.0.0'} + '@aws-sdk/nested-clients@3.996.12': resolution: {integrity: sha512-KLdQGJPSm98uLINolQ0Tol8OAbk7g0Y7zplHJ1K83vbMIH13aoCvR6Tho66xueW4l4aZlEgVGLWBnD8ifUMsGQ==} engines: {node: '>=20.0.0'} + '@aws-sdk/nested-clients@3.996.19': + resolution: {integrity: sha512-uFkmCDXvmQYLanlYdOFS0+MQWkrj9wPMt/ZCc/0J0fjPim6F5jBVBmEomvGY/j77ILW6GTPwN22Jc174Mhkw6Q==} + engines: {node: '>=20.0.0'} + '@aws-sdk/rds-signer@3.1013.0': resolution: {integrity: sha512-xhREjfoXDlisGyRHT2jB4YjhFdUEMuTTwlwE+tccNxichmMB6d9ab/YthSsS5QQrIND59svNGrJF5F5eXu6jog==} engines: {node: '>=20.0.0'} + '@aws-sdk/region-config-resolver@3.972.11': + resolution: {integrity: sha512-6Q8B1dcx6BBqUTY1Mc/eROKA0FImEEY5VPSd6AGPEUf0ErjExz4snVqa9kNJSoVDV1rKaNf3qrWojgcKW+SdDg==} + engines: {node: '>=20.0.0'} + '@aws-sdk/region-config-resolver@3.972.8': resolution: {integrity: sha512-1eD4uhTDeambO/PNIDVG19A6+v4NdD7xzwLHDutHsUqz0B+i661MwQB2eYO4/crcCvCiQG4SRm1k81k54FEIvw==} engines: {node: '>=20.0.0'} @@ -775,18 +867,34 @@ packages: resolution: {integrity: sha512-IL1c54UvbuERrs9oLm5rvkzMciwhhpn1FL0SlC3XUMoLlFhdBsWJgQKK8O5fsQLxbFVqjbjFx9OBkrn44X9PHw==} engines: {node: '>=20.0.0'} + '@aws-sdk/token-providers@3.1026.0': + resolution: {integrity: sha512-Ieq/HiRrbEtrYP387Nes0XlR7H1pJiJOZKv+QyQzMYpvTiDs0VKy2ZB3E2Zf+aFovWmeE7lRE4lXyF7dYM6GgA==} + engines: {node: '>=20.0.0'} + '@aws-sdk/types@3.973.6': resolution: {integrity: sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw==} engines: {node: '>=20.0.0'} + '@aws-sdk/types@3.973.7': + resolution: {integrity: sha512-reXRwoJ6CfChoqAsBszUYajAF8Z2LRE+CRcKocvFSMpIiLOtYU3aJ9trmn6VVPAzbbY5LXF+FfmUslbXk1SYFg==} + engines: {node: '>=20.0.0'} + '@aws-sdk/util-endpoints@3.996.5': resolution: {integrity: sha512-Uh93L5sXFNbyR5sEPMzUU8tJ++Ku97EY4udmC01nB8Zu+xfBPwpIwJ6F7snqQeq8h2pf+8SGN5/NoytfKgYPIw==} engines: {node: '>=20.0.0'} + '@aws-sdk/util-endpoints@3.996.6': + resolution: {integrity: sha512-2nUQ+2ih7CShuKHpGSIYvvAIOHy52dOZguYG36zptBukhw6iFwcvGfG0tes0oZFWQqEWvgZe9HLWaNlvXGdOrg==} + engines: {node: '>=20.0.0'} + '@aws-sdk/util-format-url@3.972.8': resolution: {integrity: sha512-J6DS9oocrgxM8xlUTTmQOuwRF6rnAGEujAN9SAzllcrQmwn5iJ58ogxy3SEhD0Q7JZvlA5jvIXBkpQRqEqlE9A==} engines: {node: '>=20.0.0'} + '@aws-sdk/util-format-url@3.972.9': + resolution: {integrity: sha512-fNJXHrs0ZT7Wx0KGIqKv7zLxlDXt2vqjx9z6oKUQFmpE5o4xxnSryvVHfHpIifYHWKz94hFccIldJ0YSZjlCBw==} + engines: {node: '>=20.0.0'} + '@aws-sdk/util-locate-window@3.965.5': resolution: {integrity: sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ==} engines: {node: '>=20.0.0'} @@ -794,6 +902,18 @@ packages: '@aws-sdk/util-user-agent-browser@3.972.8': resolution: {integrity: sha512-B3KGXJviV2u6Cdw2SDY2aDhoJkVfY/Q/Trwk2CMSkikE1Oi6gRzxhvhIfiRpHfmIsAhV4EA54TVEX8K6CbHbkA==} + '@aws-sdk/util-user-agent-browser@3.972.9': + resolution: {integrity: sha512-sn/LMzTbGjYqCCF24390WxPd6hkpoSptiUn5DzVp4cD71yqw+yGEGm1YCxyEoPXyc8qciM8UzLJcZBFslxo5Uw==} + + '@aws-sdk/util-user-agent-node@3.973.15': + resolution: {integrity: sha512-fYn3s9PtKdgQkczGZCFMgkNEe8aq1JCVbnRqjqN9RSVW43xn2RV9xdcZ3z01a48Jpkuh/xCmBKJxdLOo4Ozg7w==} + engines: {node: '>=20.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + '@aws-sdk/util-user-agent-node@3.973.9': resolution: {integrity: sha512-jeFqqp8KD/P5O+qeKxyGeu7WEVIZFNprnkaDjGmBOjwxYwafCBhpxTgV1TlW6L8e76Vh/siNylNmN/OmSIFBUQ==} engines: {node: '>=20.0.0'} @@ -807,6 +927,10 @@ packages: resolution: {integrity: sha512-G/Yd8Bnnyh8QrqLf8jWJbixEnScUFW24e/wOBGYdw1Cl4r80KX/DvHyM2GVZ2vTp7J4gTEr8IXJlTadA8+UfuQ==} engines: {node: '>=20.0.0'} + '@aws-sdk/xml-builder@3.972.17': + resolution: {integrity: sha512-Ra7hjqAZf1OXRRMueB13qex7mFJRDK/pgCvdSFemXBT8KCGnQDPoKzHY1SjN+TjJVmnpSF14W5tJ1vDamFu+Gg==} + engines: {node: '>=20.0.0'} + '@aws/lambda-invoke-store@0.2.4': resolution: {integrity: sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ==} engines: {node: '>=18.0.0'} @@ -2431,26 +2555,50 @@ packages: resolution: {integrity: sha512-iIzMC5NmOUP6WL6o8iPBjFhUhBZ9pPjpUpQYWMUFQqKyXXzOftbfK8zcQCz/jFV1Psmf05BK5ypx4K2r4Tnwdg==} engines: {node: '>=18.0.0'} + '@smithy/config-resolver@4.4.14': + resolution: {integrity: sha512-N55f8mPEccpzKetUagdvmAy8oohf0J5cuj9jLI1TaSceRlq0pJsIZepY3kmAXAhyxqXPV6hDerDQhqQPKWgAoQ==} + engines: {node: '>=18.0.0'} + '@smithy/core@3.23.12': resolution: {integrity: sha512-o9VycsYNtgC+Dy3I0yrwCqv9CWicDnke0L7EVOrZtJpjb2t0EjaEofmMrYc0T1Kn3yk32zm6cspxF9u9Bj7e5w==} engines: {node: '>=18.0.0'} + '@smithy/core@3.23.14': + resolution: {integrity: sha512-vJ0IhpZxZAkFYOegMKSrxw7ujhhT2pass/1UEcZ4kfl5srTAqtPU5I7MdYQoreVas3204ykCiNhY1o7Xlz6Yyg==} + engines: {node: '>=18.0.0'} + '@smithy/credential-provider-imds@4.2.12': resolution: {integrity: sha512-cr2lR792vNZcYMriSIj+Um3x9KWrjcu98kn234xA6reOAFMmbRpQMOv8KPgEmLLtx3eldU6c5wALKFqNOhugmg==} engines: {node: '>=18.0.0'} + '@smithy/credential-provider-imds@4.2.13': + resolution: {integrity: sha512-wboCPijzf6RJKLOvnjDAiBxGSmSnGXj35o5ZAWKDaHa/cvQ5U3ZJ13D4tMCE8JG4dxVAZFy/P0x/V9CwwdfULQ==} + engines: {node: '>=18.0.0'} + '@smithy/fetch-http-handler@5.3.15': resolution: {integrity: sha512-T4jFU5N/yiIfrtrsb9uOQn7RdELdM/7HbyLNr6uO/mpkj1ctiVs7CihVr51w4LyQlXWDpXFn4BElf1WmQvZu/A==} engines: {node: '>=18.0.0'} + '@smithy/fetch-http-handler@5.3.16': + resolution: {integrity: sha512-nYDRUIvNd4mFmuXraRWt6w5UsZTNqtj4hXJA/iiOD4tuseIdLP9Lq38teH/SZTcIFCa2f+27o7hYpIsWktJKEQ==} + engines: {node: '>=18.0.0'} + '@smithy/hash-node@4.2.12': resolution: {integrity: sha512-QhBYbGrbxTkZ43QoTPrK72DoYviDeg6YKDrHTMJbbC+A0sml3kSjzFtXP7BtbyJnXojLfTQldGdUR0RGD8dA3w==} engines: {node: '>=18.0.0'} + '@smithy/hash-node@4.2.13': + resolution: {integrity: sha512-4/oy9h0jjmY80a2gOIo75iLl8TOPhmtx4E2Hz+PfMjvx/vLtGY4TMU/35WRyH2JHPfT5CVB38u4JRow7gnmzJA==} + engines: {node: '>=18.0.0'} + '@smithy/invalid-dependency@4.2.12': resolution: {integrity: sha512-/4F1zb7Z8LOu1PalTdESFHR0RbPwHd3FcaG1sI3UEIriQTWakysgJr65lc1jj6QY5ye7aFsisajotH6UhWfm/g==} engines: {node: '>=18.0.0'} + '@smithy/invalid-dependency@4.2.13': + resolution: {integrity: sha512-jvC0RB/8BLj2SMIkY0Npl425IdnxZJxInpZJbu563zIRnVjpDMXevU3VMCRSabaLB0kf/eFIOusdGstrLJ8IDg==} + engines: {node: '>=18.0.0'} + '@smithy/is-array-buffer@2.2.0': resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} engines: {node: '>=14.0.0'} @@ -2463,70 +2611,138 @@ packages: resolution: {integrity: sha512-YE58Yz+cvFInWI/wOTrB+DbvUVz/pLn5mC5MvOV4fdRUc6qGwygyngcucRQjAhiCEbmfLOXX0gntSIcgMvAjmA==} engines: {node: '>=18.0.0'} + '@smithy/middleware-content-length@4.2.13': + resolution: {integrity: sha512-IPMLm/LE4AZwu6qiE8Rr8vJsWhs9AtOdySRXrOM7xnvclp77Tyh7hMs/FRrMf26kgIe67vFJXXOSmVxS7oKeig==} + engines: {node: '>=18.0.0'} + '@smithy/middleware-endpoint@4.4.27': resolution: {integrity: sha512-T3TFfUgXQlpcg+UdzcAISdZpj4Z+XECZ/cefgA6wLBd6V4lRi0svN2hBouN/be9dXQ31X4sLWz3fAQDf+nt6BA==} engines: {node: '>=18.0.0'} + '@smithy/middleware-endpoint@4.4.29': + resolution: {integrity: sha512-R9Q/58U+qBiSARGWbAbFLczECg/RmysRksX6Q8BaQEpt75I7LI6WGDZnjuC9GXSGKljEbA7N118LhGaMbfrTXw==} + engines: {node: '>=18.0.0'} + '@smithy/middleware-retry@4.4.44': resolution: {integrity: sha512-Y1Rav7m5CFRPQyM4CI0koD/bXjyjJu3EQxZZhtLGD88WIrBrQ7kqXM96ncd6rYnojwOo/u9MXu57JrEvu/nLrA==} engines: {node: '>=18.0.0'} + '@smithy/middleware-retry@4.5.1': + resolution: {integrity: sha512-/zY+Gp7Qj2D2hVm3irkCyONER7E9MiX3cUUm/k2ZmhkzZkrPgwVS4aJ5NriZUEN/M0D1hhjrgjUmX04HhRwdWA==} + engines: {node: '>=18.0.0'} + '@smithy/middleware-serde@4.2.15': resolution: {integrity: sha512-ExYhcltZSli0pgAKOpQQe1DLFBLryeZ22605y/YS+mQpdNWekum9Ujb/jMKfJKgjtz1AZldtwA/wCYuKJgjjlg==} engines: {node: '>=18.0.0'} + '@smithy/middleware-serde@4.2.17': + resolution: {integrity: sha512-0T2mcaM6v9W1xku86Dk0bEW7aEseG6KenFkPK98XNw0ZhOqOiD1MrMsdnQw9QsL3/Oa85T53iSMlm0SZdSuIEQ==} + engines: {node: '>=18.0.0'} + '@smithy/middleware-stack@4.2.12': resolution: {integrity: sha512-kruC5gRHwsCOuyCd4ouQxYjgRAym2uDlCvQ5acuMtRrcdfg7mFBg6blaxcJ09STpt3ziEkis6bhg1uwrWU7txw==} engines: {node: '>=18.0.0'} + '@smithy/middleware-stack@4.2.13': + resolution: {integrity: sha512-g72jN/sGDLyTanrCLH9fhg3oysO3f7tQa6eWWsMyn2BiYNCgjF24n4/I9wff/5XidFvjj9ilipAoQrurTUrLvw==} + engines: {node: '>=18.0.0'} + '@smithy/node-config-provider@4.3.12': resolution: {integrity: sha512-tr2oKX2xMcO+rBOjobSwVAkV05SIfUKz8iI53rzxEmgW3GOOPOv0UioSDk+J8OpRQnpnhsO3Af6IEBabQBVmiw==} engines: {node: '>=18.0.0'} + '@smithy/node-config-provider@4.3.13': + resolution: {integrity: sha512-iGxQ04DsKXLckbgnX4ipElrOTk+IHgTyu0q0WssZfYhDm9CQWHmu6cOeI5wmWRxpXbBDhIIfXMWz5tPEtcVqbw==} + engines: {node: '>=18.0.0'} + '@smithy/node-http-handler@4.5.0': resolution: {integrity: sha512-Rnq9vQWiR1+/I6NZZMNzJHV6pZYyEHt2ZnuV3MG8z2NNenC4i/8Kzttz7CjZiHSmsN5frhXhg17z3Zqjjhmz1A==} engines: {node: '>=18.0.0'} + '@smithy/node-http-handler@4.5.2': + resolution: {integrity: sha512-/oD7u8M0oj2ZTFw7GkuuHWpIxtWdLlnyNkbrWcyVYhd5RJNDuczdkb0wfnQICyNFrVPlr8YHOhamjNy3zidhmA==} + engines: {node: '>=18.0.0'} + '@smithy/property-provider@4.2.12': resolution: {integrity: sha512-jqve46eYU1v7pZ5BM+fmkbq3DerkSluPr5EhvOcHxygxzD05ByDRppRwRPPpFrsFo5yDtCYLKu+kreHKVrvc7A==} engines: {node: '>=18.0.0'} + '@smithy/property-provider@4.2.13': + resolution: {integrity: sha512-bGzUCthxRmezuxkbu9wD33wWg9KX3hJpCXpQ93vVkPrHn9ZW6KNNdY5xAUWNuRCwQ+VyboFuWirG1lZhhkcyRQ==} + engines: {node: '>=18.0.0'} + '@smithy/protocol-http@5.3.12': resolution: {integrity: sha512-fit0GZK9I1xoRlR4jXmbLhoN0OdEpa96ul8M65XdmXnxXkuMxM0Y8HDT0Fh0Xb4I85MBvBClOzgSrV1X2s1Hxw==} engines: {node: '>=18.0.0'} + '@smithy/protocol-http@5.3.13': + resolution: {integrity: sha512-+HsmuJUF4u8POo6s8/a2Yb/AQ5t/YgLovCuHF9oxbocqv+SZ6gd8lC2duBFiCA/vFHoHQhoq7QjqJqZC6xOxxg==} + engines: {node: '>=18.0.0'} + '@smithy/querystring-builder@4.2.12': resolution: {integrity: sha512-6wTZjGABQufekycfDGMEB84BgtdOE/rCVTov+EDXQ8NHKTUNIp/j27IliwP7tjIU9LR+sSzyGBOXjeEtVgzCHg==} engines: {node: '>=18.0.0'} + '@smithy/querystring-builder@4.2.13': + resolution: {integrity: sha512-tG4aOYFCZdPMjbgfhnIQ322H//ojujldp1SrHPHpBSb3NqgUp3dwiUGRJzie87hS1DYwWGqDuPaowoDF+rYCbQ==} + engines: {node: '>=18.0.0'} + '@smithy/querystring-parser@4.2.12': resolution: {integrity: sha512-P2OdvrgiAKpkPNKlKUtWbNZKB1XjPxM086NeVhK+W+wI46pIKdWBe5QyXvhUm3MEcyS/rkLvY8rZzyUdmyDZBw==} engines: {node: '>=18.0.0'} + '@smithy/querystring-parser@4.2.13': + resolution: {integrity: sha512-hqW3Q4P+CDzUyQ87GrboGMeD7XYNMOF+CuTwu936UQRB/zeYn3jys8C3w+wMkDfY7CyyyVwZQ5cNFoG0x1pYmA==} + engines: {node: '>=18.0.0'} + '@smithy/service-error-classification@4.2.12': resolution: {integrity: sha512-LlP29oSQN0Tw0b6D0Xo6BIikBswuIiGYbRACy5ujw/JgWSzTdYj46U83ssf6Ux0GyNJVivs2uReU8pt7Eu9okQ==} engines: {node: '>=18.0.0'} + '@smithy/service-error-classification@4.2.13': + resolution: {integrity: sha512-a0s8XZMfOC/qpqq7RCPvJlk93rWFrElH6O++8WJKz0FqnA4Y7fkNi/0mnGgSH1C4x6MFsuBA8VKu4zxFrMe5Vw==} + engines: {node: '>=18.0.0'} + '@smithy/shared-ini-file-loader@4.4.7': resolution: {integrity: sha512-HrOKWsUb+otTeo1HxVWeEb99t5ER1XrBi/xka2Wv6NVmTbuCUC1dvlrksdvxFtODLBjsC+PHK+fuy2x/7Ynyiw==} engines: {node: '>=18.0.0'} + '@smithy/shared-ini-file-loader@4.4.8': + resolution: {integrity: sha512-VZCZx2bZasxdqxVgEAhREvDSlkatTPnkdWy1+Kiy8w7kYPBosW0V5IeDwzDUMvWBt56zpK658rx1cOBFOYaPaw==} + engines: {node: '>=18.0.0'} + '@smithy/signature-v4@5.3.12': resolution: {integrity: sha512-B/FBwO3MVOL00DaRSXfXfa/TRXRheagt/q5A2NM13u7q+sHS59EOVGQNfG7DkmVtdQm5m3vOosoKAXSqn/OEgw==} engines: {node: '>=18.0.0'} + '@smithy/signature-v4@5.3.13': + resolution: {integrity: sha512-YpYSyM0vMDwKbHD/JA7bVOF6kToVRpa+FM5ateEVRpsTNu564g1muBlkTubXhSKKYXInhpADF46FPyrZcTLpXg==} + engines: {node: '>=18.0.0'} + '@smithy/smithy-client@4.12.7': resolution: {integrity: sha512-q3gqnwml60G44FECaEEsdQMplYhDMZYCtYhMCzadCnRnnHIobZJjegmdoUo6ieLQlPUzvrMdIJUpx6DoPmzANQ==} engines: {node: '>=18.0.0'} + '@smithy/smithy-client@4.12.9': + resolution: {integrity: sha512-ovaLEcTU5olSeHcRXcxV6viaKtpkHZumn6Ps0yn7dRf2rRSfy794vpjOtrWDO0d1auDSvAqxO+lyhERSXQ03EQ==} + engines: {node: '>=18.0.0'} + '@smithy/types@4.13.1': resolution: {integrity: sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==} engines: {node: '>=18.0.0'} + '@smithy/types@4.14.0': + resolution: {integrity: sha512-OWgntFLW88kx2qvf/c/67Vno1yuXm/f9M7QFAtVkkO29IJXGBIg0ycEaBTH0kvCtwmvZxRujrgP5a86RvsXJAQ==} + engines: {node: '>=18.0.0'} + '@smithy/url-parser@4.2.12': resolution: {integrity: sha512-wOPKPEpso+doCZGIlr+e1lVI6+9VAKfL4kZWFgzVgGWY2hZxshNKod4l2LXS3PRC9otH/JRSjtEHqQ/7eLciRA==} engines: {node: '>=18.0.0'} + '@smithy/url-parser@4.2.13': + resolution: {integrity: sha512-2G03yoboIRZlZze2+PT4GZEjgwQsJjUgn6iTsvxA02bVceHR6vp4Cuk7TUnPFWKF+ffNUk3kj4COwkENS2K3vw==} + engines: {node: '>=18.0.0'} + '@smithy/util-base64@4.3.2': resolution: {integrity: sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ==} engines: {node: '>=18.0.0'} @@ -2555,14 +2771,26 @@ packages: resolution: {integrity: sha512-Qd/0wCKMaXxev/z00TvNzGCH2jlKKKxXP1aDxB6oKwSQthe3Og2dMhSayGCnsma1bK/kQX1+X7SMP99t6FgiiQ==} engines: {node: '>=18.0.0'} + '@smithy/util-defaults-mode-browser@4.3.45': + resolution: {integrity: sha512-ag9sWc6/nWZAuK3Wm9KlFJUnRkXLrXn33RFjIAmCTFThqLHY+7wCst10BGq56FxslsDrjhSie46c8OULS+BiIw==} + engines: {node: '>=18.0.0'} + '@smithy/util-defaults-mode-node@4.2.47': resolution: {integrity: sha512-qSRbYp1EQ7th+sPFuVcVO05AE0QH635hycdEXlpzIahqHHf2Fyd/Zl+8v0XYMJ3cgDVPa0lkMefU7oNUjAP+DQ==} engines: {node: '>=18.0.0'} + '@smithy/util-defaults-mode-node@4.2.49': + resolution: {integrity: sha512-jlN6vHwE8gY5AfiFBavtD3QtCX2f7lM3BKkz7nFKSNfFR5nXLXLg6sqXTJEEyDwtxbztIDBQCfjsGVXlIru2lQ==} + engines: {node: '>=18.0.0'} + '@smithy/util-endpoints@3.3.3': resolution: {integrity: sha512-VACQVe50j0HZPjpwWcjyT51KUQ4AnsvEaQ2lKHOSL4mNLD0G9BjEniQ+yCt1qqfKfiAHRAts26ud7hBjamrwig==} engines: {node: '>=18.0.0'} + '@smithy/util-endpoints@3.3.4': + resolution: {integrity: sha512-BKoR/ubPp9KNKFxPpg1J28N1+bgu8NGAtJblBP7yHy8yQPBWhIAv9+l92SlQLpolGm71CVO+btB60gTgzT0wog==} + engines: {node: '>=18.0.0'} + '@smithy/util-hex-encoding@4.2.2': resolution: {integrity: sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg==} engines: {node: '>=18.0.0'} @@ -2571,14 +2799,26 @@ packages: resolution: {integrity: sha512-Er805uFUOvgc0l8nv0e0su0VFISoxhJ/AwOn3gL2NWNY2LUEldP5WtVcRYSQBcjg0y9NfG8JYrCJaYDpupBHJQ==} engines: {node: '>=18.0.0'} + '@smithy/util-middleware@4.2.13': + resolution: {integrity: sha512-GTooyrlmRTqvUen4eK7/K1p6kryF7bnDfq6XsAbIsf2mo51B/utaH+XThY6dKgNCWzMAaH/+OLmqaBuLhLWRow==} + engines: {node: '>=18.0.0'} + '@smithy/util-retry@4.2.12': resolution: {integrity: sha512-1zopLDUEOwumjcHdJ1mwBHddubYF8GMQvstVCLC54Y46rqoHwlIU+8ZzUeaBcD+WCJHyDGSeZ2ml9YSe9aqcoQ==} engines: {node: '>=18.0.0'} + '@smithy/util-retry@4.3.1': + resolution: {integrity: sha512-FwmicpgWOkP5kZUjN3y+3JIom8NLGqSAJBeoIgK0rIToI817TEBHCrd0A2qGeKQlgDeP+Jzn4i0H/NLAXGy9uQ==} + engines: {node: '>=18.0.0'} + '@smithy/util-stream@4.5.20': resolution: {integrity: sha512-4yXLm5n/B5SRBR2p8cZ90Sbv4zL4NKsgxdzCzp/83cXw2KxLEumt5p+GAVyRNZgQOSrzXn9ARpO0lUe8XSlSDw==} engines: {node: '>=18.0.0'} + '@smithy/util-stream@4.5.22': + resolution: {integrity: sha512-3H8iq/0BfQjUs2/4fbHZ9aG9yNzcuZs24LPkcX1Q7Z+qpqaGM8+qbGmE8zo9m2nCRgamyvS98cHdcWvR6YUsew==} + engines: {node: '>=18.0.0'} + '@smithy/util-uri-escape@4.2.2': resolution: {integrity: sha512-2kAStBlvq+lTXHyAZYfJRb/DfS3rsinLiwb+69SstC9Vb0s9vNWkRwpnj918Pfi85mzi42sOqdV72OLxWAISnw==} engines: {node: '>=18.0.0'} @@ -2595,6 +2835,9 @@ packages: resolution: {integrity: sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g==} engines: {node: '>=18.0.0'} + '@stripe/sync-destination-aws-dsql@file:packages/destination-aws-dsql': + resolution: {directory: packages/destination-aws-dsql, type: directory} + '@stripe/sync-destination-google-sheets@file:packages/destination-google-sheets': resolution: {directory: packages/destination-google-sheets, type: directory} hasBin: true @@ -3604,6 +3847,10 @@ packages: resolution: {integrity: sha512-3+fdZyBRVg29n4rXP0joHthhcHdPUHaIC16cuyyd1iLsuaO6Vea36MPrxgAzbZna8lhvZeRL8Bc9GP56/J9xEw==} hasBin: true + fast-xml-parser@5.5.8: + resolution: {integrity: sha512-Z7Fh2nVQSb2d+poDViM063ix2ZGt9jmY1nWhPfHBOK2Hgnb/OW3P4Et3P/81SEej0J7QbWtJqxO05h8QYfK7LQ==} + hasBin: true + fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} @@ -4248,6 +4495,10 @@ packages: resolution: {integrity: sha512-qdVgY8KXmVdJZRSS1JdEPOKPdTiEK/pi0RkcT2sw1RhXxohdujUlJFPuS1TSkevZ9vzd3ZlL7ULl1MHGTApKzQ==} engines: {node: '>=14.0.0'} + path-expression-matcher@1.5.0: + resolution: {integrity: sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==} + engines: {node: '>=14.0.0'} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -5272,6 +5523,22 @@ snapshots: '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 + '@aws-sdk/core@3.973.27': + dependencies: + '@aws-sdk/types': 3.973.7 + '@aws-sdk/xml-builder': 3.972.17 + '@smithy/core': 3.23.14 + '@smithy/node-config-provider': 4.3.13 + '@smithy/property-provider': 4.2.13 + '@smithy/protocol-http': 5.3.13 + '@smithy/signature-v4': 5.3.13 + '@smithy/smithy-client': 4.12.9 + '@smithy/types': 4.14.0 + '@smithy/util-base64': 4.3.2 + '@smithy/util-middleware': 4.2.13 + '@smithy/util-utf8': 4.2.2 + tslib: 2.8.1 + '@aws-sdk/credential-provider-cognito-identity@3.972.15': dependencies: '@aws-sdk/nested-clients': 3.996.12 @@ -5290,6 +5557,14 @@ snapshots: '@smithy/types': 4.13.1 tslib: 2.8.1 + '@aws-sdk/credential-provider-env@3.972.25': + dependencies: + '@aws-sdk/core': 3.973.27 + '@aws-sdk/types': 3.973.7 + '@smithy/property-provider': 4.2.13 + '@smithy/types': 4.14.0 + tslib: 2.8.1 + '@aws-sdk/credential-provider-http@3.972.22': dependencies: '@aws-sdk/core': 3.973.22 @@ -5303,6 +5578,19 @@ snapshots: '@smithy/util-stream': 4.5.20 tslib: 2.8.1 + '@aws-sdk/credential-provider-http@3.972.27': + dependencies: + '@aws-sdk/core': 3.973.27 + '@aws-sdk/types': 3.973.7 + '@smithy/fetch-http-handler': 5.3.16 + '@smithy/node-http-handler': 4.5.2 + '@smithy/property-provider': 4.2.13 + '@smithy/protocol-http': 5.3.13 + '@smithy/smithy-client': 4.12.9 + '@smithy/types': 4.14.0 + '@smithy/util-stream': 4.5.22 + tslib: 2.8.1 + '@aws-sdk/credential-provider-ini@3.972.22': dependencies: '@aws-sdk/core': 3.973.22 @@ -5322,6 +5610,25 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/credential-provider-ini@3.972.29': + dependencies: + '@aws-sdk/core': 3.973.27 + '@aws-sdk/credential-provider-env': 3.972.25 + '@aws-sdk/credential-provider-http': 3.972.27 + '@aws-sdk/credential-provider-login': 3.972.29 + '@aws-sdk/credential-provider-process': 3.972.25 + '@aws-sdk/credential-provider-sso': 3.972.29 + '@aws-sdk/credential-provider-web-identity': 3.972.29 + '@aws-sdk/nested-clients': 3.996.19 + '@aws-sdk/types': 3.973.7 + '@smithy/credential-provider-imds': 4.2.13 + '@smithy/property-provider': 4.2.13 + '@smithy/shared-ini-file-loader': 4.4.8 + '@smithy/types': 4.14.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/credential-provider-login@3.972.22': dependencies: '@aws-sdk/core': 3.973.22 @@ -5335,6 +5642,19 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/credential-provider-login@3.972.29': + dependencies: + '@aws-sdk/core': 3.973.27 + '@aws-sdk/nested-clients': 3.996.19 + '@aws-sdk/types': 3.973.7 + '@smithy/property-provider': 4.2.13 + '@smithy/protocol-http': 5.3.13 + '@smithy/shared-ini-file-loader': 4.4.8 + '@smithy/types': 4.14.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/credential-provider-node@3.972.23': dependencies: '@aws-sdk/credential-provider-env': 3.972.20 @@ -5352,6 +5672,23 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/credential-provider-node@3.972.30': + dependencies: + '@aws-sdk/credential-provider-env': 3.972.25 + '@aws-sdk/credential-provider-http': 3.972.27 + '@aws-sdk/credential-provider-ini': 3.972.29 + '@aws-sdk/credential-provider-process': 3.972.25 + '@aws-sdk/credential-provider-sso': 3.972.29 + '@aws-sdk/credential-provider-web-identity': 3.972.29 + '@aws-sdk/types': 3.973.7 + '@smithy/credential-provider-imds': 4.2.13 + '@smithy/property-provider': 4.2.13 + '@smithy/shared-ini-file-loader': 4.4.8 + '@smithy/types': 4.14.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/credential-provider-process@3.972.20': dependencies: '@aws-sdk/core': 3.973.22 @@ -5361,6 +5698,15 @@ snapshots: '@smithy/types': 4.13.1 tslib: 2.8.1 + '@aws-sdk/credential-provider-process@3.972.25': + dependencies: + '@aws-sdk/core': 3.973.27 + '@aws-sdk/types': 3.973.7 + '@smithy/property-provider': 4.2.13 + '@smithy/shared-ini-file-loader': 4.4.8 + '@smithy/types': 4.14.0 + tslib: 2.8.1 + '@aws-sdk/credential-provider-sso@3.972.22': dependencies: '@aws-sdk/core': 3.973.22 @@ -5374,6 +5720,19 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/credential-provider-sso@3.972.29': + dependencies: + '@aws-sdk/core': 3.973.27 + '@aws-sdk/nested-clients': 3.996.19 + '@aws-sdk/token-providers': 3.1026.0 + '@aws-sdk/types': 3.973.7 + '@smithy/property-provider': 4.2.13 + '@smithy/shared-ini-file-loader': 4.4.8 + '@smithy/types': 4.14.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/credential-provider-web-identity@3.972.22': dependencies: '@aws-sdk/core': 3.973.22 @@ -5386,6 +5745,18 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/credential-provider-web-identity@3.972.29': + dependencies: + '@aws-sdk/core': 3.973.27 + '@aws-sdk/nested-clients': 3.996.19 + '@aws-sdk/types': 3.973.7 + '@smithy/property-provider': 4.2.13 + '@smithy/shared-ini-file-loader': 4.4.8 + '@smithy/types': 4.14.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/credential-providers@3.1013.0': dependencies: '@aws-sdk/client-cognito-identity': 3.1013.0 @@ -5411,6 +5782,23 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/dsql-signer@3.1028.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/credential-provider-node': 3.972.30 + '@aws-sdk/util-format-url': 3.972.9 + '@smithy/config-resolver': 4.4.14 + '@smithy/hash-node': 4.2.13 + '@smithy/invalid-dependency': 4.2.13 + '@smithy/node-config-provider': 4.3.13 + '@smithy/protocol-http': 5.3.13 + '@smithy/signature-v4': 5.3.13 + '@smithy/types': 4.14.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/middleware-host-header@3.972.8': dependencies: '@aws-sdk/types': 3.973.6 @@ -5418,12 +5806,33 @@ snapshots: '@smithy/types': 4.13.1 tslib: 2.8.1 + '@aws-sdk/middleware-host-header@3.972.9': + dependencies: + '@aws-sdk/types': 3.973.7 + '@smithy/protocol-http': 5.3.13 + '@smithy/types': 4.14.0 + tslib: 2.8.1 + '@aws-sdk/middleware-logger@3.972.8': dependencies: '@aws-sdk/types': 3.973.6 '@smithy/types': 4.13.1 tslib: 2.8.1 + '@aws-sdk/middleware-logger@3.972.9': + dependencies: + '@aws-sdk/types': 3.973.7 + '@smithy/types': 4.14.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-recursion-detection@3.972.10': + dependencies: + '@aws-sdk/types': 3.973.7 + '@aws/lambda-invoke-store': 0.2.4 + '@smithy/protocol-http': 5.3.13 + '@smithy/types': 4.14.0 + tslib: 2.8.1 + '@aws-sdk/middleware-recursion-detection@3.972.8': dependencies: '@aws-sdk/types': 3.973.6 @@ -5443,6 +5852,17 @@ snapshots: '@smithy/util-retry': 4.2.12 tslib: 2.8.1 + '@aws-sdk/middleware-user-agent@3.972.29': + dependencies: + '@aws-sdk/core': 3.973.27 + '@aws-sdk/types': 3.973.7 + '@aws-sdk/util-endpoints': 3.996.6 + '@smithy/core': 3.23.14 + '@smithy/protocol-http': 5.3.13 + '@smithy/types': 4.14.0 + '@smithy/util-retry': 4.3.1 + tslib: 2.8.1 + '@aws-sdk/nested-clients@3.996.12': dependencies: '@aws-crypto/sha256-browser': 5.2.0 @@ -5486,6 +5906,49 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/nested-clients@3.996.19': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.973.27 + '@aws-sdk/middleware-host-header': 3.972.9 + '@aws-sdk/middleware-logger': 3.972.9 + '@aws-sdk/middleware-recursion-detection': 3.972.10 + '@aws-sdk/middleware-user-agent': 3.972.29 + '@aws-sdk/region-config-resolver': 3.972.11 + '@aws-sdk/types': 3.973.7 + '@aws-sdk/util-endpoints': 3.996.6 + '@aws-sdk/util-user-agent-browser': 3.972.9 + '@aws-sdk/util-user-agent-node': 3.973.15 + '@smithy/config-resolver': 4.4.14 + '@smithy/core': 3.23.14 + '@smithy/fetch-http-handler': 5.3.16 + '@smithy/hash-node': 4.2.13 + '@smithy/invalid-dependency': 4.2.13 + '@smithy/middleware-content-length': 4.2.13 + '@smithy/middleware-endpoint': 4.4.29 + '@smithy/middleware-retry': 4.5.1 + '@smithy/middleware-serde': 4.2.17 + '@smithy/middleware-stack': 4.2.13 + '@smithy/node-config-provider': 4.3.13 + '@smithy/node-http-handler': 4.5.2 + '@smithy/protocol-http': 5.3.13 + '@smithy/smithy-client': 4.12.9 + '@smithy/types': 4.14.0 + '@smithy/url-parser': 4.2.13 + '@smithy/util-base64': 4.3.2 + '@smithy/util-body-length-browser': 4.2.2 + '@smithy/util-body-length-node': 4.2.3 + '@smithy/util-defaults-mode-browser': 4.3.45 + '@smithy/util-defaults-mode-node': 4.2.49 + '@smithy/util-endpoints': 3.3.4 + '@smithy/util-middleware': 4.2.13 + '@smithy/util-retry': 4.3.1 + '@smithy/util-utf8': 4.2.2 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/rds-signer@3.1013.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 @@ -5503,6 +5966,14 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/region-config-resolver@3.972.11': + dependencies: + '@aws-sdk/types': 3.973.7 + '@smithy/config-resolver': 4.4.14 + '@smithy/node-config-provider': 4.3.13 + '@smithy/types': 4.14.0 + tslib: 2.8.1 + '@aws-sdk/region-config-resolver@3.972.8': dependencies: '@aws-sdk/types': 3.973.6 @@ -5523,11 +5994,28 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/token-providers@3.1026.0': + dependencies: + '@aws-sdk/core': 3.973.27 + '@aws-sdk/nested-clients': 3.996.19 + '@aws-sdk/types': 3.973.7 + '@smithy/property-provider': 4.2.13 + '@smithy/shared-ini-file-loader': 4.4.8 + '@smithy/types': 4.14.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/types@3.973.6': dependencies: '@smithy/types': 4.13.1 tslib: 2.8.1 + '@aws-sdk/types@3.973.7': + dependencies: + '@smithy/types': 4.14.0 + tslib: 2.8.1 + '@aws-sdk/util-endpoints@3.996.5': dependencies: '@aws-sdk/types': 3.973.6 @@ -5536,6 +6024,14 @@ snapshots: '@smithy/util-endpoints': 3.3.3 tslib: 2.8.1 + '@aws-sdk/util-endpoints@3.996.6': + dependencies: + '@aws-sdk/types': 3.973.7 + '@smithy/types': 4.14.0 + '@smithy/url-parser': 4.2.13 + '@smithy/util-endpoints': 3.3.4 + tslib: 2.8.1 + '@aws-sdk/util-format-url@3.972.8': dependencies: '@aws-sdk/types': 3.973.6 @@ -5543,6 +6039,13 @@ snapshots: '@smithy/types': 4.13.1 tslib: 2.8.1 + '@aws-sdk/util-format-url@3.972.9': + dependencies: + '@aws-sdk/types': 3.973.7 + '@smithy/querystring-builder': 4.2.13 + '@smithy/types': 4.14.0 + tslib: 2.8.1 + '@aws-sdk/util-locate-window@3.965.5': dependencies: tslib: 2.8.1 @@ -5554,6 +6057,22 @@ snapshots: bowser: 2.14.1 tslib: 2.8.1 + '@aws-sdk/util-user-agent-browser@3.972.9': + dependencies: + '@aws-sdk/types': 3.973.7 + '@smithy/types': 4.14.0 + bowser: 2.14.1 + tslib: 2.8.1 + + '@aws-sdk/util-user-agent-node@3.973.15': + dependencies: + '@aws-sdk/middleware-user-agent': 3.972.29 + '@aws-sdk/types': 3.973.7 + '@smithy/node-config-provider': 4.3.13 + '@smithy/types': 4.14.0 + '@smithy/util-config-provider': 4.2.2 + tslib: 2.8.1 + '@aws-sdk/util-user-agent-node@3.973.9': dependencies: '@aws-sdk/middleware-user-agent': 3.972.23 @@ -5569,6 +6088,12 @@ snapshots: fast-xml-parser: 5.5.6 tslib: 2.8.1 + '@aws-sdk/xml-builder@3.972.17': + dependencies: + '@smithy/types': 4.14.0 + fast-xml-parser: 5.5.8 + tslib: 2.8.1 + '@aws/lambda-invoke-store@0.2.4': {} '@babel/code-frame@7.29.0': @@ -6928,6 +7453,15 @@ snapshots: '@smithy/util-middleware': 4.2.12 tslib: 2.8.1 + '@smithy/config-resolver@4.4.14': + dependencies: + '@smithy/node-config-provider': 4.3.13 + '@smithy/types': 4.14.0 + '@smithy/util-config-provider': 4.2.2 + '@smithy/util-endpoints': 3.3.4 + '@smithy/util-middleware': 4.2.13 + tslib: 2.8.1 + '@smithy/core@3.23.12': dependencies: '@smithy/protocol-http': 5.3.12 @@ -6941,6 +7475,19 @@ snapshots: '@smithy/uuid': 1.1.2 tslib: 2.8.1 + '@smithy/core@3.23.14': + dependencies: + '@smithy/protocol-http': 5.3.13 + '@smithy/types': 4.14.0 + '@smithy/url-parser': 4.2.13 + '@smithy/util-base64': 4.3.2 + '@smithy/util-body-length-browser': 4.2.2 + '@smithy/util-middleware': 4.2.13 + '@smithy/util-stream': 4.5.22 + '@smithy/util-utf8': 4.2.2 + '@smithy/uuid': 1.1.2 + tslib: 2.8.1 + '@smithy/credential-provider-imds@4.2.12': dependencies: '@smithy/node-config-provider': 4.3.12 @@ -6949,6 +7496,14 @@ snapshots: '@smithy/url-parser': 4.2.12 tslib: 2.8.1 + '@smithy/credential-provider-imds@4.2.13': + dependencies: + '@smithy/node-config-provider': 4.3.13 + '@smithy/property-provider': 4.2.13 + '@smithy/types': 4.14.0 + '@smithy/url-parser': 4.2.13 + tslib: 2.8.1 + '@smithy/fetch-http-handler@5.3.15': dependencies: '@smithy/protocol-http': 5.3.12 @@ -6957,6 +7512,14 @@ snapshots: '@smithy/util-base64': 4.3.2 tslib: 2.8.1 + '@smithy/fetch-http-handler@5.3.16': + dependencies: + '@smithy/protocol-http': 5.3.13 + '@smithy/querystring-builder': 4.2.13 + '@smithy/types': 4.14.0 + '@smithy/util-base64': 4.3.2 + tslib: 2.8.1 + '@smithy/hash-node@4.2.12': dependencies: '@smithy/types': 4.13.1 @@ -6964,11 +7527,23 @@ snapshots: '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 + '@smithy/hash-node@4.2.13': + dependencies: + '@smithy/types': 4.14.0 + '@smithy/util-buffer-from': 4.2.2 + '@smithy/util-utf8': 4.2.2 + tslib: 2.8.1 + '@smithy/invalid-dependency@4.2.12': dependencies: '@smithy/types': 4.13.1 tslib: 2.8.1 + '@smithy/invalid-dependency@4.2.13': + dependencies: + '@smithy/types': 4.14.0 + tslib: 2.8.1 + '@smithy/is-array-buffer@2.2.0': dependencies: tslib: 2.8.1 @@ -6983,6 +7558,12 @@ snapshots: '@smithy/types': 4.13.1 tslib: 2.8.1 + '@smithy/middleware-content-length@4.2.13': + dependencies: + '@smithy/protocol-http': 5.3.13 + '@smithy/types': 4.14.0 + tslib: 2.8.1 + '@smithy/middleware-endpoint@4.4.27': dependencies: '@smithy/core': 3.23.12 @@ -6994,6 +7575,17 @@ snapshots: '@smithy/util-middleware': 4.2.12 tslib: 2.8.1 + '@smithy/middleware-endpoint@4.4.29': + dependencies: + '@smithy/core': 3.23.14 + '@smithy/middleware-serde': 4.2.17 + '@smithy/node-config-provider': 4.3.13 + '@smithy/shared-ini-file-loader': 4.4.8 + '@smithy/types': 4.14.0 + '@smithy/url-parser': 4.2.13 + '@smithy/util-middleware': 4.2.13 + tslib: 2.8.1 + '@smithy/middleware-retry@4.4.44': dependencies: '@smithy/node-config-provider': 4.3.12 @@ -7006,6 +7598,19 @@ snapshots: '@smithy/uuid': 1.1.2 tslib: 2.8.1 + '@smithy/middleware-retry@4.5.1': + dependencies: + '@smithy/core': 3.23.14 + '@smithy/node-config-provider': 4.3.13 + '@smithy/protocol-http': 5.3.13 + '@smithy/service-error-classification': 4.2.13 + '@smithy/smithy-client': 4.12.9 + '@smithy/types': 4.14.0 + '@smithy/util-middleware': 4.2.13 + '@smithy/util-retry': 4.3.1 + '@smithy/uuid': 1.1.2 + tslib: 2.8.1 + '@smithy/middleware-serde@4.2.15': dependencies: '@smithy/core': 3.23.12 @@ -7013,11 +7618,23 @@ snapshots: '@smithy/types': 4.13.1 tslib: 2.8.1 + '@smithy/middleware-serde@4.2.17': + dependencies: + '@smithy/core': 3.23.14 + '@smithy/protocol-http': 5.3.13 + '@smithy/types': 4.14.0 + tslib: 2.8.1 + '@smithy/middleware-stack@4.2.12': dependencies: '@smithy/types': 4.13.1 tslib: 2.8.1 + '@smithy/middleware-stack@4.2.13': + dependencies: + '@smithy/types': 4.14.0 + tslib: 2.8.1 + '@smithy/node-config-provider@4.3.12': dependencies: '@smithy/property-provider': 4.2.12 @@ -7025,6 +7642,13 @@ snapshots: '@smithy/types': 4.13.1 tslib: 2.8.1 + '@smithy/node-config-provider@4.3.13': + dependencies: + '@smithy/property-provider': 4.2.13 + '@smithy/shared-ini-file-loader': 4.4.8 + '@smithy/types': 4.14.0 + tslib: 2.8.1 + '@smithy/node-http-handler@4.5.0': dependencies: '@smithy/abort-controller': 4.2.12 @@ -7033,36 +7657,73 @@ snapshots: '@smithy/types': 4.13.1 tslib: 2.8.1 + '@smithy/node-http-handler@4.5.2': + dependencies: + '@smithy/protocol-http': 5.3.13 + '@smithy/querystring-builder': 4.2.13 + '@smithy/types': 4.14.0 + tslib: 2.8.1 + '@smithy/property-provider@4.2.12': dependencies: '@smithy/types': 4.13.1 tslib: 2.8.1 + '@smithy/property-provider@4.2.13': + dependencies: + '@smithy/types': 4.14.0 + tslib: 2.8.1 + '@smithy/protocol-http@5.3.12': dependencies: '@smithy/types': 4.13.1 tslib: 2.8.1 + '@smithy/protocol-http@5.3.13': + dependencies: + '@smithy/types': 4.14.0 + tslib: 2.8.1 + '@smithy/querystring-builder@4.2.12': dependencies: '@smithy/types': 4.13.1 '@smithy/util-uri-escape': 4.2.2 tslib: 2.8.1 + '@smithy/querystring-builder@4.2.13': + dependencies: + '@smithy/types': 4.14.0 + '@smithy/util-uri-escape': 4.2.2 + tslib: 2.8.1 + '@smithy/querystring-parser@4.2.12': dependencies: '@smithy/types': 4.13.1 tslib: 2.8.1 + '@smithy/querystring-parser@4.2.13': + dependencies: + '@smithy/types': 4.14.0 + tslib: 2.8.1 + '@smithy/service-error-classification@4.2.12': dependencies: '@smithy/types': 4.13.1 + '@smithy/service-error-classification@4.2.13': + dependencies: + '@smithy/types': 4.14.0 + '@smithy/shared-ini-file-loader@4.4.7': dependencies: '@smithy/types': 4.13.1 tslib: 2.8.1 + '@smithy/shared-ini-file-loader@4.4.8': + dependencies: + '@smithy/types': 4.14.0 + tslib: 2.8.1 + '@smithy/signature-v4@5.3.12': dependencies: '@smithy/is-array-buffer': 4.2.2 @@ -7074,6 +7735,17 @@ snapshots: '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 + '@smithy/signature-v4@5.3.13': + dependencies: + '@smithy/is-array-buffer': 4.2.2 + '@smithy/protocol-http': 5.3.13 + '@smithy/types': 4.14.0 + '@smithy/util-hex-encoding': 4.2.2 + '@smithy/util-middleware': 4.2.13 + '@smithy/util-uri-escape': 4.2.2 + '@smithy/util-utf8': 4.2.2 + tslib: 2.8.1 + '@smithy/smithy-client@4.12.7': dependencies: '@smithy/core': 3.23.12 @@ -7084,16 +7756,36 @@ snapshots: '@smithy/util-stream': 4.5.20 tslib: 2.8.1 + '@smithy/smithy-client@4.12.9': + dependencies: + '@smithy/core': 3.23.14 + '@smithy/middleware-endpoint': 4.4.29 + '@smithy/middleware-stack': 4.2.13 + '@smithy/protocol-http': 5.3.13 + '@smithy/types': 4.14.0 + '@smithy/util-stream': 4.5.22 + tslib: 2.8.1 + '@smithy/types@4.13.1': dependencies: tslib: 2.8.1 + '@smithy/types@4.14.0': + dependencies: + tslib: 2.8.1 + '@smithy/url-parser@4.2.12': dependencies: '@smithy/querystring-parser': 4.2.12 '@smithy/types': 4.13.1 tslib: 2.8.1 + '@smithy/url-parser@4.2.13': + dependencies: + '@smithy/querystring-parser': 4.2.13 + '@smithy/types': 4.14.0 + tslib: 2.8.1 + '@smithy/util-base64@4.3.2': dependencies: '@smithy/util-buffer-from': 4.2.2 @@ -7129,6 +7821,13 @@ snapshots: '@smithy/types': 4.13.1 tslib: 2.8.1 + '@smithy/util-defaults-mode-browser@4.3.45': + dependencies: + '@smithy/property-provider': 4.2.13 + '@smithy/smithy-client': 4.12.9 + '@smithy/types': 4.14.0 + tslib: 2.8.1 + '@smithy/util-defaults-mode-node@4.2.47': dependencies: '@smithy/config-resolver': 4.4.13 @@ -7139,12 +7838,28 @@ snapshots: '@smithy/types': 4.13.1 tslib: 2.8.1 + '@smithy/util-defaults-mode-node@4.2.49': + dependencies: + '@smithy/config-resolver': 4.4.14 + '@smithy/credential-provider-imds': 4.2.13 + '@smithy/node-config-provider': 4.3.13 + '@smithy/property-provider': 4.2.13 + '@smithy/smithy-client': 4.12.9 + '@smithy/types': 4.14.0 + tslib: 2.8.1 + '@smithy/util-endpoints@3.3.3': dependencies: '@smithy/node-config-provider': 4.3.12 '@smithy/types': 4.13.1 tslib: 2.8.1 + '@smithy/util-endpoints@3.3.4': + dependencies: + '@smithy/node-config-provider': 4.3.13 + '@smithy/types': 4.14.0 + tslib: 2.8.1 + '@smithy/util-hex-encoding@4.2.2': dependencies: tslib: 2.8.1 @@ -7154,12 +7869,23 @@ snapshots: '@smithy/types': 4.13.1 tslib: 2.8.1 + '@smithy/util-middleware@4.2.13': + dependencies: + '@smithy/types': 4.14.0 + tslib: 2.8.1 + '@smithy/util-retry@4.2.12': dependencies: '@smithy/service-error-classification': 4.2.12 '@smithy/types': 4.13.1 tslib: 2.8.1 + '@smithy/util-retry@4.3.1': + dependencies: + '@smithy/service-error-classification': 4.2.13 + '@smithy/types': 4.14.0 + tslib: 2.8.1 + '@smithy/util-stream@4.5.20': dependencies: '@smithy/fetch-http-handler': 5.3.15 @@ -7171,6 +7897,17 @@ snapshots: '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 + '@smithy/util-stream@4.5.22': + dependencies: + '@smithy/fetch-http-handler': 5.3.16 + '@smithy/node-http-handler': 4.5.2 + '@smithy/types': 4.14.0 + '@smithy/util-base64': 4.3.2 + '@smithy/util-buffer-from': 4.2.2 + '@smithy/util-hex-encoding': 4.2.2 + '@smithy/util-utf8': 4.2.2 + tslib: 2.8.1 + '@smithy/util-uri-escape@4.2.2': dependencies: tslib: 2.8.1 @@ -7189,6 +7926,17 @@ snapshots: dependencies: tslib: 2.8.1 + '@stripe/sync-destination-aws-dsql@file:packages/destination-aws-dsql': + dependencies: + '@aws-sdk/dsql-signer': 3.1028.0 + '@stripe/sync-protocol': file:packages/protocol + '@stripe/sync-util-postgres': file:packages/util-postgres + pg: 8.16.3 + zod: 4.3.6 + transitivePeerDependencies: + - aws-crt + - pg-native + '@stripe/sync-destination-google-sheets@file:packages/destination-google-sheets': dependencies: '@stripe/sync-protocol': file:packages/protocol @@ -7214,6 +7962,7 @@ snapshots: dependencies: '@hono/node-server': 1.19.11(hono@4.12.8) '@scalar/hono-api-reference': 0.6.0(hono@4.12.8) + '@stripe/sync-destination-aws-dsql': file:packages/destination-aws-dsql '@stripe/sync-destination-google-sheets': file:packages/destination-google-sheets '@stripe/sync-destination-postgres': file:packages/destination-postgres(@aws-sdk/client-sts@3.1013.0)(@aws-sdk/rds-signer@3.1013.0) '@stripe/sync-hono-zod-openapi': file:packages/hono-zod-openapi @@ -7236,6 +7985,7 @@ snapshots: transitivePeerDependencies: - '@aws-sdk/client-sts' - '@aws-sdk/rds-signer' + - aws-crt - bufferutil - debug - encoding @@ -7261,6 +8011,7 @@ snapshots: transitivePeerDependencies: - '@aws-sdk/client-sts' - '@aws-sdk/rds-signer' + - aws-crt - bufferutil - debug - encoding @@ -7303,6 +8054,7 @@ snapshots: - '@aws-sdk/client-sts' - '@aws-sdk/rds-signer' - '@swc/helpers' + - aws-crt - bufferutil - encoding - esbuild @@ -8480,6 +9232,12 @@ snapshots: path-expression-matcher: 1.1.3 strnum: 2.2.1 + fast-xml-parser@5.5.8: + dependencies: + fast-xml-builder: 1.1.4 + path-expression-matcher: 1.5.0 + strnum: 2.2.1 + fastq@1.19.1: dependencies: reusify: 1.1.0 @@ -9071,6 +9829,8 @@ snapshots: path-expression-matcher@1.1.3: {} + path-expression-matcher@1.5.0: {} + path-key@3.1.1: {} path-scurry@2.0.0: diff --git a/terraform/.gitignore b/terraform/.gitignore new file mode 100644 index 000000000..41b043023 --- /dev/null +++ b/terraform/.gitignore @@ -0,0 +1,4 @@ +.terraform/ +*.tfstate +*.tfstate.backup +.terraform.lock.hcl diff --git a/terraform/main.tf b/terraform/main.tf new file mode 100644 index 000000000..65762daf4 --- /dev/null +++ b/terraform/main.tf @@ -0,0 +1,23 @@ +terraform { + required_version = ">= 1.5" + + required_providers { + aws = { + source = "hashicorp/aws" + version = "~> 5.0" + } + } +} + +provider "aws" { + region = var.region +} + +resource "aws_dsql_cluster" "main" { + deletion_protection_enabled = false + + tags = { + Name = "sync-engine-dsql" + Project = "sync-engine" + } +} diff --git a/terraform/outputs.tf b/terraform/outputs.tf new file mode 100644 index 000000000..6ce2a4c25 --- /dev/null +++ b/terraform/outputs.tf @@ -0,0 +1,14 @@ +output "cluster_endpoint" { + description = "DSQL cluster endpoint (use as hostname for pg connections)" + value = "${aws_dsql_cluster.main.identifier}.dsql.${var.region}.on.aws" +} + +output "cluster_arn" { + description = "DSQL cluster ARN" + value = aws_dsql_cluster.main.arn +} + +output "region" { + description = "AWS region" + value = var.region +} diff --git a/terraform/variables.tf b/terraform/variables.tf new file mode 100644 index 000000000..78eb94dfc --- /dev/null +++ b/terraform/variables.tf @@ -0,0 +1,5 @@ +variable "region" { + description = "AWS region for the DSQL cluster" + type = string + default = "us-east-1" +}