@jaypie/mcp 0.8.189 → 0.8.191
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets.js +3 -3
- package/package.json +1 -1
- package/release-notes/constructs/1.2.91.md +37 -0
- package/release-notes/fabricator/0.4.3.md +10 -0
- package/release-notes/jaypie/1.2.124.md +9 -0
- package/release-notes/llm/1.3.65.md +18 -0
- package/release-notes/mcp/0.8.190.md +11 -0
- package/release-notes/mcp/0.8.191.md +11 -0
- package/release-notes/textract/0.2.7.md +9 -0
- package/skills/cdk.md +3 -3
- package/skills/cicd-actions.md +4 -6
- package/skills/cicd-deploy.md +2 -2
- package/skills/dynamodb.md +1 -1
- package/skills/jaypie.md +2 -3
- package/skills/llm.md +20 -12
- package/skills/monorepo.md +8 -5
- package/skills/waf.md +10 -0
package/dist/assets.js
CHANGED
|
@@ -55,11 +55,11 @@ function getMcpAssetPaths() {
|
|
|
55
55
|
*/
|
|
56
56
|
function getMcpBuildInfo() {
|
|
57
57
|
return {
|
|
58
|
-
commit: "
|
|
58
|
+
commit: "f88048b4"
|
|
59
59
|
,
|
|
60
|
-
version: "0.8.
|
|
60
|
+
version: "0.8.191"
|
|
61
61
|
,
|
|
62
|
-
versionString: "@jaypie/mcp@0.8.
|
|
62
|
+
versionString: "@jaypie/mcp@0.8.191#f88048b4"
|
|
63
63
|
,
|
|
64
64
|
};
|
|
65
65
|
}
|
package/package.json
CHANGED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.2.91
|
|
3
|
+
date: 2026-10-14
|
|
4
|
+
summary: WAF rate limit exempt IPs; Agent permission set stops granting code execution under service roles
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Changes
|
|
8
|
+
|
|
9
|
+
- **`waf.rateLimit`** on `JaypieDistribution` and `JaypieWebDeploymentBucket`
|
|
10
|
+
takes `{ exemptIps, perIp }` (#589). `exemptIps` lists IPv4 and IPv6 CIDRs
|
|
11
|
+
the `RateLimitPerIp` rule neither counts nor blocks. The construct creates
|
|
12
|
+
one `AWS::WAFv2::IPSet` per address family and scopes the rate-based
|
|
13
|
+
statement down to everyone outside them. `rateLimitPerIp` keeps working;
|
|
14
|
+
setting it with `rateLimit.perIp` throws `ConfigurationError`, as does an
|
|
15
|
+
invalid CIDR.
|
|
16
|
+
- **`JaypieSsoPermissions` Agent set** no longer grants actions that run code
|
|
17
|
+
under a service execution role (#570): `iam:PassRole`, Lambda invoke, code,
|
|
18
|
+
configuration, version, alias, and event-source-mapping writes, ECS task
|
|
19
|
+
definition, run, start, and service updates, `ecr:PutImage` and layer
|
|
20
|
+
uploads, `states:StartExecution`, `states:StartSyncExecution`, and
|
|
21
|
+
`pipes:StartPipe`.
|
|
22
|
+
- The Agent set also drops account-wide `secretsmanager:GetSecretValue`,
|
|
23
|
+
`ssm:PutParameter`, and `s3:PutObject`.
|
|
24
|
+
- `AgentDenyPrivilegedPassRole` stays, so a linked policy granting
|
|
25
|
+
`iam:PassRole` still cannot pass the SSO, organization, or CDK roles.
|
|
26
|
+
|
|
27
|
+
## Upgrade
|
|
28
|
+
|
|
29
|
+
- Agent sessions that invoke or update Lambdas, run ECS tasks, start Step
|
|
30
|
+
Functions executions, read secrets, write parameters, or put objects now
|
|
31
|
+
receive `AccessDenied`. Restore a specific workload with a customer managed
|
|
32
|
+
policy linked to the Agent set, scoped to that workload's ARNs. Nothing
|
|
33
|
+
denies these actions, so such a grant takes effect.
|
|
34
|
+
- Consumers appending a local `DenyAgentExecutionRoleEscalation` statement can
|
|
35
|
+
remove it.
|
|
36
|
+
- `rateLimitPerIp` alone synthesizes the same rule as before; no template
|
|
37
|
+
change without `rateLimit`.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.2.124
|
|
3
|
+
date: 2026-10-14
|
|
4
|
+
summary: Pulls @jaypie/llm 1.3.65
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Changes
|
|
8
|
+
|
|
9
|
+
- **`@jaypie/llm` 1.3.65**: `operate()` streams provider transport internally on Anthropic, OpenAI, xAI, Meta, Google, and Mistral, lifting the 16,384 non-streaming output cap.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.3.65
|
|
3
|
+
date: 2026-10-14
|
|
4
|
+
summary: operate() streams provider transport internally on Anthropic, OpenAI, xAI, Meta, Google, and Mistral, lifting the 16,384 non-streaming output cap
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Changes
|
|
8
|
+
|
|
9
|
+
- `operate()` consumes the provider stream internally and still returns one settled `LlmOperateResponse` on Anthropic, OpenAI, xAI, Meta, Google, and Mistral (#603). Each adapter accumulates stream events back into the payload its non-streaming request returns, so parsing, tool calls, history, structured output, and stop reasons are unchanged.
|
|
10
|
+
- Output budgets resolve to the model maximum instead of 16,384. Gemini 2.5/3.x reaches 65,536; Mistral reaches its 32,768 cap, which stays because it bounds degenerate restating.
|
|
11
|
+
- `timeout` becomes an idle timeout on these providers: the deadline resets on every stream event, so a stall fails over sooner and a long active generation is not cut off. Fireworks, OpenRouter, and Bedrock keep the non-streaming request and a whole-attempt deadline.
|
|
12
|
+
- Parameter-rejection retries (temperature, `reasoning_effort`, `response_format`, schema and output-format rejections) behave the same on both transports.
|
|
13
|
+
- A provider error event inside a stream classifies like the matching HTTP status; a stream that closes before settling is retried as a 500.
|
|
14
|
+
|
|
15
|
+
## Upgrade
|
|
16
|
+
|
|
17
|
+
- Long responses that previously stopped at 16,384 tokens with `MAX_TOKENS` now run to the model maximum. Cost and latency grow with them; set `maxTokens` to keep a ceiling.
|
|
18
|
+
- A `timeout` sized for the slowest whole non-streaming response can shrink to the longest expected pause between events.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 0.8.190
|
|
3
|
+
date: 2026-10-14
|
|
4
|
+
summary: Skills agree on packages/cdk as the CDK package directory
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Changes
|
|
8
|
+
|
|
9
|
+
- **Skills**: `monorepo`, `cdk`, `cicd-actions`, `cicd-deploy`, `dynamodb`, and `jaypie` name `packages/cdk` as the single location for the CDK package (#623)
|
|
10
|
+
- **`monorepo`**: drops `stacks` as a workspace directory name; limits `workspaces/` to repositories whose `packages/` publish to npm; notes that the root `package.json` and vitest globs cover `packages/*` only
|
|
11
|
+
- **`cicd-actions`**: `cdk-deploy` defaults `working-directory` to `packages/cdk`; `web-deploy` defaults to `packages/cdk/cdk-outputs.json` and `packages/web/dist`
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 0.8.191
|
|
3
|
+
date: 2026-10-14
|
|
4
|
+
summary: WAF skills document waf.rateLimit exemptIps; llm skill documents the streamed operate transport
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Changes
|
|
8
|
+
|
|
9
|
+
- **`waf`**: example for `rateLimit: { exemptIps, perIp }`, exempting known CIDRs from the per-IP rate rule (#589)
|
|
10
|
+
- **`cdk`**: lists `rateLimit` among the WAF configuration props
|
|
11
|
+
- **`llm`**: Default Output Token Limits and timeout notes reflect `operate()` streaming internally on Anthropic, OpenAI, xAI, Meta, Google, and Mistral (#603)
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 0.2.7
|
|
3
|
+
date: 2026-10-14
|
|
4
|
+
summary: Incomplete markdown conversion warns through the logger only
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Changes
|
|
8
|
+
|
|
9
|
+
- `MarkdownPage` drops a `console.warn` that duplicated `log.warn` for incomplete JSON-to-markdown conversion; the warning still logs once through the Jaypie logger
|
package/skills/cdk.md
CHANGED
|
@@ -107,10 +107,10 @@ new JaypieSesIntake(this, "Intake", {
|
|
|
107
107
|
|
|
108
108
|
## Stack Structure
|
|
109
109
|
|
|
110
|
-
|
|
110
|
+
The CDK package lives at `packages/cdk`, alongside every other workspace (see `skill("monorepo")`):
|
|
111
111
|
|
|
112
112
|
```
|
|
113
|
-
|
|
113
|
+
packages/
|
|
114
114
|
├── cdk/
|
|
115
115
|
│ ├── src/
|
|
116
116
|
│ │ ├── app.ts # CDK app entry
|
|
@@ -439,7 +439,7 @@ new JaypieDistribution(this, "Dist", {
|
|
|
439
439
|
KnownBadInputsRuleSet, IP rate limiting, and WAF logging to S3 with Datadog
|
|
440
440
|
forwarding.
|
|
441
441
|
|
|
442
|
-
See **`skill("waf")`** for configuration: `rateLimitPerIp`, `webAclArn`,
|
|
442
|
+
See **`skill("waf")`** for configuration: `rateLimit` (`perIp`, `exemptIps`), `rateLimitPerIp`, `webAclArn`,
|
|
443
443
|
`logBucket`, `logRetention`, `managedRuleOverrides`, `managedRuleScopeDowns`,
|
|
444
444
|
`redactedFields`, `redactedHeaders`, the `allow` path-scoped relaxation prop,
|
|
445
445
|
and the rule-name ↔ label casing trap.
|
package/skills/cicd-actions.md
CHANGED
|
@@ -194,7 +194,6 @@ runs:
|
|
|
194
194
|
path: |
|
|
195
195
|
node_modules
|
|
196
196
|
packages/*/node_modules
|
|
197
|
-
workspaces/*/node_modules
|
|
198
197
|
key: ${{ runner.os }}-node-${{ inputs.node-version }}-${{ hashFiles('**/package-lock.json') }}
|
|
199
198
|
restore-keys: |
|
|
200
199
|
${{ runner.os }}-node-${{ inputs.node-version }}-
|
|
@@ -205,8 +204,7 @@ runs:
|
|
|
205
204
|
with:
|
|
206
205
|
path: |
|
|
207
206
|
packages/*/dist
|
|
208
|
-
|
|
209
|
-
workspaces/*/.open-next
|
|
207
|
+
packages/*/.open-next
|
|
210
208
|
key: ${{ runner.os }}-build-${{ github.sha }}
|
|
211
209
|
restore-keys: |
|
|
212
210
|
${{ runner.os }}-build-
|
|
@@ -262,7 +260,7 @@ inputs:
|
|
|
262
260
|
working-directory:
|
|
263
261
|
description: 'Working directory for CDK commands'
|
|
264
262
|
required: false
|
|
265
|
-
default: '
|
|
263
|
+
default: 'packages/cdk'
|
|
266
264
|
require-approval:
|
|
267
265
|
description: 'CDK approval mode (never, any-change, broadening)'
|
|
268
266
|
required: false
|
|
@@ -310,7 +308,7 @@ inputs:
|
|
|
310
308
|
outputs-file:
|
|
311
309
|
description: 'Path to cdk-outputs.json produced by cdk deploy'
|
|
312
310
|
required: false
|
|
313
|
-
default: '
|
|
311
|
+
default: 'packages/cdk/cdk-outputs.json'
|
|
314
312
|
prefix:
|
|
315
313
|
description: 'Output name prefix when exportOutputs({ prefix }) was used (e.g., "App")'
|
|
316
314
|
required: false
|
|
@@ -318,7 +316,7 @@ inputs:
|
|
|
318
316
|
source:
|
|
319
317
|
description: 'Directory of built assets to sync'
|
|
320
318
|
required: false
|
|
321
|
-
default: '
|
|
319
|
+
default: 'packages/web/dist'
|
|
322
320
|
region:
|
|
323
321
|
description: 'AWS region'
|
|
324
322
|
required: false
|
package/skills/cicd-deploy.md
CHANGED
|
@@ -261,7 +261,7 @@ jobs:
|
|
|
261
261
|
|
|
262
262
|
CDK provisions a `JaypieWebDeploymentBucket`; it does not fill it. Jaypie avoids `s3deploy.BucketDeployment`, so shipping content is a workflow step:
|
|
263
263
|
|
|
264
|
-
1. `cdk-deploy` deploys the bucket, distribution, and deploy role, and writes `
|
|
264
|
+
1. `cdk-deploy` deploys the bucket, distribution, and deploy role, and writes `packages/cdk/cdk-outputs.json`.
|
|
265
265
|
2. `web-deploy` reads `DestinationBucketName`, `DestinationBucketDeployRoleArn`, and `DistributionId` from that file.
|
|
266
266
|
3. `web-deploy` assumes the deploy role, syncs the built assets, and invalidates the distribution.
|
|
267
267
|
|
|
@@ -278,7 +278,7 @@ See `skill("cicd-actions")` for the `web-deploy` action body and `skill("web")`
|
|
|
278
278
|
`JaypieStack` names every stack `cdk-{PROJECT_SPONSOR}-{PROJECT_KEY}-{PROJECT_ENV}-{PROJECT_NONCE}[-{key}]` and resolves the account and region (see `skill("cdk")`). Do not compose stack names in `app.ts`:
|
|
279
279
|
|
|
280
280
|
```typescript
|
|
281
|
-
//
|
|
281
|
+
// packages/cdk/src/app.ts
|
|
282
282
|
import { App } from "aws-cdk-lib";
|
|
283
283
|
import { JaypieAppStack } from "@jaypie/constructs";
|
|
284
284
|
|
package/skills/dynamodb.md
CHANGED
|
@@ -550,7 +550,7 @@ registerModel({ model: "session", indexes: [fabricIndex()], ttl: "30 days" });
|
|
|
550
550
|
```
|
|
551
551
|
|
|
552
552
|
```typescript
|
|
553
|
-
//
|
|
553
|
+
// packages/cdk/lib/data-stack.ts
|
|
554
554
|
import "@project/models"; // registers models
|
|
555
555
|
import { JaypieDynamoDb } from "@jaypie/constructs";
|
|
556
556
|
import { getAllRegisteredIndexes } from "@jaypie/fabric";
|
package/skills/jaypie.md
CHANGED
|
@@ -50,11 +50,10 @@ Jaypie projects use npm workspaces:
|
|
|
50
50
|
|
|
51
51
|
```
|
|
52
52
|
project/
|
|
53
|
-
├── packages/ # npm
|
|
53
|
+
├── packages/ # npm workspaces
|
|
54
54
|
│ ├── api/ # Express API
|
|
55
|
+
│ ├── cdk/ # CDK app
|
|
55
56
|
│ └── lib/ # Shared library
|
|
56
|
-
├── workspaces/ # CDK infrastructure
|
|
57
|
-
│ └── cdk/ # CDK app
|
|
58
57
|
└── package.json # Root workspace config
|
|
59
58
|
```
|
|
60
59
|
|
package/skills/llm.md
CHANGED
|
@@ -916,7 +916,8 @@ const response = await llm.operate(input, {
|
|
|
916
916
|
- A timeout is never an `LlmAbortError`: the caller's `signal` still owns cancellation.
|
|
917
917
|
- An entry's own `timeout` replaces the call's for that entry; `false` disables it.
|
|
918
918
|
- `stream()` treats `timeout` as an idle timeout: it restarts with every chunk and pauses while the consumer holds one. A stall after partial output yields an error chunk.
|
|
919
|
-
-
|
|
919
|
+
- `operate()` on Anthropic, Google, Mistral, OpenAI, xAI, and Meta streams its transport internally, so `timeout` is an idle timeout there too: it restarts with every event the provider sends, catching a stall without cutting off a long generation that is still producing. On Bedrock, Fireworks, and OpenRouter `operate()` sends non-streaming requests and `timeout` bounds the whole attempt.
|
|
920
|
+
- No default applies; unset means no deadline. On the non-streaming providers, size it above the slowest legitimate response (long reasoning runs take minutes).
|
|
920
921
|
- `Llm.ocr` keeps `timeout` as the LlamaParse job deadline.
|
|
921
922
|
- A timeout that hands off to the next model logs at `debug` (`API call timed out after 60000ms; not retrying`, then `Provider openai failed; failing over`). Only the failure that reaches the caller logs at `warn`. The report tally counts it under `failures` and `fallbacks`.
|
|
922
923
|
|
|
@@ -1359,14 +1360,21 @@ Google merges them into the generation config.
|
|
|
1359
1360
|
|
|
1360
1361
|
### Default Output Token Limits
|
|
1361
1362
|
|
|
1362
|
-
Anthropic and
|
|
1363
|
-
model's documented maximum output, so long generations do not
|
|
1364
|
-
truncate:
|
|
1363
|
+
Anthropic, Google, and Mistral requests resolve a default output-token limit
|
|
1364
|
+
from the model's documented maximum output, so long generations do not
|
|
1365
|
+
silently truncate:
|
|
1365
1366
|
|
|
1366
|
-
- **
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1367
|
+
- **Streamed transport** (`stream()`, and `operate()` on Anthropic, Google,
|
|
1368
|
+
Mistral, OpenAI, xAI, and Meta): the model maximum — e.g., 128,000 for
|
|
1369
|
+
current Claude models (64,000 for Haiku 4.5), 65,536 for Gemini 2.5/3.x
|
|
1370
|
+
- **Non-streaming**: an adapter request built without the streamed
|
|
1371
|
+
transport is capped at 16,384 (larger non-streaming responses risk HTTP
|
|
1372
|
+
timeouts). The deprecated `send()` on Anthropic sends 16,384 as well
|
|
1373
|
+
|
|
1374
|
+
`operate()` consumes the provider stream internally and still returns one
|
|
1375
|
+
settled response (same `content`, tool calls, history, stop reason, and
|
|
1376
|
+
usage), so streaming there is a transport detail with no caller-facing change.
|
|
1377
|
+
Bedrock, Fireworks, and OpenRouter keep non-streaming `operate()` requests.
|
|
1370
1378
|
|
|
1371
1379
|
Override per model with `modelOptions`:
|
|
1372
1380
|
|
|
@@ -1383,19 +1391,19 @@ await Llm.operate(input, {
|
|
|
1383
1391
|
|
|
1384
1392
|
OpenAI, xAI, and Meta leave the limit unset (their defaults do not truncate early).
|
|
1385
1393
|
A chain that mixes them with Anthropic, Google, or Mistral therefore mixes
|
|
1386
|
-
output budgets: a Gemini primary resolves to
|
|
1394
|
+
output budgets: a Gemini primary resolves to its 65,536 model maximum while an
|
|
1387
1395
|
OpenAI fallback sends no ceiling, so swapping the primary moves the effective
|
|
1388
1396
|
budget with nothing at the call site changing. Reasoning tokens count against
|
|
1389
1397
|
the ceiling. Set `maxOutputTokens` (Google) or `max_tokens` (Anthropic,
|
|
1390
1398
|
Mistral) in `modelOptions` to pin it per model.
|
|
1391
|
-
Mistral is capped
|
|
1392
|
-
|
|
1399
|
+
Mistral is capped at 32,768 on every transport despite publishing no low
|
|
1400
|
+
ceiling: a Mistral model can degenerate into restating its answer when
|
|
1393
1401
|
`format` and tools are combined, and an uncapped completion turns that into a
|
|
1394
1402
|
multi-minute request. Override with `modelOptions: { mistral: { max_tokens } }`.
|
|
1395
1403
|
OpenRouter varies by routed model; pass `max_tokens` via `modelOptions`
|
|
1396
1404
|
when needed. A truncated response settles `status: "incomplete"` with
|
|
1397
1405
|
`stopReason: "max_tokens"` and moves a fallback chain to its next entry;
|
|
1398
|
-
raise the limit
|
|
1406
|
+
raise the limit through `modelOptions`.
|
|
1399
1407
|
|
|
1400
1408
|
## See Also
|
|
1401
1409
|
|
package/skills/monorepo.md
CHANGED
|
@@ -135,8 +135,12 @@ npm install --save-dev @jaypie/eslint @jaypie/repokit @jaypie/testkit eslint vit
|
|
|
135
135
|
|
|
136
136
|
| Directory | Purpose |
|
|
137
137
|
|-----------|---------|
|
|
138
|
-
| `packages/` | npm packages (
|
|
139
|
-
| `workspaces/` |
|
|
138
|
+
| `packages/` | Default for every workspace: npm packages, the CDK package (`packages/cdk`), and sites (`packages/web`) |
|
|
139
|
+
| `workspaces/` | Only in a repository whose `packages/` publish to npm: the unpublished workspaces that manage them (`workspaces/cdk`, `workspaces/documentation`) |
|
|
140
|
+
|
|
141
|
+
Use `packages/cdk` unless the repository publishes its packages to npm. The Jaypie repository itself is the `workspaces/` case: `packages/` holds the published libraries and `workspaces/` holds the CDK app and documentation site that deploy around them.
|
|
142
|
+
|
|
143
|
+
`packages/cdk` is the default the `cdk`, `cicd-actions`, and `cicd-deploy` skills assume. The root `package.json` scripts and the vitest `test.projects` glob cover `packages/*` only, so a repository that adds `workspaces/` must pass `workspaces/cdk` to the `cdk-deploy` and `web-deploy` inputs, and its workspaces fall out of `build`, `clean`, `format:package`, `test`, and `typecheck` until every one of those globs names it.
|
|
140
144
|
|
|
141
145
|
## Scripts Reference
|
|
142
146
|
|
|
@@ -164,10 +168,9 @@ npm install --save-dev @jaypie/eslint @jaypie/repokit @jaypie/testkit eslint vit
|
|
|
164
168
|
- etc: configurations
|
|
165
169
|
- lib: usually within a src directory, modules of encapsulated logic that could be refactored out later
|
|
166
170
|
- LOCAL: human local scratch directory, include in gitignore
|
|
167
|
-
- packages: default
|
|
168
|
-
- stacks: allowed name for NPM workspaces that publish via CDK
|
|
171
|
+
- packages: default directory for NPM workspaces, including the CDK package (`packages/cdk`); always use for packages publishing to NPM
|
|
169
172
|
- templates: usually CloudFormation
|
|
170
|
-
- workspaces:
|
|
173
|
+
- workspaces: unpublished workspaces (CDK, sites) in a repository whose packages publish to NPM
|
|
171
174
|
- var: agent and machine local scratch directory, include in gitignore
|
|
172
175
|
|
|
173
176
|
### Discouraged Folder Names
|
package/skills/waf.md
CHANGED
|
@@ -26,6 +26,16 @@ new JaypieDistribution(this, "Dist", {
|
|
|
26
26
|
waf: { name: "api", rateLimitPerIp: 500 },
|
|
27
27
|
});
|
|
28
28
|
|
|
29
|
+
// Exempt known source CIDRs (a partner's backfill server) from the per-IP
|
|
30
|
+
// rate rule. Everyone else is still limited at perIp per 5 minutes.
|
|
31
|
+
new JaypieDistribution(this, "Dist", {
|
|
32
|
+
handler,
|
|
33
|
+
waf: {
|
|
34
|
+
name: "api",
|
|
35
|
+
rateLimit: { exemptIps: ["203.0.113.10/32", "2001:db8::/48"], perIp: 2000 },
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
|
|
29
39
|
// Multiple distributions in one env — set a unique waf.name on each to
|
|
30
40
|
// avoid WebACL/S3 bucket name collisions between stacks.
|
|
31
41
|
new JaypieDistribution(this, "Api", { handler: api, waf: { name: "api" } });
|