zuplo 7.6.4 → 7.6.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/docs/ai-gateway/getting-started.mdx +52 -66
  2. package/docs/ai-gateway/managing-teams.mdx +3 -2
  3. package/docs/ai-gateway/overview.mdx +18 -16
  4. package/docs/ai-gateway/policy-templates.mdx +17 -11
  5. package/docs/ai-gateway/source-control.mdx +37 -20
  6. package/docs/ai-gateway/teams.mdx +1 -1
  7. package/docs/ai-gateway/usage-limits.mdx +95 -44
  8. package/docs/articles/api-key-administration.mdx +2 -2
  9. package/docs/articles/api-key-api.mdx +26 -5
  10. package/docs/articles/api-key-authentication.mdx +1 -1
  11. package/docs/articles/api-key-buckets.mdx +27 -4
  12. package/docs/articles/api-key-consumer-bucket-portal-ui.mdx +13 -11
  13. package/docs/articles/api-key-leak-detection.mdx +2 -2
  14. package/docs/articles/api-key-self-serve-integration.mdx +19 -19
  15. package/docs/articles/audit-logs.mdx +11 -10
  16. package/docs/articles/monetization/api-access.mdx +1 -1
  17. package/docs/articles/monetization/going-to-production.mdx +1 -1
  18. package/docs/concepts/ai-gateway.mdx +10 -9
  19. package/docs/concepts/api-keys.md +1 -1
  20. package/docs/dedicated/akamai/ai-powered-applications.mdx +11 -8
  21. package/docs/dev-portal/dev-portal-create-consumer-on-auth.mdx +10 -5
  22. package/docs/dev-portal/zudoku/configuration/api-reference.md +1 -1
  23. package/docs/dev-portal/zudoku/configuration/llms.md +0 -4
  24. package/docs/policies/ai-gateway-configuration-executor-v2-inbound/doc.md +1 -1
  25. package/docs/policies/ai-gateway-metering-v2-inbound/schema.json +1 -1
  26. package/docs/policies/semantic-cache-inbound/schema.json +6 -2
  27. package/package.json +5 -5
@@ -21,9 +21,10 @@ Three building blocks organize an AI Gateway:
21
21
  can route to. Administrators configure providers once, including any
22
22
  [custom OpenAI-compatible providers](../ai-gateway/custom-providers.mdx), and
23
23
  consumers never see the underlying credentials.
24
- - **[Teams](../ai-gateway/teams.mdx)** group users and carry budget limits that
25
- cascade down the hierarchy: gateway-wide limits, then team limits, then
26
- per-app limits. See [Usage Limits](../ai-gateway/usage-limits.mdx).
24
+ - **[Teams](../ai-gateway/teams.mdx)** group users and carry budget limits. Each
25
+ team totals usage across its sub-teams and apps. A request must remain within
26
+ the gateway, ancestor team, and app limits. See
27
+ [Usage Limits](../ai-gateway/usage-limits.mdx).
27
28
  - **[Apps](../ai-gateway/apps.mdx)** are the pieces of software that call the
28
29
  gateway — a support chatbot is one app, an internal coding agent is another.
29
30
  Each app gets its own gateway URL, its own Zuplo-managed API key, and its own
@@ -54,12 +55,12 @@ code change.
54
55
 
55
56
  ## How it fits into Zuplo
56
57
 
57
- An AI Gateway is a type of Zuplo project. Its routes and policy declarations
58
- live in a [Git repository](../ai-gateway/source-control.mdx), so gateway changes
59
- go through the same review workflow as the rest of your Zuplo configuration, and
60
- the providers, teams, and apps you configure belong to that project. The
61
- platform primitives — deployment model, environments, analytics — are the same
62
- ones described in [How Zuplo Works](./how-zuplo-works.mdx).
58
+ An AI Gateway is a type of Zuplo project. A new project deploys without a Git
59
+ repository; you can [connect a repository](../ai-gateway/source-control.mdx)
60
+ later so gateway changes go through the same review workflow as the rest of your
61
+ Zuplo configuration. The providers, teams, and apps you configure belong to that
62
+ project. The platform primitives — deployment model, environments, analytics —
63
+ are the same ones described in [How Zuplo Works](./how-zuplo-works.mdx).
63
64
 
