@postman/sdk-config 0.7.0 → 0.9.0

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 (36) hide show
  1. package/README.md +1 -3
  2. package/dist/index.cjs +882 -747
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.cts +1 -1
  5. package/dist/index.d.ts +1 -1
  6. package/dist/index.js +882 -747
  7. package/dist/index.js.map +1 -1
  8. package/dist/sdk-config/index.cjs +644 -544
  9. package/dist/sdk-config/index.cjs.map +1 -1
  10. package/dist/sdk-config/index.d.cts +1 -1
  11. package/dist/sdk-config/index.d.ts +1 -1
  12. package/dist/sdk-config/index.js +644 -544
  13. package/dist/sdk-config/index.js.map +1 -1
  14. package/dist/sdk-config/v1/index.cjs +644 -544
  15. package/dist/sdk-config/v1/index.cjs.map +1 -1
  16. package/dist/sdk-config/v1/index.d.cts +581 -1047
  17. package/dist/sdk-config/v1/index.d.ts +581 -1047
  18. package/dist/sdk-config/v1/index.js +644 -544
  19. package/dist/sdk-config/v1/index.js.map +1 -1
  20. package/dist/sdk-config-ir/index.cjs +627 -541
  21. package/dist/sdk-config-ir/index.cjs.map +1 -1
  22. package/dist/sdk-config-ir/index.d.cts +1 -1
  23. package/dist/sdk-config-ir/index.d.ts +1 -1
  24. package/dist/sdk-config-ir/index.js +627 -541
  25. package/dist/sdk-config-ir/index.js.map +1 -1
  26. package/dist/sdk-config-ir/v1/index.cjs +627 -541
  27. package/dist/sdk-config-ir/v1/index.cjs.map +1 -1
  28. package/dist/sdk-config-ir/v1/index.d.cts +59 -17
  29. package/dist/sdk-config-ir/v1/index.d.ts +59 -17
  30. package/dist/sdk-config-ir/v1/index.js +627 -541
  31. package/dist/sdk-config-ir/v1/index.js.map +1 -1
  32. package/dist/{typescript-BdDv_kwT.d.cts → typescript-Chge0X4f.d.cts} +1 -2
  33. package/dist/{typescript-BdDv_kwT.d.ts → typescript-Chge0X4f.d.ts} +1 -2
  34. package/package.json +1 -1
  35. package/src/sdk-config/v1/README.md +15 -14
  36. package/src/sdk-config-ir/v1/README.md +29 -15
