@workos/oagen 0.1.0 → 0.2.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 (47) hide show
  1. package/dist/cli/index.d.mts +2 -0
  2. package/dist/cli/index.mjs +6018 -0
  3. package/dist/cli/index.mjs.map +1 -0
  4. package/dist/compat/{index.d.ts → index.d.mts} +43 -114
  5. package/dist/compat/index.d.mts.map +1 -0
  6. package/dist/compat/index.mjs +4562 -0
  7. package/dist/compat/index.mjs.map +1 -0
  8. package/dist/diff-DyQF4sel.mjs +2250 -0
  9. package/dist/diff-DyQF4sel.mjs.map +1 -0
  10. package/dist/differ-BwelBJN0.mjs +1100 -0
  11. package/dist/differ-BwelBJN0.mjs.map +1 -0
  12. package/dist/index.d.mts +295 -0
  13. package/dist/index.d.mts.map +1 -0
  14. package/dist/index.mjs +1553 -0
  15. package/dist/index.mjs.map +1 -0
  16. package/dist/scripts/smoke/baseline.d.mts +1 -0
  17. package/dist/scripts/smoke/baseline.mjs +1916 -0
  18. package/dist/scripts/smoke/baseline.mjs.map +1 -0
  19. package/dist/scripts/smoke/sdk-test.d.mts +1 -0
  20. package/dist/scripts/smoke/sdk-test.mjs +111 -0
  21. package/dist/scripts/smoke/sdk-test.mjs.map +1 -0
  22. package/dist/smoke.d.mts +331 -0
  23. package/dist/smoke.d.mts.map +1 -0
  24. package/dist/smoke.mjs +2084 -0
  25. package/dist/smoke.mjs.map +1 -0
  26. package/dist/tree-sitter-BPNfbEzY.mjs +359 -0
  27. package/dist/tree-sitter-BPNfbEzY.mjs.map +1 -0
  28. package/dist/types-O25qZxMl.d.mts +397 -0
  29. package/dist/types-O25qZxMl.d.mts.map +1 -0
  30. package/dist/verify/index.d.mts +82 -0
  31. package/dist/verify/index.d.mts.map +1 -0
  32. package/dist/verify/index.mjs +327 -0
  33. package/dist/verify/index.mjs.map +1 -0
  34. package/package.json +19 -16
  35. package/dist/chunk-CIX5NOBF.js +0 -263
  36. package/dist/chunk-IJ5E5AE7.js +0 -1040
  37. package/dist/chunk-VUSRNIG2.js +0 -1661
  38. package/dist/cli/index.js +0 -5314
  39. package/dist/compat/index.js +0 -4491
  40. package/dist/index.d.ts +0 -277
  41. package/dist/index.js +0 -1565
  42. package/dist/scripts/smoke/baseline.js +0 -1813
  43. package/dist/scripts/smoke/sdk-test.js +0 -93
  44. package/dist/smoke.js +0 -2025
  45. package/dist/types-B5t9O9Wm.d.ts +0 -367
  46. package/dist/verify/index.d.ts +0 -76
  47. package/dist/verify/index.js +0 -336