64
65
  ## Next steps
65
66
 
@@ -187,7 +187,7 @@ Each project has separate buckets for production, preview, and working copy
187
187
  environments. This means API keys created in production don't work in preview,
188
188
  and vice versa.
189
189
 
190
- For testing, you can specify a custom bucket name on the
190
+ For testing, you can specify a custom bucket ID on the
191
191
  [API Key Authentication](../policies/api-key-inbound.mdx) policy to share keys
192
192
  across environments. Enterprise customers can share buckets across projects or
193
193
  accounts.
@@ -165,14 +165,17 @@ When the firewall detects a threat, it can take one of three actions:
165
165
 
166
166
  ## Cost and Usage Controls
167
167
 
168
- The Zuplo AI Gateway provides hierarchical budget controls to manage AI
169
- spending:
170
-
171
- - **Organization limits** - Maximum daily and monthly spending across all AI
172
- usage
173
- - **Team budgets** - Allocated budgets for departments or customer segments
174
- - **Application limits** - Per-application or per-use-case cost controls
175
- - **Rate limiting** - Request throttling to prevent abuse
168
+ The Zuplo AI Gateway provides budget controls at every level of the hierarchy to
169
+ manage AI spending:
170
+
171
+ - **Gateway budgets** - Hourly, daily, weekly, or monthly limits across all AI
172
+ Gateway usage.
173
+ - **Team budgets** - Shared or per-expression limits across a team, its
174
+ sub-teams, and their apps.
175
+ - **App budgets** - Shared or per-expression limits for one app.
176
+ - **Rate limiting** - Request throttling to prevent abuse.
177
+
178
+ For more information, see [Usage Limits](../../ai-gateway/usage-limits.mdx).
176
179
 
177
180
  ## Security Model
178
181
 
@@ -56,14 +56,19 @@ secret `API_KEY` and set the value.
56
56
 
57
57
  :::info
58
58
 