@@ -292,9 +292,9 @@ declare const pythonGenerationConfigSchema: z.ZodObject<{
292
292
  pydanticVersion: z.ZodOptional<z.ZodString>;
293
293
  pydantic: z.ZodOptional<z.ZodObject<{
294
294
  versionCompatibility: z.ZodOptional<z.ZodEnum<{
295
- both: "both";
296
295
  v1: "v1";
297
296
  v2: "v2";
297
+ both: "both";
298
298
  "v1-on-v2": "v1-on-v2";
299
299
  }>>;
300
300
  frozen: z.ZodOptional<z.ZodBoolean>;
@@ -419,7 +419,6 @@ declare const typescriptGenerationConfigSchema: z.ZodObject<{
419
419
  pnpm: "pnpm";
420
420
  yarn: "yarn";
421
421
  }>>;
422
- /** e.g. `1.22.22` — from the customer's own `config.packageJson.packageManager` (`yarn@1.22.22`). */
423
422
  packageManagerVersion: z.ZodOptional<z.ZodString>;
424
423
  testFramework: z.ZodOptional<z.ZodEnum<{
425
424
  jest: "jest";
@@ -292,9 +292,9 @@ declare const pythonGenerationConfigSchema: z.ZodObject<{
292
292
  pydanticVersion: z.ZodOptional<z.ZodString>;
293
293
  pydantic: z.ZodOptional<z.ZodObject<{
294
294
  versionCompatibility: z.ZodOptional<z.ZodEnum<{
295
- both: "both";
296
295
  v1: "v1";
297
296
  v2: "v2";
297
+ both: "both";
298
298
  "v1-on-v2": "v1-on-v2";
299
299
  }>>;
300
300
  frozen: z.ZodOptional<z.ZodBoolean>;
@@ -419,7 +419,6 @@ declare const typescriptGenerationConfigSchema: z.ZodObject<{
419
419
  pnpm: "pnpm";
420
420
  yarn: "yarn";
421
421
  }>>;
422
- /** e.g. `1.22.22` — from the customer's own `config.packageJson.packageManager` (`yarn@1.22.22`). */
423
422
  packageManagerVersion: z.ZodOptional<z.ZodString>;
424
423
  testFramework: z.ZodOptional<z.ZodEnum<{
425
424
  jest: "jest";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@postman/sdk-config",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "description": "Shared SDK configuration contracts and transformations for Postman SDK generation",
5
5
  "license": "UNLICENSED",
6
6
  "sideEffects": false,
@@ -63,8 +63,9 @@ severity, reason, suggested manual action, and the SDK Config destination when o
63
63
  cases. Generation must not recover omitted values from legacy configuration. Differing
64
64
  target-specific values are retained as sparse target overrides when the public shape can represent
65
65
  them. Optional `api` enrichment may be supplied after Fern's definition or IR has already been
66
- lowered into the public API shape. Credentials and signing material are preserved in SDK Config
67
- output blocks when present; callers must treat these fields as sensitive secrets.
66
+ lowered into the public API shape. Supported registry credentials, signing material, and GitHub
67
+ credentials are preserved in SDK Config when present; callers must treat these fields as sensitive
68
+ secrets.
68
69
 
69
70
  ## Contract boundaries
70
71
 
@@ -88,12 +89,14 @@ server-generated artifact metadata are not valid public locators. The public sch
88
89
  no `compatibility`, source-origin, artifact ID, credential-resolution, or server-generated
89
90
  publishing control fields. Supported registry credentials are flat fields selected by the `registry`
90
91
  discriminator: npm and crates accept `token`, PyPI and Maven accept `username` and `password`, and
91
- Maven accepts a complete `signature` containing `keyId`, `password`, and `secretKey`. Use environment
92
- expressions such as `${NPM_TOKEN}` for every credential rather than literal values. Unknown fields
93
- are rejected at every object boundary. Fern migration copies credential fields only when their raw
94
- `generators.yml` values are exact environment expressions. It never treats normalized or resolved
95
- output as credential provenance; literals and untraceable values are omitted with credential-safe
96
- warnings. Portable API, client, documentation, package, source settings, and language field schemas
92
+ Maven accepts a complete `signature` containing `keyId`, `password`, and `secretKey`. GitHub delivery
93
+ accepts a `credentials` object containing `username`, `password`, `token`, or `apiKey`. Use
94
+ environment expressions such as `${NPM_TOKEN}` for every credential rather than literal values.
95
+ Unknown fields are rejected at every object boundary. Fern migration copies credential fields only
96
+ when their raw `generators.yml` values are exact environment expressions. It never treats normalized
97
+ or resolved output as credential provenance; literals and untraceable values are omitted with
98
+ credential-safe warnings. Portable API, client, documentation, package, source settings, and
99
+ language field schemas
97
100
  come from a neutral shared domain layer to prevent drift; the public and internal envelopes and
98
101
  their operational extensions remain separate explicit allowlists.
99
102
 
@@ -117,8 +120,6 @@ segments. Absolute paths and `..` traversal are rejected at validation time.
117
120
  "output": { "delivery": "zip" },
118
121
  "replay": { "enabled": false },
119
122
  "generation": {
120
- "includeWatermark": true,
121
- "generateFullProject": false,
122
123
  "naming": { "smartCasing": true, "smartCasingDigitWordBoundary": false }
123
124
  },
124
125
  "targets": [
@@ -213,10 +214,10 @@ while an explicitly supplied array replaces the inherited array.
213
214
 
214
215
  An integration may also supply operational values at generation time. Those request values take
215
216
  precedence over the persisted SDK Config for fields the integration exposes, such as SDK name,
216
- SDK version, API version, package settings, generator version, output intent, and package-building
217
- requests such as `generation.generateFullProject`. The SDK Config continues to provide every field
218
- that the request does not override. Schema/domain defaults are applied only after this merge, when
219
- the single-target `SdkConfigIrV1` is parsed.
217
+ SDK version, API version, package settings, generator version, and output intent. Operational
218
+ packaging controls remain on the generation request rather than in the customer-authored SDK
219
+ Config. Schema/domain defaults are applied only after this merge, when the single-target
220
+ `SdkConfigIrV1` is parsed.
220
221
 
221
222
  Package publication requirements are validated after applying package and output precedence. For
222
223
  example, a TypeScript target publishing to npm may inherit a root `packageName`, while a Python
@@ -226,6 +226,9 @@ audited on 2026-07-17. Counts guide the initial contract; they are not a permane
226
226
  | `skipResponseValidation`, Python `pydantic_config.skip_validation` | `client.responseValidation` | Inverted; 12 TS, 8 Python |
227
227
  | `useDefaultRequestParameterValues` aliases | `client.useDefaultRequestParameterValues` | 1 |
228
228
  | `respectOptionalRequestBody`, `respect-optional-request-body` | `client.respectOptionalRequestBody` | Not in the project snapshot; see below |
229
+ | `auto-generate-idempotency-key`, API-wide setting | `client.idempotencyKeyGeneration` | Not in the project snapshot; see below |
230
+ | `user-agent`, `includePlatformHeaders`, `allowUserAgentAppInfo` | `client.userAgent` | Not in the project snapshot; see below |
231
+ | `offsetSemantics` | `client.offsetSemantics` | Not in the project snapshot; see below |
229
232
  | `enable-wire-tests`, `enableWireTests`, `generateWireTests` | `generation.wireTests` | 1-15 per language |
230
233
  | WebSocket generation aliases | `generation.webSockets` | 3 TS, 3 Python |
231
234
  | `streamType`, `fileResponseType` | `generation.streams` | 1 TS |
@@ -273,6 +276,16 @@ enabling it changes the signature of every endpoint whose body the API declares
273
276
  absent must keep an existing SDK's signatures rather than assert a value the generator would then
274
277
  have to honour.
275
278
 
279
+ `client.idempotencyKeyGeneration`, `client.userAgent` and `client.offsetSemantics` come from the
280
+ Fern PHP configuration page and also postdate the snapshot. Fern's `auto-generate-idempotency-key` is
281
+ `true`, `false`, or an object of `header-name` and `methods` (which enables it); `enabled` is always
282
+ explicit, so a generator's `false` can opt out of the API-wide `api.settings` value, which the
283
+ translator reads from the resolved `idempotencyKeyGenerationConfig` when the generator sets none. An
284
+ object the translator cannot fully read is reported rather than enabled with defaults. The User-Agent
285
+ options are grouped because they describe one header: `template` is Fern's `user-agent`,
286
+ `includePlatformInfo` is `includePlatformHeaders`, and `allowAppInfo` is `allowUserAgentAppInfo`.
287
+ All three stay undefaulted, for the same reason as `respectOptionalRequestBody`.
288
+
276
289
  Fern README endpoint strings such as `GET /users` are parsed into
277
290
  `{ "method": "GET", "path": "/users" }`; the legacy string shorthand is not part of the
278
291
  normalized contract.
@@ -337,19 +350,19 @@ project's OpenAPI specs carry it too and are refused for it.
337
350
 
338
351
  Only options that remain language-specific stay in `generation.language`.
339
352
 
340
- | Language | Fern fields retained in language config | Shared mappings lifted out |
341
- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
342
- | TypeScript | `packageManager` (1), `testFramework` (2), `namespaceExportName`, `allowCustomFetcher` (13), branded aliases (1), legacy exports (1), `useBigInt`, and positive `serdeLayer` from `noSerdeLayer` (8) | Namespace, validation, inline types, dependencies, wire tests, streams, WebSockets, pager/client names |
343
- | Python | Python/Pydantic versions, client filenames, model switches, TypedDict requests, redirect/chunk/recursion compatibility, and package extras | Package/module names, enum form, extra fields, response validation, request style, dependencies, timeout, layout, wire tests, WebSockets |
344
- | Java/Kotlin | Package layout (3), local dates (2), optional-nullable collapse (2), Gradle settings (7), and JVM async-client style | Maven identity, namespace, names, forward-compatible enums, inline properties, dependencies, pager, wire tests |
345
- | Go | Legacy complex models, union version (3), legacy client options (1), and the fern root-client constructor name | Module/package identity, client name, environments, smart casing, inline properties, pager, wire tests |
346
- | C# | Optional wrapper, simplified dictionaries (1), explicit namespaces (7), core namespace behavior (1), exception handler (5), and the experimental explicit-nullable-optional switch | NuGet identity, namespace, class/error names, pager, wire tests |
347
- | PHP | Property access (2) and generated client interfaces (1) | Composer identity, namespace, client/pager names, request style, dependencies, wire tests |
348
- | Ruby | Require paths (2) | Gem identity, client name, dependencies, pager, wire tests |
349
- | Rust | Datetime representation, initialism casing, and Cargo features/default-features | Crate identity, client name, and package metadata use shared fields. |
350
- | Swift | Module name and the nullable-as-optional collapse | Client, environment and error naming use shared fields. |
351
- | CLI | Pagination parameter names and the `skills` boolean | Go module and package identity use `package`. |
352
- | MCP | Server identity, availability exclusions, tool filters and named toolsets, plus the TypeScript options | npm package identity, client and serialization behavior |
353
+ | Language | Fern fields retained in language config | Shared mappings lifted out |
354
+ | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
355
+ | TypeScript | `packageManager` (1), `testFramework` (2), `namespaceExportName`, `allowCustomFetcher` (13), branded aliases (1), legacy exports (1), `useBigInt`, and positive `serdeLayer` from `noSerdeLayer` (8) | Namespace, validation, inline types, dependencies, wire tests, streams, WebSockets, pager/client names |
356
+ | Python | Python/Pydantic versions, client filenames, model switches, TypedDict requests, redirect/chunk/recursion compatibility, and package extras | Package/module names, enum form, extra fields, response validation, request style, dependencies, timeout, layout, wire tests, WebSockets |
357
+ | Java/Kotlin | Package layout (3), local dates (2), optional-nullable collapse (2), Gradle settings (7), and JVM async-client style | Maven identity, namespace, names, forward-compatible enums, inline properties, dependencies, pager, wire tests |
358
+ | Go | Legacy complex models, union version (3), legacy client options (1), and the fern root-client constructor name | Module/package identity, client name, environments, smart casing, inline properties, pager, wire tests |
359
+ | C# | Optional wrapper, simplified dictionaries (1), explicit namespaces (7), core namespace behavior (1), exception handler (5), and the experimental explicit-nullable-optional switch | NuGet identity, namespace, class/error names, pager, wire tests |
360
+ | PHP | Property access (2) and generated client interfaces (1) | Composer identity, namespace, client/pager names, request style, dependencies, wire tests, idempotency keys, User-Agent, offset semantics |
361
+ | Ruby | Require paths (2) | Gem identity, client name, dependencies, pager, wire tests |
362
+ | Rust | Datetime representation, initialism casing, and Cargo features/default-features | Crate identity, client name, and package metadata use shared fields. |
363
+ | Swift | Module name and the nullable-as-optional collapse | Client, environment and error naming use shared fields. |
364
+ | CLI | Pagination parameter names and the `skills` boolean | Go module and package identity use `package`. |
365
+ | MCP | Server identity, availability exclusions, tool filters and named toolsets, plus the TypeScript options | npm package identity, client and serialization behavior |
353
366
 
354
367
  ## Removed and deferred legacy configuration
355
368
 
@@ -359,8 +372,9 @@ the migration.
359
372
 
360
373
  ### Removed after finding no customer use and no sdk-gen-core equivalent
361
374
 
362
- - Common Fern generation: include/omit platform-header overrides. Output-profile defaults own this
363
- compatibility behavior instead of a second permanent switch.
375
+ - Common Fern generation: the omit platform-header override (`omitFernHeaders`). Output-profile
376
+ defaults own this compatibility behavior instead of a second permanent switch. The include side
377
+ was re-added as `client.userAgent.includePlatformInfo` once the Fern PHP generator documented it.
364
378
  - Source import: optional-additional-properties defaults, environment grouping strategies,
365
379
  discriminant removal, forward-compatible inference, default environment inference, const
366
380
  coercion, endpoint filters, example-depth controls, alias resolution, single-schema oneOf