@@ -0,0 +1,331 @@
1
+ //#region src/ir/types.d.ts
2
+ /** Authentication scheme extracted from OpenAPI securitySchemes */
3
+ type AuthScheme = {
4
+ kind: 'bearer';
5
+ } | {
6
+ kind: 'apiKey';
7
+ in: 'header' | 'query' | 'cookie';
8
+ name: string;
9
+ } | {
10
+ kind: 'oauth2';
11
+ flows: Record<string, unknown>;
12
+ };
13
+ /** Root IR node representing the full API surface */
14
+ /** A server entry from the OpenAPI servers array */
15
+ interface ServerEntry {
16
+ url: string;
17
+ description?: string;
18
+ }
19
+ /** Root IR node representing the full API surface */
20
+ interface ApiSpec {
21
+ name: string;
22
+ version: string;
23
+ description?: string;
24
+ baseUrl: string;
25
+ servers?: ServerEntry[];
26
+ services: Service[];
27
+ models: Model[];
28
+ enums: Enum[];
29
+ auth?: AuthScheme[];
30
+ }
31
+ /** A service groups related operations (maps to an SDK resource class) */
32
+ interface Service {
33
+ name: string;
34
+ description?: string;
35
+ operations: Operation[];
36
+ }
37
+ /** A single API operation (maps to an SDK method) */
38
+ interface Operation {
39
+ name: string;
40
+ description?: string;
41
+ httpMethod: HttpMethod;
42
+ path: string;
43
+ pathParams: Parameter[];
44
+ queryParams: Parameter[];
45
+ headerParams: Parameter[];
46
+ cookieParams?: Parameter[];
47
+ requestBody?: TypeRef;
48
+ requestBodyEncoding?: 'json' | 'form-data' | 'form-urlencoded' | 'binary' | 'text';
49
+ response: TypeRef;
50
+ successResponses?: SuccessResponse[];
51
+ errors: ErrorResponse[];
52
+ pagination?: PaginationMeta;
53
+ injectIdempotencyKey: boolean;
54
+ deprecated?: boolean;
55
+ async?: boolean;
56
+ }
57
+ /** Structured pagination metadata for auto-paging iterator generation */
58
+ interface PaginationMeta {
59
+ strategy: 'cursor' | 'offset' | 'link-header';
60
+ param: string;
61
+ limitParam?: string;
62
+ dataPath?: string;
63
+ itemType: TypeRef;
64
+ }
65
+ type HttpMethod = 'get' | 'post' | 'put' | 'patch' | 'delete' | 'head' | 'options' | 'trace';
66
+ interface Parameter {
67
+ name: string;
68
+ type: TypeRef;
69
+ required: boolean;
70
+ description?: string;
71
+ deprecated?: boolean;
72
+ default?: unknown;
73
+ example?: unknown;
74
+ }
75
+ /** Type reference — the core type system of the IR */
76
+ type TypeRef = PrimitiveType | ArrayType | ModelRef | EnumRef | UnionType | NullableType | LiteralType | MapType;
77
+ interface PrimitiveType {
78
+ kind: 'primitive';
79
+ type: 'string' | 'integer' | 'number' | 'boolean' | 'unknown';
80
+ format?: string;
81
+ }
82
+ interface ArrayType {
83
+ kind: 'array';
84
+ items: TypeRef;
85
+ }
86
+ interface ModelRef {
87
+ kind: 'model';
88
+ name: string;
89
+ }
90
+ interface EnumRef {
91
+ kind: 'enum';
92
+ name: string;
93
+ values?: (string | number)[];
94
+ }
95
+ interface LiteralType {
96
+ kind: 'literal';
97
+ value: string | number | boolean | null;
98
+ }
99
+ interface UnionType {
100
+ kind: 'union';
101
+ variants: TypeRef[];
102
+ discriminator?: {
103
+ property: string;
104
+ mapping: Record<string, string>;
105
+ };
106
+ /** Which OAS composition keyword produced this union. Emitters can use this to
107
+ * distinguish inheritance (allOf) from exclusive union (oneOf) from open union (anyOf). */
108
+ compositionKind?: 'allOf' | 'oneOf' | 'anyOf';
109
+ }
110
+ interface NullableType {
111
+ kind: 'nullable';
112
+ inner: TypeRef;
113
+ }
114
+ interface MapType {
115
+ kind: 'map';
116
+ valueType: TypeRef;
117
+ keyType?: TypeRef;
118
+ }
119
+ /**
120
+ * A generic type parameter on a model.
121
+ * Example: `DirectoryUser<TCustomAttributes = Record<string, unknown>>`
122
+ * → `{ name: 'TCustomAttributes', default: { kind: 'map', valueType: { kind: 'primitive', type: 'unknown' } } }`
123
+ */
124
+ interface TypeParam {
125
+ name: string;
126
+ /** Default type when the param is not specified. */
127
+ default?: TypeRef;
128
+ }
129
+ /** Model definition (maps to an SDK model/data class) */
130
+ interface Model {
131
+ name: string;
132
+ description?: string;
133
+ fields: Field[];
134
+ /** Generic type parameters. Empty/undefined for non-generic models. */
135
+ typeParams?: TypeParam[];
136
+ }
137
+ interface Field {
138
+ name: string;
139
+ type: TypeRef;
140
+ required: boolean;
141
+ description?: string;
142
+ readOnly?: boolean;
143
+ writeOnly?: boolean;
144
+ deprecated?: boolean;
145
+ default?: unknown;
146
+ example?: unknown;
147
+ }
148
+ /** Enum definition */
149
+ interface Enum {
150
+ name: string;
151
+ values: EnumValue[];
152
+ }
153
+ interface EnumValue {
154
+ name: string;
155
+ value: string | number;
156
+ description?: string;
157
+ deprecated?: boolean;
158
+ }
159
+ interface ErrorResponse {
160
+ statusCode: number;
161
+ type?: TypeRef;
162
+ }
163
+ /** A successful response entry from a 2xx status code */
164
+ interface SuccessResponse {
165
+ statusCode: number;
166
+ type: TypeRef;
167
+ }
168
+ //#endregion
169
+ //#region src/parser/parse.d.ts
170
+ interface ParseOptions {
171
+ operationIdTransform?: (id: string) => string;
172
+ }
173
+ declare function parseSpec(specPath: string, options?: ParseOptions): Promise<ApiSpec>;
174
+ //#endregion
175
+ //#region src/utils/naming.d.ts
176
+ declare function toCamelCase(s: string, acronyms?: Set<string>): string;
177
+ declare function toSnakeCase(s: string): string;
178
+ //#endregion
179
+ //#region scripts/smoke/shared.d.ts
180
+ interface ExchangeProvenance {
181
+ resolutionTier: 'exact' | 'crud-prefix' | 'fuzzy' | 'manifest';
182
+ resolutionConfidence: number;
183
+ sdkMethodName: string;
184
+ captureIndex: number;
185
+ totalCaptures: number;
186
+ }
187
+ interface CapturedExchange {
188
+ operationId: string;
189
+ service: string;
190
+ operationName: string;
191
+ request: {
192
+ method: string;
193
+ path: string;
194
+ queryParams: Record<string, string>;
195
+ body: unknown | null;
196
+ };
197
+ response: {
198
+ status: number;
199
+ body: unknown | null;
200
+ };
201
+ outcome: 'success' | 'api-error' | 'skipped';
202
+ error?: string;
203
+ /** True when the response status code is not declared in the OpenAPI spec for this operation */
204
+ unexpectedStatus?: boolean;
205
+ /** Status codes declared in the OpenAPI spec (success + error codes) */
206
+ expectedStatusCodes?: number[];
207
+ durationMs: number;
208
+ /** How the SDK method was resolved and which capture was selected */
209
+ provenance?: ExchangeProvenance;
210
+ }
211
+ interface SmokeResults {
212
+ source: 'raw' | 'spec-baseline' | `sdk-${string}`;
213
+ timestamp: string;
214
+ specVersion: string;
215
+ exchanges: CapturedExchange[];
216
+ }
217
+ interface PlannedOperation {
218
+ service: string;
219
+ operation: Operation;
220
+ }
221
+ interface PlannedGroup {
222
+ service: string;
223
+ operations: PlannedOperation[];
224
+ }
225
+ /** Operations that require complex preconditions and can't be auto-tested */
226
+ declare let SKIP_OPERATIONS: Set<string>;
227
+ /** Services to skip entirely */
228
+ declare let SKIP_SERVICES: Set<string>;
229
+ /**
230
+ * Map IR service names to SDK property names on the client object.
231
+ * Empty = use toCamelCase(serviceName) as fallback.
232
+ */
233
+ declare let SERVICE_PROPERTY_MAP: Record<string, string>;
234
+ interface SmokeConfig {
235
+ skipOperations: string[];
236
+ skipServices: string[];
237
+ servicePriority: Record<string, number>;
238
+ servicePropertyMap: Record<string, string>;
239
+ }
240
+ /** Load smoke test configuration from a JSON file */
241
+ declare function loadSmokeConfig(configPath?: string): void;
242
+ /** Return the current smoke config values (for diff.ts to consume) */
243
+ declare function getSmokeConfig(): {
244
+ skipOperations: Set<string>;
245
+ skipServices: Set<string>;
246
+ servicePriority: Record<string, number>;
247
+ servicePropertyMap: Record<string, string>;
248
+ };
249
+ declare function planOperations(spec: ApiSpec): PlannedGroup[];
250
+ /**
251
+ * A single wave of operations that can be planned and executed together.
252
+ * Wave 0 contains parameterless operations. Subsequent waves contain
253
+ * operations whose path params became resolvable after earlier waves ran.
254
+ */
255
+ interface OperationWave {
256
+ /** Operations in this wave, with pre-resolved path params */
257
+ calls: Array<{
258
+ op: Operation;
259
+ irService: string;
260
+ pathParams: Record<string, string>;
261
+ }>;
262
+ }
263
+ /**
264
+ * Plan operations in waves so that batched runners can execute each wave,
265
+ * extract IDs from responses, then plan the next wave.
266
+ *
267
+ * Returns an iterator that yields one wave at a time. The caller must
268
+ * execute each wave and populate the IdRegistry before calling next().
269
+ *
270
+ * @param groups - service groups from planOperations()
271
+ * @param ids - the IdRegistry (mutated by the caller between waves)
272
+ * @param resolveMethod - optional filter; return null to skip an operation
273
+ */
274
+ declare function planWaves(groups: PlannedGroup[], ids: IdRegistry, resolveMethod?: (op: Operation, irService: string) => boolean): Generator<OperationWave, PlannedOperation[], void>;
275
+ declare function generateFixtureValue(typeRef: TypeRef, fieldName: string, spec: ApiSpec): unknown;
276
+ /** Generate a snake_case request body payload from an operation's requestBody type */
277
+ declare function generatePayload(op: Operation, spec: ApiSpec): Record<string, unknown> | null;
278
+ /** Generate a camelCase payload for SDK method calls */
279
+ declare function generateCamelPayload(op: Operation, spec: ApiSpec): Record<string, unknown> | null;
280
+ /** Generate query params for an operation (required params only, plus limit=1 for lists) */
281
+ declare function generateQueryParams(op: Operation, spec: ApiSpec): Record<string, string>;
282
+ /** Generate camelCase query params for SDK method calls */
283
+ declare function generateCamelQueryParams(op: Operation, spec: ApiSpec): Record<string, unknown>;
284
+ declare class IdRegistry {
285
+ private ids;
286
+ set(service: string, field: string, value: string): void;
287
+ get(service: string, field: string): string | undefined;
288
+ /** Resolve path parameters for an operation using stored IDs */
289
+ resolvePathParams(op: Operation, service: string): Record<string, string> | null;
290
+ /** Try to find a param value across all services */
291
+ private findAcrossServices;
292
+ /**
293
+ * Resolve a path param like "organizationId" by mapping it to the
294
+ * service that stores that entity's ID (e.g. Organizations.id).
295
+ * Also handles snake_case suffixed with _id by stripping the suffix
296
+ * and looking up the pluralized service name.
297
+ */
298
+ private resolveFromParamName;
299
+ /**
300
+ * Find a value by looking for any service name that ends with the given suffix.
301
+ * e.g. suffix "Users" matches "UserManagementUsers.id"
302
+ */
303
+ private findByServiceSuffix;
304
+ /**
305
+ * Last-resort fallback: use the spec's example or default value for a parameter.
306
+ * Many path params (e.g. actionName, slug, type) have example values in the spec.
307
+ */
308
+ private resolveFromExample;
309
+ /**
310
+ * Extract IDs from a response body and store them.
311
+ * @param isTopLevel - true for operations without path params (their `id` belongs to this service).
312
+ * false for sub-resource operations (their `id` is a child entity, don't overwrite).
313
+ */
314
+ extractAndStore(service: string, responseBody: unknown, isTopLevel?: boolean): void;
315
+ /** Extract fields ending in _id or Id and store them for cross-service resolution */
316
+ private extractNestedIds;
317
+ }
318
+ /** Get the set of status codes declared in the spec for an operation (success + errors) */
319
+ declare function getExpectedStatusCodes(op: Operation): number[];
320
+ /** Check if a status code is unexpected (not declared in the spec) */
321
+ declare function isUnexpectedStatus(status: number, op: Operation): boolean;
322
+ declare function resolvePath(op: Operation, pathParams: Record<string, string>): string;
323
+ declare function delay(ms: number): Promise<void>;
324
+ declare function parseCliArgs(): {
325
+ spec: string;
326
+ sdkPath?: string;
327
+ smokeConfig?: string;
328
+ };
329
+ //#endregion
330
+ export { CapturedExchange, ExchangeProvenance, IdRegistry, OperationWave, PlannedGroup, PlannedOperation, SERVICE_PROPERTY_MAP, SKIP_OPERATIONS, SKIP_SERVICES, SmokeConfig, SmokeResults, delay, generateCamelPayload, generateCamelQueryParams, generateFixtureValue, generatePayload, generateQueryParams, getExpectedStatusCodes, getSmokeConfig, isUnexpectedStatus, loadSmokeConfig, parseCliArgs, parseSpec, planOperations, planWaves, resolvePath, toCamelCase, toSnakeCase };
331
+ //# sourceMappingURL=smoke.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smoke.d.mts","names":[],"sources":["../src/ir/types.ts","../src/parser/parse.ts","../src/utils/naming.ts","../scripts/smoke/shared.ts"],"mappings":"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"}