59
- In the code below set the variable `BUCKET_NAME` to the bucket being used by
60
- your Zuplo Gateway. If you don't know the name of your bucket, you can
59
+ In the code below set the variable `API_KEY_BUCKET_ID` to the ID of the bucket
60
+ being used by your Zuplo Gateway. Copy it from the **Bucket ID** pill on your
61
+ project's
62
+ [**Services → API Keys → Consumers**](https://portal.zuplo.com/+/account/project/services)
63
+ page, or
61
64
  [list your buckets using the Developer API](https://dev.zuplo.com/docs/routes#apikeybucketsservice_list).
65
+ For more information, see
66
+ [Bucket identifiers](../articles/api-key-buckets.mdx#bucket-identifiers).
62
67
 
63
68
  :::
64
69
 
65
70
  Next, add the following code to your custom action. Be sure to replace the
66
- placeholder values with your actual account and bucket names. Click the
71
+ placeholder values with your actual account name and bucket ID. Click the
67
72
  **Deploy** button when you are finished.
68
73
 
69
74
  ```ts
@@ -71,7 +76,7 @@ const { fetch } = require("undici");
71
76
  const { randomUUID } = require("crypto");
72
77
 
73
78
  const ZUPLO_ACCOUNT = "my-zuplo-account";
74
- const API_KEY_BUCKET = "my-bucket";
79
+ const API_KEY_BUCKET_ID = "bckt_2HaK3odRyJle6NJSu8mzNKBC30BYxllxL";
75
80
 
76
81
  /**
77
82
  * Handler that will be called during the execution of a PostLogin flow.
@@ -100,7 +105,7 @@ exports.onExecutePostLogin = async (event, api) => {
100
105
  try {
101
106
  // Create the consumer
102
107
  const response = await fetch(
103
- `https://dev.zuplo.com/v1/accounts/${ZUPLO_ACCOUNT}/key-buckets/${API_KEY_BUCKET}/consumers?with-api-key=true`,
108
+ `https://dev.zuplo.com/v1/accounts/${ZUPLO_ACCOUNT}/key-buckets/${API_KEY_BUCKET_ID}/consumers?with-api-key=true`,
104
109
  {
105
110
  method: "POST",
106
111
  body: JSON.stringify(body),
@@ -276,7 +276,7 @@ Available options:
276
276
  schemes section on the info page, and the Authorize dialog in the playground). Disabled by default
277
277
  (`true`). Set to `false` to enable security scheme support
278
278
  - `disableMcpAuthInstructions`: Hide the authentication instructions on
279
- [MCP server](../guides/mcp-servers.md) endpoints. The MCP card normally derives a credential
279
+ [MCP server](/docs/dev-portal/documenting-mcp-servers) endpoints. The MCP card normally derives a credential
280
280
  header from the operation's security scheme and shows it in every install snippet. Set to `true`
281
281
  to render the server as unauthenticated instead — no header snippets and no "replace
282
282
  `YOUR_API_KEY`" steps
@@ -112,10 +112,6 @@ dist/
112
112
  └── ...
113
113
  ```
114
114
 
115
- On Vercel builds, this tree is written beneath `.vercel/output/static/` instead of `dist/`. The
116
- deployed public URLs remain the same. See the [Vercel deployment guide](/dev-portal/zudoku/deploy/vercel) for the
117
- generated routing and Markdown content-negotiation behavior.
118
-
119
115
  **Important:** Individual `.md` files are only kept in the final build if `publishMarkdown: true`.
120
116
  If only `llmsTxt` or `llmsTxtFull` is enabled, the `.md` files are generated temporarily during the
121
117
  build but deleted after the `llms.txt` files are created.
@@ -319,7 +319,7 @@ selected from the request. Each expression rule requires one or more meter rows:
319
319
  | `meter` | `cost`, `requests`, `tokens` |
320
320
  | `period` | `hourly`, `daily`, `weekly`, `monthly` |
321
321
  | `action` | `warn` records a warning; `block` returns HTTP `429` |
322
- | `value` | A finite number greater than or equal to zero |
322
+ | `value` | A finite number greater than zero |
323
323
 
324
324
  A rule cannot repeat the same meter, period, and action. When a meter and period
325
325
  have both actions, the `warn` value must be less than the `block` value. The
@@ -103,7 +103,7 @@
103
103
  },
104
104
  "value": {
105
105
  "type": "number",
106
- "minimum": 0
106
+ "exclusiveMinimum": 0
107
107
  },
108
108
  "action": {
109
109
  "type": "string",
@@ -61,8 +61,12 @@
61
61
  },
62
62
  "cacheByPropertyPath": {
63
63
  "type": "string",
64
- "description": "The path to the property in the request body (JSON) to use as cache key. For example '.userId' would read the 'userId' property from the request body. Only works with cacheBy=propertyPath.",
65
- "examples": [".userId", ".data.customerId"]
64
+ "description": "A light path selector into the JSON request body to use as the cache key. Start with `.` for dot notation or `[` for a quoted key containing dots or slashes, for example `.userId`, `.data.customerId`, or `[\"https://example.com/cache-key\"]`. Only works with cacheBy=propertyPath.",
65
+ "examples": [
66
+ ".userId",
67
+ ".data.customerId",
68
+ "[\"https://example.com/cache-key\"]"
69
+ ]
66
70
  },
67
71
  "cacheByFunction": {
68
72
  "type": "object",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zuplo",
3
- "version": "7.6.4",
3
+ "version": "7.6.6",
4
4
  "type": "module",
5
5
  "description": "The official Zuplo CLI for local development and platform management",
6
6
  "homepage": "https://zuplo.com/docs/cli/overview",
@@ -32,9 +32,9 @@
32
32
  "zuplo": "zuplo.js"
33
33
  },
34
34
  "dependencies": {
35
- "@zuplo/cli": "7.6.4",
36
- "@zuplo/core": "7.6.4",
37
- "@zuplo/runtime": "7.6.4",
38
- "@zuplo/test": "7.6.4"
35
+ "@zuplo/cli": "7.6.6",
36
+ "@zuplo/core": "7.6.6",
37
+ "@zuplo/runtime": "7.6.6",
38
+ "@zuplo/test": "7.6.6"
39
39
  }
40
40
  }