@objectstack/connector-openapi 17.2.0 → 17.4.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,449 @@
1
1
  # @objectstack/connector-openapi
2
2
 
3
+ ## 17.4.0
4
+
5
+ ### Patch Changes
6
+
7
+ - be92d46: These fourteen packages now declare `repository.directory`, so their npm pages carry a working "source" deep link to their own directory in the monorepo.
8
+
9
+ npm renders that field by concatenating it onto `repository.url`. None of these fourteen manifests carried a `repository` block at all, so every one of their npm pages offered no route from the package back to its code — not a broken link, no link. That is what this publishes: the block those pages read, naming each package's own directory.
10
+
11
+ Nothing else about these packages changes. No export, no runtime behaviour, no dependency and no file in the tarball other than the manifest's own `repository` key. The version bump exists because the fix is only real once it is published: the field lives in the manifest npm serves, so a corrected manifest sitting in the repository leaves the package page exactly as wrong as it was.
12
+
13
+ The rule behind it is now mechanical rather than remembered — `check:manifest-repository-directory` makes a publishable (non-private) workspace manifest declare the field naming its own directory, so a package added or moved after this cannot quietly go back to having no source link.
14
+ - Updated dependencies [fe0d9a4]
15
+ - Updated dependencies [ecd2158]
16
+ - Updated dependencies [f2b5e46]
17
+ - Updated dependencies [2ed6be6]
18
+ - Updated dependencies [ed7243d]
19
+ - Updated dependencies [6ba0db4]
20
+ - Updated dependencies [625b0c3]
21
+ - Updated dependencies [233222e]
22
+ - Updated dependencies [07f40e5]
23
+ - Updated dependencies [ceb4877]
24
+ - Updated dependencies [e9fcd6b]
25
+ - Updated dependencies [90e7e6d]
26
+ - Updated dependencies [2bdabe6]
27
+ - Updated dependencies [ca326b5]
28
+ - Updated dependencies [8f404a5]
29
+ - Updated dependencies [68437d4]
30
+ - Updated dependencies [abb140c]
31
+ - Updated dependencies [8333a6c]
32
+ - Updated dependencies [3e3ecb0]
33
+ - Updated dependencies [3030369]
34
+ - Updated dependencies [d5d8d50]
35
+ - Updated dependencies [e08892d]
36
+ - Updated dependencies [ae05f2e]
37
+ - Updated dependencies [b548e43]
38
+ - Updated dependencies [c463d03]
39
+ - Updated dependencies [64bd6a3]
40
+ - Updated dependencies [13c48c2]
41
+ - Updated dependencies [b0529e1]
42
+ - Updated dependencies [66dc6ab]
43
+ - Updated dependencies [6f94458]
44
+ - Updated dependencies [6e67b86]
45
+ - Updated dependencies [132742f]
46
+ - Updated dependencies [85a2459]
47
+ - Updated dependencies [50dc214]
48
+ - Updated dependencies [e89fa92]
49
+ - Updated dependencies [e9fcd6b]
50
+ - Updated dependencies [8976ea1]
51
+ - Updated dependencies [56fe8c2]
52
+ - Updated dependencies [acabd24]
53
+ - Updated dependencies [ab50c8f]
54
+ - Updated dependencies [6491463]
55
+ - Updated dependencies [89cf4d6]
56
+ - Updated dependencies [21c5dcb]
57
+ - Updated dependencies [6d4d5d3]
58
+ - Updated dependencies [ed5d557]
59
+ - Updated dependencies [bca21f7]
60
+ - Updated dependencies [e9fcd6b]
61
+ - Updated dependencies [2025b1f]
62
+ - Updated dependencies [1a7a7c9]
63
+ - Updated dependencies [e9fcd6b]
64
+ - Updated dependencies [ef3a138]
65
+ - Updated dependencies [68d5dfd]
66
+ - Updated dependencies [3e21cf0]
67
+ - Updated dependencies [4cfc93b]
68
+ - Updated dependencies [efd6b43]
69
+ - Updated dependencies [859ded3]
70
+ - Updated dependencies [fa125f3]
71
+ - Updated dependencies [74628d9]
72
+ - Updated dependencies [a646120]
73
+ - Updated dependencies [6f1ce7d]
74
+ - Updated dependencies [7778115]
75
+ - Updated dependencies [2c753fe]
76
+ - Updated dependencies [52804cd]
77
+ - Updated dependencies [3f89967]
78
+ - Updated dependencies [53cf263]
79
+ - Updated dependencies [21aabbc]
80
+ - Updated dependencies [9c270bb]
81
+ - Updated dependencies [76c8c5a]
82
+ - Updated dependencies [a84e1ce]
83
+ - Updated dependencies [bf1054a]
84
+ - Updated dependencies [d8d2776]
85
+ - Updated dependencies [222dc0f]
86
+ - Updated dependencies [e9fcd6b]
87
+ - Updated dependencies [32c917d]
88
+ - Updated dependencies [f9a3c32]
89
+ - Updated dependencies [f502898]
90
+ - Updated dependencies [51ae731]
91
+ - Updated dependencies [af7edfe]
92
+ - Updated dependencies [b60f48b]
93
+ - Updated dependencies [c78c918]
94
+ - Updated dependencies [cf9bda4]
95
+ - Updated dependencies [784cb92]
96
+ - Updated dependencies [7629f4d]
97
+ - Updated dependencies [51df9fd]
98
+ - Updated dependencies [a7da4de]
99
+ - Updated dependencies [de0bcdd]
100
+ - Updated dependencies [70f7d6d]
101
+ - Updated dependencies [c677cda]
102
+ - Updated dependencies [554a160]
103
+ - Updated dependencies [f7da71e]
104
+ - Updated dependencies [7f745c3]
105
+ - Updated dependencies [5eb24f8]
106
+ - Updated dependencies [2a3decc]
107
+ - Updated dependencies [cc00df2]
108
+ - Updated dependencies [cc00df2]
109
+ - Updated dependencies [f4e6adf]
110
+ - Updated dependencies [ee4a59b]
111
+ - Updated dependencies [4db3c61]
112
+ - Updated dependencies [5ca314a]
113
+ - Updated dependencies [e0af1a8]
114
+ - Updated dependencies [4771bd9]
115
+ - Updated dependencies [414c1fc]
116
+ - Updated dependencies [22c0279]
117
+ - Updated dependencies [0db2947]
118
+ - Updated dependencies [92b5d7f]
119
+ - Updated dependencies [613bfbd]
120
+ - Updated dependencies [abae16a]
121
+ - Updated dependencies [094b8fd]
122
+ - Updated dependencies [c7aca0d]
123
+ - Updated dependencies [c1d8f98]
124
+ - Updated dependencies [8e0b297]
125
+ - Updated dependencies [d4f9b2a]
126
+ - Updated dependencies [5f7fa1d]
127
+ - Updated dependencies [87f0ccc]
128
+ - Updated dependencies [aedbaef]
129
+ - Updated dependencies [a727043]
130
+ - Updated dependencies [c5d6803]
131
+ - Updated dependencies [10d05bb]
132
+ - Updated dependencies [69602e5]
133
+ - Updated dependencies [c3ce76c]
134
+ - Updated dependencies [7936b29]
135
+ - Updated dependencies [46803fa]
136
+ - Updated dependencies [c2a336c]
137
+ - Updated dependencies [9f890d3]
138
+ - Updated dependencies [0bb2318]
139
+ - Updated dependencies [f7db8f4]
140
+ - Updated dependencies [1ecee3e]
141
+ - Updated dependencies [9408b7f]
142
+ - Updated dependencies [e9fcd6b]
143
+ - Updated dependencies [9bcd9be]
144
+ - Updated dependencies [b398ad2]
145
+ - Updated dependencies [99261a7]
146
+ - Updated dependencies [81b426f]
147
+ - Updated dependencies [001af1c]
148
+ - Updated dependencies [fb77aa5]
149
+ - Updated dependencies [581d8f8]
150
+ - Updated dependencies [f81afe3]
151
+ - Updated dependencies [40a44b9]
152
+ - Updated dependencies [f89812e]
153
+ - Updated dependencies [7a7fb03]
154
+ - Updated dependencies [8fd246d]
155
+ - @objectstack/spec@17.4.0
156
+ - @objectstack/core@17.4.0
157
+
158
+ ## 17.3.0
159
+
160
+ ### Patch Changes
161
+
162
+ - Updated dependencies [809d417]
163
+ - Updated dependencies [387e231]
164
+ - Updated dependencies [f794e4e]
165
+ - Updated dependencies [cae2169]
166
+ - Updated dependencies [b812a54]
167
+ - Updated dependencies [2d4fa75]
168
+ - Updated dependencies [0e4e51b]
169
+ - Updated dependencies [e84bbf6]
170
+ - Updated dependencies [effae80]
171
+ - Updated dependencies [efb3513]
172
+ - Updated dependencies [d62f990]
173
+ - Updated dependencies [c45d8e6]
174
+ - Updated dependencies [2e3e8c7]
175
+ - Updated dependencies [e621291]
176
+ - Updated dependencies [655b106]
177
+ - Updated dependencies [40a93b5]
178
+ - Updated dependencies [d5b330d]
179
+ - Updated dependencies [dda969c]
180
+ - Updated dependencies [1f45690]
181
+ - Updated dependencies [277948f]
182
+ - Updated dependencies [8bdd955]
183
+ - Updated dependencies [f3bbbef]
184
+ - Updated dependencies [4f24e9d]
185
+ - Updated dependencies [e27583e]
186
+ - Updated dependencies [4bd6faa]
187
+ - Updated dependencies [86cbe37]
188
+ - Updated dependencies [6a180e4]
189
+ - Updated dependencies [474242f]
190
+ - Updated dependencies [63cd487]
191
+ - Updated dependencies [bd4aa4e]
192
+ - Updated dependencies [803eaab]
193
+ - Updated dependencies [f8e8f03]
194
+ - Updated dependencies [983edf1]
195
+ - Updated dependencies [eae824e]
196
+ - Updated dependencies [f6fa22c]
197
+ - Updated dependencies [8a483b3]
198
+ - Updated dependencies [97bcd99]
199
+ - Updated dependencies [df59de0]
200
+ - Updated dependencies [96e25a8]
201
+ - Updated dependencies [f75a38a]
202
+ - Updated dependencies [7a25e7d]
203
+ - Updated dependencies [1fa05a6]
204
+ - Updated dependencies [c85a265]
205
+ - Updated dependencies [dcb10a5]
206
+ - Updated dependencies [773a999]
207
+ - Updated dependencies [35dffea]
208
+ - Updated dependencies [d8024f0]
209
+ - Updated dependencies [8120808]
210
+ - Updated dependencies [776a098]
211
+ - Updated dependencies [5060877]
212
+ - Updated dependencies [4f6325d]
213
+ - Updated dependencies [52954c0]
214
+ - Updated dependencies [2aa8456]
215
+ - Updated dependencies [93809a3]
216
+ - Updated dependencies [7c0d0c3]
217
+ - Updated dependencies [daae7aa]
218
+ - Updated dependencies [8dc22d6]
219
+ - Updated dependencies [279431e]
220
+ - Updated dependencies [948dd6b]
221
+ - Updated dependencies [3b4c56c]
222
+ - Updated dependencies [ae8edd2]
223
+ - Updated dependencies [e25403c]
224
+ - Updated dependencies [64baa68]
225
+ - Updated dependencies [9fa70d7]
226
+ - Updated dependencies [09db64a]
227
+ - Updated dependencies [92916e7]
228
+ - Updated dependencies [a84f3ea]
229
+ - Updated dependencies [f2eaae8]
230
+ - Updated dependencies [c09451b]
231
+ - Updated dependencies [ba64877]
232
+ - Updated dependencies [7345308]
233
+ - Updated dependencies [79b6a22]
234
+ - Updated dependencies [30d96ab]
235
+ - Updated dependencies [f658793]
236
+ - Updated dependencies [c95ad19]
237
+ - Updated dependencies [e58ea8b]
238
+ - Updated dependencies [4a17645]
239
+ - Updated dependencies [3795c5f]
240
+ - Updated dependencies [8ab926b]
241
+ - Updated dependencies [7317cf2]
242
+ - Updated dependencies [e25e839]
243
+ - Updated dependencies [5997207]
244
+ - Updated dependencies [8b13cc8]
245
+ - Updated dependencies [4a4a35d]
246
+ - Updated dependencies [86e765a]
247
+ - Updated dependencies [1d7e76a]
248
+ - Updated dependencies [53dc739]
249
+ - Updated dependencies [fd289be]
250
+ - Updated dependencies [03bf7b1]
251
+ - Updated dependencies [f90e820]
252
+ - Updated dependencies [18d816a]
253
+ - Updated dependencies [e8bd715]
254
+ - Updated dependencies [b91c351]
255
+ - Updated dependencies [a28a3c0]
256
+ - Updated dependencies [daeaaf9]
257
+ - Updated dependencies [c459da6]
258
+ - Updated dependencies [e914733]
259
+ - Updated dependencies [f887e52]
260
+ - Updated dependencies [881f8d8]
261
+ - Updated dependencies [3bfa1e6]
262
+ - Updated dependencies [0a8ebf3]
263
+ - Updated dependencies [901355c]
264
+ - Updated dependencies [34ce8e7]
265
+ - Updated dependencies [33681ea]
266
+ - Updated dependencies [4635f3e]
267
+ - Updated dependencies [fd289be]
268
+ - Updated dependencies [ee3595c]
269
+ - Updated dependencies [b2eab95]
270
+ - Updated dependencies [93940d4]
271
+ - Updated dependencies [3a04b01]
272
+ - Updated dependencies [45b9051]
273
+ - Updated dependencies [b9e9227]
274
+ - Updated dependencies [d395692]
275
+ - Updated dependencies [5894d30]
276
+ - Updated dependencies [a3765f6]
277
+ - Updated dependencies [2d5cee3]
278
+ - Updated dependencies [e22158f]
279
+ - Updated dependencies [7404925]
280
+ - Updated dependencies [0c2334f]
281
+ - Updated dependencies [778c59f]
282
+ - Updated dependencies [d2619fd]
283
+ - Updated dependencies [af56546]
284
+ - Updated dependencies [6acb11a]
285
+ - Updated dependencies [33c5fd3]
286
+ - Updated dependencies [20b0fdb]
287
+ - Updated dependencies [905019b]
288
+ - Updated dependencies [a286411]
289
+ - Updated dependencies [98c0d33]
290
+ - Updated dependencies [368a82e]
291
+ - Updated dependencies [a3d5724]
292
+ - Updated dependencies [93ea19b]
293
+ - Updated dependencies [9ee2dcf]
294
+ - Updated dependencies [8cb96ec]
295
+ - Updated dependencies [8f10a79]
296
+ - Updated dependencies [6269a55]
297
+ - Updated dependencies [a17da05]
298
+ - Updated dependencies [a8c00e2]
299
+ - Updated dependencies [0fb8760]
300
+ - Updated dependencies [e5ce2ed]
301
+ - Updated dependencies [be21955]
302
+ - Updated dependencies [bc56e18]
303
+ - Updated dependencies [be21955]
304
+ - Updated dependencies [a9ee989]
305
+ - Updated dependencies [4d0d944]
306
+ - Updated dependencies [15d58db]
307
+ - Updated dependencies [d63b014]
308
+ - Updated dependencies [9abe4e4]
309
+ - Updated dependencies [2cc7122]
310
+ - Updated dependencies [50d6c92]
311
+ - Updated dependencies [9e0ba21]
312
+ - Updated dependencies [311433f]
313
+ - Updated dependencies [3e5ad08]
314
+ - Updated dependencies [9abe4e4]
315
+ - Updated dependencies [b7131f3]
316
+ - Updated dependencies [e5812fa]
317
+ - Updated dependencies [7085f90]
318
+ - Updated dependencies [dee4dd4]
319
+ - Updated dependencies [ce7e497]
320
+ - Updated dependencies [51ecb2f]
321
+ - Updated dependencies [9086761]
322
+ - Updated dependencies [42a117b]
323
+ - Updated dependencies [1401ae7]
324
+ - Updated dependencies [4297fe7]
325
+ - Updated dependencies [e398863]
326
+ - Updated dependencies [d16df74]
327
+ - Updated dependencies [f11fc61]
328
+ - Updated dependencies [e808890]
329
+ - Updated dependencies [8f79379]
330
+ - Updated dependencies [e6ca40e]
331
+ - Updated dependencies [0c77ea4]
332
+ - Updated dependencies [52954c0]
333
+ - Updated dependencies [89eb997]
334
+ - Updated dependencies [7131f12]
335
+ - Updated dependencies [aa5994e]
336
+ - Updated dependencies [be93457]
337
+ - Updated dependencies [a65db76]
338
+ - Updated dependencies [15eb2c9]
339
+ - Updated dependencies [5691b07]
340
+ - Updated dependencies [2a6122b]
341
+ - Updated dependencies [225e769]
342
+ - Updated dependencies [8af88dd]
343
+ - Updated dependencies [fb5fbb8]
344
+ - Updated dependencies [d7b3963]
345
+ - Updated dependencies [33184fd]
346
+ - Updated dependencies [7c41693]
347
+ - Updated dependencies [b72db01]
348
+ - Updated dependencies [dce5cd4]
349
+ - Updated dependencies [9688f58]
350
+ - Updated dependencies [556ebc1]
351
+ - Updated dependencies [177ebdc]
352
+ - Updated dependencies [8d237b4]
353
+ - Updated dependencies [2d2e6f0]
354
+ - Updated dependencies [2d8dd8d]
355
+ - Updated dependencies [22d573e]
356
+ - Updated dependencies [b5a2398]
357
+ - Updated dependencies [348860c]
358
+ - Updated dependencies [5383fa6]
359
+ - Updated dependencies [5b3ff63]
360
+ - Updated dependencies [1a6a19c]
361
+ - Updated dependencies [527e050]
362
+ - Updated dependencies [dd33bf9]
363
+ - Updated dependencies [4cb2a90]
364
+ - Updated dependencies [74a7804]
365
+ - Updated dependencies [53d3689]
366
+ - Updated dependencies [b3a63d3]
367
+ - Updated dependencies [49f0dcf]
368
+ - Updated dependencies [033a34c]
369
+ - Updated dependencies [4d25d22]
370
+ - Updated dependencies [1ffee51]
371
+ - Updated dependencies [5ae4303]
372
+ - Updated dependencies [ece4dad]
373
+ - Updated dependencies [e9b377e]
374
+ - Updated dependencies [146f448]
375
+ - Updated dependencies [735f5c7]
376
+ - Updated dependencies [a7e18de]
377
+ - Updated dependencies [366f895]
378
+ - Updated dependencies [dc75ba8]
379
+ - Updated dependencies [cce0aa9]
380
+ - Updated dependencies [e764507]
381
+ - Updated dependencies [cff17af]
382
+ - Updated dependencies [39404f3]
383
+ - Updated dependencies [ca1965f]
384
+ - Updated dependencies [8619f95]
385
+ - Updated dependencies [b706af9]
386
+ - Updated dependencies [add4360]
387
+ - Updated dependencies [fc9ba76]
388
+ - Updated dependencies [0f94cc7]
389
+ - Updated dependencies [a11c1a5]
390
+ - Updated dependencies [71f9cd1]
391
+ - Updated dependencies [ee17d86]
392
+ - Updated dependencies [cdbd920]
393
+ - Updated dependencies [18c432e]
394
+ - Updated dependencies [3c418c4]
395
+ - Updated dependencies [fa8715a]
396
+ - Updated dependencies [a933ed7]
397
+ - Updated dependencies [b3ca463]
398
+ - Updated dependencies [a933ed7]
399
+ - Updated dependencies [0d4a6a8]
400
+ - Updated dependencies [518d5e5]
401
+ - Updated dependencies [6643ba1]
402
+ - Updated dependencies [eeba2ef]
403
+ - Updated dependencies [ec4c4d2]
404
+ - Updated dependencies [424f73c]
405
+ - Updated dependencies [cccbe51]
406
+ - Updated dependencies [a8d6b1d]
407
+ - Updated dependencies [e4a7695]
408
+ - Updated dependencies [87075b1]
409
+ - Updated dependencies [fc58a99]
410
+ - Updated dependencies [14cfc00]
411
+ - Updated dependencies [1c6f7b4]
412
+ - Updated dependencies [e854a53]
413
+ - Updated dependencies [dfebfc8]
414
+ - Updated dependencies [d028b37]
415
+ - Updated dependencies [f7b25c5]
416
+ - Updated dependencies [122ef38]
417
+ - Updated dependencies [4a37870]
418
+ - Updated dependencies [428f9b2]
419
+ - Updated dependencies [aa7ff56]
420
+ - Updated dependencies [c41b42e]
421
+ - Updated dependencies [c4db311]
422
+ - Updated dependencies [750fff5]
423
+ - Updated dependencies [c19035e]
424
+ - Updated dependencies [ececf7a]
425
+ - Updated dependencies [d173125]
426
+ - Updated dependencies [8eeca27]
427
+ - Updated dependencies [8425c17]
428
+ - Updated dependencies [a5ef1d8]
429
+ - Updated dependencies [772d5de]
430
+ - Updated dependencies [ce80ec2]
431
+ - Updated dependencies [b372318]
432
+ - Updated dependencies [97a2263]
433
+ - Updated dependencies [29d0676]
434
+ - Updated dependencies [0169d49]
435
+ - Updated dependencies [6bd3231]
436
+ - Updated dependencies [d2b5ba8]
437
+ - Updated dependencies [b799ac5]
438
+ - Updated dependencies [8f74307]
439
+ - Updated dependencies [d23dc08]
440
+ - Updated dependencies [644ad50]
441
+ - Updated dependencies [0da7cd2]
442
+ - Updated dependencies [28a5c3e]
443
+ - Updated dependencies [4bc18e5]
444
+ - @objectstack/spec@17.3.0
445
+ - @objectstack/core@17.3.0
446
+
3
447
  ## 17.2.0
4
448
 
5
449
  ### Patch Changes
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/openapi-connector.ts","../src/openapi-provider.ts","../src/connector-openapi-plugin.ts"],"sourcesContent":["// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.\n\n/**\n * @objectstack/connector-openapi\n *\n * Generate an ObjectStack {@link Connector} from a declarative OpenAPI 3.x\n * document (ADR-0023). One operation becomes one connector action; a single\n * generic handler drives a self-contained static-auth HTTP transport (mirroring\n * `@objectstack/connector-rest`). The generated connector is an ordinary\n * `type: 'api'` connector — registered via `engine.registerConnector` with no\n * new engine surface.\n *\n * Open-source scope: static auth only (`none` / `api-key` / `basic` / `bearer`),\n * credentials supplied by the caller. Managed OAuth2, credential vaulting, and\n * per-tenant lifecycle are the enterprise tier (ADR-0015 / 0022).\n */\n\nexport {\n createOpenApiConnector,\n type OpenApiConnectorBundle,\n type OpenApiConnectorConfig,\n type OpenApiDocument,\n type OpenApiPathItem,\n type OpenApiOperation,\n type OpenApiParameter,\n type OpenApiRequestBody,\n type OpenApiResponse,\n type OpenApiSecurityScheme,\n type OperationInfo,\n type RestAuth,\n type JsonSchema,\n} from './openapi-connector.js';\nexport {\n registerOpenApiConnector,\n ConnectorOpenApiPlugin,\n type ConnectorOpenApiPluginOptions,\n type ConnectorRegistrySurface,\n} from './connector-openapi-plugin.js';\nexport {\n createOpenApiProviderFactory,\n OPENAPI_PROVIDER_KEY,\n type OpenApiProviderDeps,\n} from './openapi-provider.js';\n","// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.\n\nimport type { Connector } from '@objectstack/spec/integration';\n\n/**\n * OpenAPI connector generator — turns a declarative OpenAPI 3.x document into a\n * {@link Connector} definition + handler map (ADR-0023).\n *\n * Each OpenAPI operation maps to one connector action; a single generic handler\n * (closing over the operation's method + path template) drives one shared HTTP\n * request implementation. That transport mirrors `@objectstack/connector-rest`\n * (build URL from base+path+query, apply static auth, JSON-encode the body,\n * normalise the response to `{ status, ok, body }`) — kept inline so this package\n * stays self-contained, depending only on `@objectstack/core` + `@objectstack/spec`\n * like its sibling connectors. The output is an ordinary `type: 'api'` connector,\n * registered via `engine.registerConnector(def, handlers)` exactly like a\n * hand-written one — the registry, the `connector_action` node, the discovery\n * route, and the Studio palette never know it came from OpenAPI.\n *\n * Open-source scope: **static** auth only (`none` / `api-key` / `basic` /\n * `bearer`), with credentials supplied by the caller. Managed OAuth2, credential\n * vaulting, and per-tenant lifecycle are the enterprise tier (ADR-0015 / 0022).\n */\n\n/** Static auth understood by the generated connector (the open-source subset). */\nexport type RestAuth = Extract<Connector['authentication'], { type: 'none' | 'api-key' | 'basic' | 'bearer' }>;\n\n/** An action on a Connector definition (derived to avoid guessing export names). */\ntype ConnectorAction = NonNullable<Connector['actions']>[number];\n\n/** Handler signature accepted by the connector registry (ADR-0018 §Addendum). */\ntype ConnectorHandler = (input: Record<string, unknown>, ctx: unknown) => Promise<Record<string, unknown>>;\n\n/** A connector definition paired with its action handlers, ready for registerConnector(). */\nexport interface OpenApiConnectorBundle {\n def: Connector;\n handlers: Record<string, ConnectorHandler>;\n}\n\n/** A free-form JSON Schema fragment (matches ConnectorAction input/outputSchema). */\nexport type JsonSchema = Record<string, unknown>;\n\n/** Minimal subset of an OpenAPI 3.x document consumed by the generator.\n * The caller is responsible for loading and de-referencing ($ref) the doc. */\nexport interface OpenApiDocument {\n openapi?: string;\n info?: { title?: string; description?: string; version?: string };\n servers?: { url: string }[];\n paths?: Record<string, OpenApiPathItem>;\n components?: { securitySchemes?: Record<string, OpenApiSecurityScheme> };\n}\n\nexport interface OpenApiPathItem {\n [method: string]: OpenApiOperation | unknown;\n}\n\nexport interface OpenApiOperation {\n operationId?: string;\n summary?: string;\n description?: string;\n tags?: string[];\n parameters?: OpenApiParameter[];\n requestBody?: OpenApiRequestBody;\n responses?: Record<string, OpenApiResponse>;\n}\n\nexport interface OpenApiParameter {\n name: string;\n in: 'path' | 'query' | 'header' | 'cookie';\n required?: boolean;\n description?: string;\n schema?: JsonSchema;\n}\n\nexport interface OpenApiRequestBody {\n required?: boolean;\n description?: string;\n content?: Record<string, { schema?: JsonSchema }>;\n}\n\nexport interface OpenApiResponse {\n description?: string;\n content?: Record<string, { schema?: JsonSchema }>;\n}\n\nexport interface OpenApiSecurityScheme {\n type: 'apiKey' | 'http' | 'oauth2' | 'openIdConnect';\n name?: string;\n in?: 'header' | 'query' | 'cookie';\n scheme?: string;\n}\n\n/** Flattened view of a single operation, passed to the `include` predicate. */\nexport interface OperationInfo {\n operationId?: string;\n method: string;\n path: string;\n tags?: string[];\n summary?: string;\n description?: string;\n}\n\n/** Configuration for {@link createOpenApiConnector}. */\nexport interface OpenApiConnectorConfig {\n /** Connector machine name (snake_case). Defaults to a slug of info.title. */\n name?: string;\n /** Human-friendly label. Defaults to info.title (then name). */\n label?: string;\n /** Description. Defaults to info.description. */\n description?: string;\n /** Icon identifier for the Studio palette. Defaults to `globe`. */\n icon?: string;\n /** The parsed OpenAPI 3.x document (caller loads/derefs it). */\n document: OpenApiDocument;\n /** Override the base URL (else servers[0].url). */\n baseUrl?: string;\n /** Static auth with credentials. Defaults to `{ type: 'none' }`. */\n auth?: RestAuth;\n /** Headers merged into every request (request-level headers win). */\n defaultHeaders?: Record<string, string>;\n /** Only include operations for which this predicate returns true (allowlist). */\n include?: (op: OperationInfo) => boolean;\n /** Injected fetch implementation (defaults to global `fetch`). */\n fetchImpl?: typeof fetch;\n}\n\n/** OpenAPI HTTP method keys, in a deterministic order. */\nconst HTTP_METHODS = ['get', 'put', 'post', 'delete', 'patch', 'options', 'head', 'trace'] as const;\n\n/** Input passed to the shared request transport. */\ninterface RequestInput {\n method: string;\n path: string;\n headers?: Record<string, string>;\n query?: Record<string, string>;\n body?: unknown;\n}\n\n/**\n * Build an OpenAPI connector definition and its handler map.\n *\n * @returns the `Connector` definition (`def`) and a `handlers` record keyed by\n * action key, suitable for `engine.registerConnector(def, handlers)`.\n */\nexport function createOpenApiConnector(config: OpenApiConnectorConfig): OpenApiConnectorBundle {\n const { document, include } = config;\n const auth: RestAuth = config.auth ?? { type: 'none' };\n const doFetch = config.fetchImpl ?? fetch;\n const name = config.name ?? slug(document.info?.title ?? 'openapi_connector');\n const label = config.label ?? document.info?.title ?? titleize(name);\n const description = config.description ?? document.info?.description;\n const baseUrl = config.baseUrl ?? document.servers?.[0]?.url;\n if (!baseUrl) {\n throw new Error('createOpenApiConnector: no base URL — provide config.baseUrl or document.servers[0].url');\n }\n\n // One shared transport (mirrors connector-rest) reused by every action handler.\n async function request(input: RequestInput): Promise<Record<string, unknown>> {\n const method = input.method.toUpperCase();\n const headers: Record<string, string> = { ...config.defaultHeaders, ...input.headers };\n const query: Record<string, string> = { ...input.query };\n applyAuth(auth, headers, query);\n\n const url = buildUrl(baseUrl as string, input.path, query);\n const hasBody = input.body !== undefined && method !== 'GET' && method !== 'HEAD';\n if (hasBody && headers['Content-Type'] === undefined && headers['content-type'] === undefined) {\n headers['Content-Type'] = 'application/json';\n }\n\n const response = await doFetch(url, {\n method,\n headers,\n body: hasBody ? JSON.stringify(input.body) : undefined,\n });\n\n const contentType = response.headers.get('content-type') ?? '';\n const parsed = contentType.includes('application/json') ? await response.json() : await response.text();\n return { status: response.status, ok: response.ok, body: parsed };\n }\n\n const actions: ConnectorAction[] = [];\n const handlers: Record<string, ConnectorHandler> = {};\n const seenKeys = new Set<string>();\n\n for (const op of collectOperations(document)) {\n if (include && !include(toInfo(op))) continue;\n const key = uniqueKey(op.operationId ?? slug(`${op.method}_${op.path}`), seenKeys);\n\n actions.push({\n key,\n label: op.summary ?? titleize(key),\n description: op.description,\n inputSchema: buildInputSchema(op),\n outputSchema: buildOutputSchema(op),\n });\n\n handlers[key] = async (input: Record<string, unknown>) => {\n const req = input as { path?: unknown; query?: unknown; header?: unknown; body?: unknown };\n return request({\n method: op.method,\n path: interpolatePath(op.path, asRecord(req.path)),\n query: stringifyValues(asRecord(req.query)),\n headers: stringifyValues(asRecord(req.header)),\n body: req.body,\n });\n };\n }\n\n const def: Connector = {\n name,\n label,\n type: 'api',\n description,\n icon: config.icon ?? 'globe',\n authentication: auth,\n // Defaulted by ConnectorSchema; set explicitly so the literal satisfies\n // the (post-parse) Connector output type (mirrors connector-rest/mcp).\n status: 'active',\n enabled: true,\n connectionTimeoutMs: 30000,\n requestTimeoutMs: 30000,\n actions,\n };\n\n return { def, handlers };\n}\n\ninterface Op extends OpenApiOperation {\n method: string;\n path: string;\n}\n\n/** Flatten paths × methods into a deterministic list of operations. */\nfunction collectOperations(doc: OpenApiDocument): Op[] {\n const ops: Op[] = [];\n for (const [path, item] of Object.entries(doc.paths ?? {})) {\n if (!item || typeof item !== 'object') continue;\n const record = item as Record<string, unknown>;\n for (const method of HTTP_METHODS) {\n const operation = record[method] as OpenApiOperation | undefined;\n if (!operation || typeof operation !== 'object') continue;\n ops.push({ ...operation, method, path });\n }\n }\n return ops;\n}\n\nfunction toInfo(op: Op): OperationInfo {\n return {\n operationId: op.operationId,\n method: op.method,\n path: op.path,\n tags: op.tags,\n summary: op.summary,\n description: op.description,\n };\n}\n\n/**\n * Assemble the action inputSchema from an operation's parameters + requestBody.\n * Produces { type: 'object', properties: { path, query, header, body }, required }\n * where only non-empty sections are emitted.\n */\nfunction buildInputSchema(op: OpenApiOperation): JsonSchema | undefined {\n const sections: Record<'path' | 'query' | 'header', { props: Record<string, JsonSchema>; required: string[] }> = {\n path: { props: {}, required: [] },\n query: { props: {}, required: [] },\n header: { props: {}, required: [] },\n };\n\n for (const p of op.parameters ?? []) {\n if (!p || typeof p !== 'object' || '$ref' in p) continue;\n if (p.in !== 'path' && p.in !== 'query' && p.in !== 'header') continue;\n const sec = sections[p.in];\n sec.props[p.name] = p.schema ?? (p.description ? { type: 'string', description: p.description } : { type: 'string' });\n if (p.required) sec.required.push(p.name);\n }\n\n const properties: Record<string, JsonSchema> = {};\n const required: string[] = [];\n for (const where of ['path', 'query', 'header'] as const) {\n const sec = sections[where];\n if (Object.keys(sec.props).length === 0) continue;\n const schema: JsonSchema = { type: 'object', properties: sec.props };\n if (sec.required.length) schema.required = sec.required;\n properties[where] = schema;\n // Path params are always required when present; others only if any are.\n if (where === 'path' || sec.required.length) required.push(where);\n }\n\n const bodySchema = extractRequestBodySchema(op.requestBody);\n if (bodySchema) {\n properties.body = bodySchema;\n if (op.requestBody && !('$ref' in op.requestBody) && op.requestBody.required) required.push('body');\n }\n\n if (Object.keys(properties).length === 0) return undefined;\n const schema: JsonSchema = { type: 'object', properties };\n if (required.length) schema.required = required;\n return schema;\n}\n\n/** Pick the success response's JSON schema (200 → first 2xx → default). */\nfunction buildOutputSchema(op: OpenApiOperation): JsonSchema | undefined {\n const responses = op.responses;\n if (!responses) return undefined;\n let code: string | undefined;\n if (responses['200']) code = '200';\n else code = Object.keys(responses).find((c) => /^2\\d\\d$/.test(c));\n if (!code && responses['default']) code = 'default';\n if (!code) return undefined;\n const resp = responses[code];\n if (!resp || typeof resp !== 'object' || '$ref' in resp) return undefined;\n return pickJsonSchema(resp.content);\n}\n\n/** Extract the requestBody JSON schema (prefers application/json). */\nfunction extractRequestBodySchema(rb: OpenApiRequestBody | undefined): JsonSchema | undefined {\n if (!rb || typeof rb !== 'object' || '$ref' in rb) return undefined;\n return pickJsonSchema(rb.content);\n}\n\n/** Choose the application/json schema, falling back to the first content type. */\nfunction pickJsonSchema(content: Record<string, { schema?: JsonSchema }> | undefined): JsonSchema | undefined {\n if (!content) return undefined;\n const chosen = content['application/json'] ?? Object.values(content)[0];\n return chosen?.schema;\n}\n\n/** Build the request URL from base + path + query, encoding query params. */\nfunction buildUrl(baseUrl: string, path: string, query: Record<string, string>): string {\n const base = baseUrl.replace(/\\/+$/, '');\n const suffix = path ? (path.startsWith('/') ? path : `/${path}`) : '';\n const url = new URL(base + suffix);\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined && value !== null) url.searchParams.set(key, String(value));\n }\n return url.toString();\n}\n\n/** Apply static auth to the outgoing headers / query (mirrors connector-rest). */\nfunction applyAuth(auth: RestAuth, headers: Record<string, string>, query: Record<string, string>): void {\n switch (auth.type) {\n case 'none':\n return;\n case 'bearer':\n headers['Authorization'] = `Bearer ${auth.token}`;\n return;\n case 'basic': {\n const encoded = Buffer.from(`${auth.username}:${auth.password}`).toString('base64');\n headers['Authorization'] = `Basic ${encoded}`;\n return;\n }\n case 'api-key':\n if (auth.paramName) query[auth.paramName] = auth.key;\n else headers[auth.headerName ?? 'X-API-Key'] = auth.key;\n return;\n }\n}\n\n/** Interpolate {name} path templates with encoded values from the input. */\nfunction interpolatePath(template: string, pathParams: Record<string, unknown>): string {\n return template.replace(/\\{([^}]+)\\}/g, (_match, key: string) => {\n const value = pathParams[key];\n return value === undefined || value === null ? `{${key}}` : encodeURIComponent(String(value));\n });\n}\n\n/** Coerce a record of mixed values into string values, dropping null/undefined. */\nfunction stringifyValues(rec: Record<string, unknown>): Record<string, string> {\n const out: Record<string, string> = {};\n for (const [k, v] of Object.entries(rec)) {\n if (v === undefined || v === null) continue;\n out[k] = String(v);\n }\n return out;\n}\n\n/** Return v if it is a plain object, else an empty record. */\nfunction asRecord(v: unknown): Record<string, unknown> {\n return v && typeof v === 'object' && !Array.isArray(v) ? (v as Record<string, unknown>) : {};\n}\n\n/** Ensure a deterministically unique action key within the connector. */\nfunction uniqueKey(base: string, seen: Set<string>): string {\n let candidate = base;\n if (seen.has(candidate)) {\n let i = 2;\n while (seen.has(`${base}_${i}`)) i++;\n candidate = `${base}_${i}`;\n }\n seen.add(candidate);\n return candidate;\n}\n\n/** Slugify a string into a snake_case machine name (`/^[a-z_][a-z0-9_]*$/`). */\nfunction slug(s: string): string {\n const out = s\n .normalize('NFKD')\n .replace(/[^a-zA-Z0-9]+/g, '_')\n .replace(/^_+|_+$/g, '')\n .toLowerCase();\n if (!out) return 'connector';\n return /^[a-z_]/.test(out) ? out : `op_${out}`;\n}\n\n/** Title-case a snake_case key for a default label (`get_pets` → `Get Pets`). */\nfunction titleize(name: string): string {\n return name\n .split('_')\n .filter(Boolean)\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' ');\n}\n","// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.\n\nimport type {\n ConnectorProviderContext,\n ConnectorProviderFactory,\n ResolvedConnectorAuth,\n} from '@objectstack/spec/integration';\nimport { ConnectorUpstreamUnavailableError } from '@objectstack/spec/integration';\nimport {\n createOpenApiConnector,\n type OpenApiDocument,\n type RestAuth,\n} from './openapi-connector.js';\n\n/**\n * The provider key this package contributes (ADR-0097). A declarative\n * `connectors:` entry with `provider: 'openapi'` is materialized by this factory.\n */\nexport const OPENAPI_PROVIDER_KEY = 'openapi';\n\n/**\n * HTTP statuses treated as **transient** when fetching a remote spec at boot\n * (#3049 follow-up): a timeout / rate-limit / 5xx means the spec endpoint is\n * momentarily unhealthy, not that the connector is misconfigured — so the\n * instance degrades and retries rather than aborting boot. Mirrors the\n * connector request-retry convention (`retryableStatusCodes` default in\n * `ConnectorSchema`). Any OTHER non-2xx (400 / 401 / 403 / 404 / 410 …) means\n * the request itself is wrong — a configuration fault that stays fatal.\n */\nconst SPEC_FETCH_RETRYABLE_STATUS = new Set([408, 429, 500, 502, 503, 504]);\n\n/** Injectable dependencies for {@link createOpenApiProviderFactory} (tests). */\nexport interface OpenApiProviderDeps {\n /** Injected fetch implementation (spec fetch + request transport); defaults to global `fetch`. */\n fetchImpl?: typeof fetch;\n}\n\n/** Shape of `providerConfig` for a `provider: 'openapi'` declarative instance. */\ninterface OpenApiProviderConfig {\n /**\n * The OpenAPI 3.x document: an inline object, an http(s) URL to fetch at\n * boot, or a file path resolved relative to the declaring stack/package root\n * (`'./billing-openapi.json'`, #3016).\n *\n * A remote URL that is unreachable / transiently failing (network error,\n * 408 / 429 / 5xx) degrades the instance and retries (#3049); a wrong URL\n * (non-retryable 4xx) or an unparseable document stays a fatal config fault.\n */\n spec?: unknown;\n /** Override the base URL (else the document's `servers[0].url`). */\n baseUrl?: unknown;\n}\n\n/**\n * Resolve `providerConfig.spec` into a parsed OpenAPI document (ADR-0097;\n * union per #3016): an inline document object (the reliable, no-I/O-at-boot\n * form used by the showcase), an http(s) URL fetched at materialization, or a\n * **file path** read through the host's `ctx.loadPackageFile` — which resolves\n * it relative to the declaring stack/package root and confines the read to\n * that root (absolute / `..`-escaping paths are rejected there).\n *\n * Fault classification (#3049 seam, symmetric with connector-mcp's connect\n * path): a remote spec URL that is unreachable or transiently failing throws\n * {@link ConnectorUpstreamUnavailableError} — the materializer degrades the\n * instance and retries. Every OTHER failure (missing spec, a wrong URL,\n * an unparseable document, no host file access) throws a plain error, which\n * stays fatal at boot / a skipped entry on reload.\n */\nasync function loadOpenApiDocument(\n spec: unknown,\n fetchImpl: typeof fetch | undefined,\n ctx: ConnectorProviderContext,\n): Promise<OpenApiDocument> {\n const connectorName = ctx.name;\n if (spec && typeof spec === 'object' && !Array.isArray(spec)) {\n return spec as OpenApiDocument;\n }\n if (typeof spec === 'string' && spec.length > 0) {\n if (/^https?:\\/\\//i.test(spec)) {\n const doFetch = fetchImpl ?? fetch;\n let res: Response;\n try {\n res = await doFetch(spec);\n } catch (err) {\n // The spec endpoint is unreachable — DNS / connection refused /\n // timeout / network error. Operational, not a config mistake: degrade\n // + retry rather than fail boot.\n throw new ConnectorUpstreamUnavailableError(\n `connector-openapi provider: connector '${connectorName}' could not reach spec URL '${spec}': ${(err as Error).message}`,\n { cause: err },\n );\n }\n if (!res.ok) {\n if (SPEC_FETCH_RETRYABLE_STATUS.has(res.status)) {\n // A transient server-side status (timeout / rate-limit / 5xx) — the\n // endpoint is momentarily unhealthy, so treat it as upstream-unavailable.\n throw new ConnectorUpstreamUnavailableError(\n `connector-openapi provider: connector '${connectorName}' got a transient HTTP ${res.status} fetching spec '${spec}'.`,\n );\n }\n // A non-retryable status (400 / 401 / 403 / 404 / 410 …) — the request\n // is wrong (bad URL, missing/insufficient auth for the spec endpoint):\n // a configuration fault that stays fatal.\n throw new Error(\n `connector-openapi provider: connector '${connectorName}' failed to fetch spec '${spec}' (HTTP ${res.status}).`,\n );\n }\n // A 2xx with an unparseable / non-object body is a content fault (the\n // endpoint served the wrong thing) — fatal, symmetric with the file-path\n // parse below.\n try {\n const parsed: unknown = await res.json();\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new Error('not a JSON object');\n }\n return parsed as OpenApiDocument;\n } catch (err) {\n throw new Error(\n `connector-openapi provider: connector '${connectorName}' fetched spec '${spec}' but it is not a parseable ` +\n `OpenAPI JSON document: ${(err as Error).message}`,\n );\n }\n }\n // File path — dereferenced through the host capability so resolution stays\n // anchored to (and confined within) the declaring stack/package root.\n if (!ctx.loadPackageFile) {\n throw new Error(\n `connector-openapi provider: connector '${connectorName}' providerConfig.spec '${spec}' is a file path, ` +\n `but this host provides no package file access — inline the OpenAPI document or use an http(s) URL.`,\n );\n }\n let text: string;\n try {\n text = await ctx.loadPackageFile(spec);\n } catch (err) {\n throw new Error(\n `connector-openapi provider: connector '${connectorName}' failed to read providerConfig.spec '${spec}': ` +\n `${(err as Error).message}`,\n );\n }\n try {\n const parsed: unknown = JSON.parse(text);\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new Error('not a JSON object');\n }\n return parsed as OpenApiDocument;\n } catch (err) {\n throw new Error(\n `connector-openapi provider: connector '${connectorName}' providerConfig.spec '${spec}' is not a parseable ` +\n `OpenAPI JSON document: ${(err as Error).message}`,\n );\n }\n }\n throw new Error(\n `connector-openapi provider: connector '${connectorName}' requires providerConfig.spec — an inline OpenAPI 3.x ` +\n `document object, an http(s) URL, or a package-relative file path.`,\n );\n}\n\n/**\n * Build the `openapi` {@link ConnectorProviderFactory} (ADR-0097 / ADR-0023). At\n * boot the automation service invokes it for each `provider: 'openapi'`\n * declarative instance: it loads the OpenAPI document from `providerConfig.spec`,\n * then produces the same `{ def, handlers }` bundle {@link createOpenApiConnector}\n * generates for a hand-wired OpenAPI connector — one action per operation over a\n * static-auth HTTP transport, with the resolved `auth` applied.\n *\n * Hard-fails on invalid config (missing spec, a wrong spec URL, an unparseable\n * document, a bad base URL), so a misconfigured instance fails boot loudly. A\n * remote spec URL that is merely unreachable / transiently failing instead\n * degrades the instance and retries (#3049) — see {@link loadOpenApiDocument}.\n */\nexport function createOpenApiProviderFactory(deps: OpenApiProviderDeps = {}): ConnectorProviderFactory {\n return async (ctx) => {\n const cfg = (ctx.providerConfig ?? {}) as OpenApiProviderConfig;\n if (cfg.baseUrl !== undefined && typeof cfg.baseUrl !== 'string') {\n throw new Error(\n `connector-openapi provider: connector '${ctx.name}' providerConfig.baseUrl must be a string when set.`,\n );\n }\n const document = await loadOpenApiDocument(cfg.spec, deps.fetchImpl, ctx);\n const auth = ctx.auth as ResolvedConnectorAuth | undefined as RestAuth | undefined;\n return createOpenApiConnector({\n name: ctx.name,\n label: ctx.label,\n description: ctx.description,\n document,\n baseUrl: typeof cfg.baseUrl === 'string' ? cfg.baseUrl : undefined,\n auth,\n fetchImpl: deps.fetchImpl,\n });\n };\n}\n","// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.\n\nimport type { Plugin, PluginContext } from '@objectstack/core';\nimport type { Connector, ConnectorProviderFactory } from '@objectstack/spec/integration';\nimport { createOpenApiConnector, type OpenApiConnectorConfig } from './openapi-connector.js';\nimport { createOpenApiProviderFactory, OPENAPI_PROVIDER_KEY } from './openapi-provider.js';\n\n/**\n * Minimal surface of the automation engine this package depends on — the\n * connector registry (ADR-0018 §Addendum) plus the provider registry (ADR-0097).\n * Kept structural so callers need no runtime dependency on\n * `@objectstack/service-automation` (mirrors connector-rest / connector-mcp).\n */\nexport interface ConnectorRegistrySurface {\n registerConnector(\n def: Connector,\n handlers: Record<\n string,\n (input: Record<string, unknown>, ctx: unknown) => Promise<Record<string, unknown>>\n >,\n ): void;\n unregisterConnector(name: string): void;\n registerConnectorProvider(providerKey: string, factory: ConnectorProviderFactory): void;\n}\n\n/**\n * Generate an OpenAPI-backed connector and register it on the engine's connector\n * registry so the baseline `connector_action` node can dispatch to the generated\n * actions (ADR-0023). Returns the registered connector name.\n */\nexport function registerOpenApiConnector(registry: ConnectorRegistrySurface, config: OpenApiConnectorConfig): string {\n const { def, handlers } = createOpenApiConnector(config);\n registry.registerConnector(def, handlers);\n return def.name;\n}\n\n/**\n * Options for {@link ConnectorOpenApiPlugin}. All optional (ADR-0097): with no\n * `document` the plugin contributes only the `openapi` provider factory — so a\n * stack can declare `provider: 'openapi'` instances as pure metadata. Supply a\n * `document` (+ config) to ALSO register one hand-wired OpenAPI connector.\n */\nexport interface ConnectorOpenApiPluginOptions extends Partial<OpenApiConnectorConfig> {\n /** Injected fetch implementation forwarded to the `openapi` provider factory (tests). */\n fetchImpl?: typeof fetch;\n}\n\n/**\n * ConnectorOpenApiPlugin — contributes the OpenAPI generic executor (ADR-0023) in\n * two forms:\n *\n * 1. **Provider factory** (`openapi`, ADR-0097): registered at `init()` so the\n * automation service can materialize declarative `provider: 'openapi'`\n * `connectors:` entries — loading the OpenAPI document and mapping each\n * operation to a connector action — at boot.\n * 2. **Hand-wired instance** (optional, back-compat): when constructed with a\n * `document`, it also registers one concrete OpenAPI connector at `start()`.\n *\n * If no automation engine is present the plugin logs and skips.\n */\nexport class ConnectorOpenApiPlugin implements Plugin {\n name = 'com.objectstack.connector.openapi';\n version = '1.0.0';\n type = 'standard' as const;\n // Ensure the automation engine (and its connector/provider registries) exist first.\n dependencies = ['com.objectstack.service-automation'];\n\n private readonly options: ConnectorOpenApiPluginOptions;\n private connectorName?: string;\n private automation?: ConnectorRegistrySurface;\n\n constructor(options: ConnectorOpenApiPluginOptions = {}) {\n this.options = options;\n }\n\n async init(ctx: PluginContext): Promise<void> {\n // Contribute the `openapi` provider factory (ADR-0097) before the\n // automation service materializes declarative instances during its start().\n const automation = this.tryGetAutomation(ctx);\n if (automation && typeof automation.registerConnectorProvider === 'function') {\n automation.registerConnectorProvider(\n OPENAPI_PROVIDER_KEY,\n createOpenApiProviderFactory({ fetchImpl: this.options.fetchImpl }),\n );\n ctx.logger.info(\"ConnectorOpenApiPlugin: registered 'openapi' connector provider\");\n }\n }\n\n async start(ctx: PluginContext): Promise<void> {\n // Provider-only usage (no document) contributes just the factory in init().\n if (!this.options.document) return;\n\n const automation = this.tryGetAutomation(ctx);\n if (!automation || typeof automation.registerConnector !== 'function') {\n ctx.logger.info('ConnectorOpenApiPlugin: no automation engine — OpenAPI connector not registered');\n return;\n }\n\n this.connectorName = registerOpenApiConnector(automation, this.options as OpenApiConnectorConfig);\n this.automation = automation;\n ctx.logger.info(`ConnectorOpenApiPlugin: OpenAPI connector '${this.connectorName}' registered`);\n }\n\n /**\n * The kernel's teardown hook (`Plugin.destroy?()`, core `types.ts`) — the\n * ONLY teardown entry point `ObjectKernel.performShutdown()` and\n * `LiteKernel.destroy()` invoke.\n *\n * [#10371] IT USED TO BE `stop()`, WHICH NOTHING CALLED. `Plugin` declares\n * `init()`, `start?()` and `destroy?()` and no `stop()`, so the kernel\n * walked past this plugin at shutdown and the OpenAPI connector stayed registered in the automation\n * engine for the lifetime of the process. `start()` IS on the\n * interface, so the pair read as symmetric in review — that asymmetry is\n * what let the same shape survive in six packages at once.\n *\n * No timers here, so this instance never cost a merge-queue eviction the\n * way the `plugin-reports` / `service-messaging` members did (#9371). The\n * class is the same one either way: a teardown the kernel does not reach.\n */\n async destroy(): Promise<void> {\n if (this.automation && this.connectorName) {\n try { this.automation.unregisterConnector(this.connectorName); } catch { /* ignore */ }\n }\n this.automation = undefined;\n this.connectorName = undefined;\n }\n\n /**\n * Retained alias for {@link destroy}. Kept because it is public API of an\n * exported class, and removing it would break an embedder who learned to\n * call it directly precisely BECAUSE the kernel never did. Prefer kernel\n * shutdown; direct callers keep working unchanged.\n */\n async stop(_ctx?: PluginContext): Promise<void> {\n await this.destroy();\n }\n\n private tryGetAutomation(ctx: PluginContext): ConnectorRegistrySurface | undefined {\n try {\n return ctx.getService<ConnectorRegistrySurface>('automation');\n } catch {\n return undefined;\n }\n }\n}\n"],"mappings":"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","names":["schema"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/openapi-connector.ts","../src/openapi-provider.ts","../src/connector-openapi-plugin.ts"],"mappings":"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","names":["schema"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/openapi-connector.ts","../src/openapi-provider.ts","../src/connector-openapi-plugin.ts"],"sourcesContent":["// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.\n\nimport type { Connector } from '@objectstack/spec/integration';\n\n/**\n * OpenAPI connector generator — turns a declarative OpenAPI 3.x document into a\n * {@link Connector} definition + handler map (ADR-0023).\n *\n * Each OpenAPI operation maps to one connector action; a single generic handler\n * (closing over the operation's method + path template) drives one shared HTTP\n * request implementation. That transport mirrors `@objectstack/connector-rest`\n * (build URL from base+path+query, apply static auth, JSON-encode the body,\n * normalise the response to `{ status, ok, body }`) — kept inline so this package\n * stays self-contained, depending only on `@objectstack/core` + `@objectstack/spec`\n * like its sibling connectors. The output is an ordinary `type: 'api'` connector,\n * registered via `engine.registerConnector(def, handlers)` exactly like a\n * hand-written one — the registry, the `connector_action` node, the discovery\n * route, and the Studio palette never know it came from OpenAPI.\n *\n * Open-source scope: **static** auth only (`none` / `api-key` / `basic` /\n * `bearer`), with credentials supplied by the caller. Managed OAuth2, credential\n * vaulting, and per-tenant lifecycle are the enterprise tier (ADR-0015 / 0022).\n */\n\n/** Static auth understood by the generated connector (the open-source subset). */\nexport type RestAuth = Extract<Connector['authentication'], { type: 'none' | 'api-key' | 'basic' | 'bearer' }>;\n\n/** An action on a Connector definition (derived to avoid guessing export names). */\ntype ConnectorAction = NonNullable<Connector['actions']>[number];\n\n/** Handler signature accepted by the connector registry (ADR-0018 §Addendum). */\ntype ConnectorHandler = (input: Record<string, unknown>, ctx: unknown) => Promise<Record<string, unknown>>;\n\n/** A connector definition paired with its action handlers, ready for registerConnector(). */\nexport interface OpenApiConnectorBundle {\n def: Connector;\n handlers: Record<string, ConnectorHandler>;\n}\n\n/** A free-form JSON Schema fragment (matches ConnectorAction input/outputSchema). */\nexport type JsonSchema = Record<string, unknown>;\n\n/** Minimal subset of an OpenAPI 3.x document consumed by the generator.\n * The caller is responsible for loading and de-referencing ($ref) the doc. */\nexport interface OpenApiDocument {\n openapi?: string;\n info?: { title?: string; description?: string; version?: string };\n servers?: { url: string }[];\n paths?: Record<string, OpenApiPathItem>;\n components?: { securitySchemes?: Record<string, OpenApiSecurityScheme> };\n}\n\nexport interface OpenApiPathItem {\n [method: string]: OpenApiOperation | unknown;\n}\n\nexport interface OpenApiOperation {\n operationId?: string;\n summary?: string;\n description?: string;\n tags?: string[];\n parameters?: OpenApiParameter[];\n requestBody?: OpenApiRequestBody;\n responses?: Record<string, OpenApiResponse>;\n}\n\nexport interface OpenApiParameter {\n name: string;\n in: 'path' | 'query' | 'header' | 'cookie';\n required?: boolean;\n description?: string;\n schema?: JsonSchema;\n}\n\nexport interface OpenApiRequestBody {\n required?: boolean;\n description?: string;\n content?: Record<string, { schema?: JsonSchema }>;\n}\n\nexport interface OpenApiResponse {\n description?: string;\n content?: Record<string, { schema?: JsonSchema }>;\n}\n\nexport interface OpenApiSecurityScheme {\n type: 'apiKey' | 'http' | 'oauth2' | 'openIdConnect';\n name?: string;\n in?: 'header' | 'query' | 'cookie';\n scheme?: string;\n}\n\n/** Flattened view of a single operation, passed to the `include` predicate. */\nexport interface OperationInfo {\n operationId?: string;\n method: string;\n path: string;\n tags?: string[];\n summary?: string;\n description?: string;\n}\n\n/** Configuration for {@link createOpenApiConnector}. */\nexport interface OpenApiConnectorConfig {\n /** Connector machine name (snake_case). Defaults to a slug of info.title. */\n name?: string;\n /** Human-friendly label. Defaults to info.title (then name). */\n label?: string;\n /** Description. Defaults to info.description. */\n description?: string;\n /** Icon identifier for the Studio palette. Defaults to `globe`. */\n icon?: string;\n /** The parsed OpenAPI 3.x document (caller loads/derefs it). */\n document: OpenApiDocument;\n /** Override the base URL (else servers[0].url). */\n baseUrl?: string;\n /** Static auth with credentials. Defaults to `{ type: 'none' }`. */\n auth?: RestAuth;\n /** Headers merged into every request (request-level headers win). */\n defaultHeaders?: Record<string, string>;\n /** Only include operations for which this predicate returns true (allowlist). */\n include?: (op: OperationInfo) => boolean;\n /** Injected fetch implementation (defaults to global `fetch`). */\n fetchImpl?: typeof fetch;\n}\n\n/** OpenAPI HTTP method keys, in a deterministic order. */\nconst HTTP_METHODS = ['get', 'put', 'post', 'delete', 'patch', 'options', 'head', 'trace'] as const;\n\n/** Input passed to the shared request transport. */\ninterface RequestInput {\n method: string;\n path: string;\n headers?: Record<string, string>;\n query?: Record<string, string>;\n body?: unknown;\n}\n\n/**\n * Build an OpenAPI connector definition and its handler map.\n *\n * @returns the `Connector` definition (`def`) and a `handlers` record keyed by\n * action key, suitable for `engine.registerConnector(def, handlers)`.\n */\nexport function createOpenApiConnector(config: OpenApiConnectorConfig): OpenApiConnectorBundle {\n const { document, include } = config;\n const auth: RestAuth = config.auth ?? { type: 'none' };\n const doFetch = config.fetchImpl ?? fetch;\n const name = config.name ?? slug(document.info?.title ?? 'openapi_connector');\n const label = config.label ?? document.info?.title ?? titleize(name);\n const description = config.description ?? document.info?.description;\n const baseUrl = config.baseUrl ?? document.servers?.[0]?.url;\n if (!baseUrl) {\n throw new Error('createOpenApiConnector: no base URL — provide config.baseUrl or document.servers[0].url');\n }\n\n // One shared transport (mirrors connector-rest) reused by every action handler.\n async function request(input: RequestInput): Promise<Record<string, unknown>> {\n const method = input.method.toUpperCase();\n const headers: Record<string, string> = { ...config.defaultHeaders, ...input.headers };\n const query: Record<string, string> = { ...input.query };\n applyAuth(auth, headers, query);\n\n const url = buildUrl(baseUrl as string, input.path, query);\n const hasBody = input.body !== undefined && method !== 'GET' && method !== 'HEAD';\n if (hasBody && headers['Content-Type'] === undefined && headers['content-type'] === undefined) {\n headers['Content-Type'] = 'application/json';\n }\n\n const response = await doFetch(url, {\n method,\n headers,\n body: hasBody ? JSON.stringify(input.body) : undefined,\n });\n\n const contentType = response.headers.get('content-type') ?? '';\n const parsed = contentType.includes('application/json') ? await response.json() : await response.text();\n return { status: response.status, ok: response.ok, body: parsed };\n }\n\n const actions: ConnectorAction[] = [];\n const handlers: Record<string, ConnectorHandler> = {};\n const seenKeys = new Set<string>();\n\n for (const op of collectOperations(document)) {\n if (include && !include(toInfo(op))) continue;\n const key = uniqueKey(op.operationId ?? slug(`${op.method}_${op.path}`), seenKeys);\n\n actions.push({\n key,\n label: op.summary ?? titleize(key),\n description: op.description,\n inputSchema: buildInputSchema(op),\n outputSchema: buildOutputSchema(op),\n });\n\n handlers[key] = async (input: Record<string, unknown>) => {\n const req = input as { path?: unknown; query?: unknown; header?: unknown; body?: unknown };\n return request({\n method: op.method,\n path: interpolatePath(op.path, asRecord(req.path)),\n query: stringifyValues(asRecord(req.query)),\n headers: stringifyValues(asRecord(req.header)),\n body: req.body,\n });\n };\n }\n\n const def: Connector = {\n name,\n label,\n type: 'api',\n description,\n icon: config.icon ?? 'globe',\n authentication: auth,\n // Defaulted by ConnectorSchema; set explicitly so the literal satisfies\n // the (post-parse) Connector output type (mirrors connector-rest/mcp).\n status: 'active',\n enabled: true,\n connectionTimeoutMs: 30000,\n requestTimeoutMs: 30000,\n actions,\n };\n\n return { def, handlers };\n}\n\ninterface Op extends OpenApiOperation {\n method: string;\n path: string;\n}\n\n/** Flatten paths × methods into a deterministic list of operations. */\nfunction collectOperations(doc: OpenApiDocument): Op[] {\n const ops: Op[] = [];\n for (const [path, item] of Object.entries(doc.paths ?? {})) {\n if (!item || typeof item !== 'object') continue;\n const record = item as Record<string, unknown>;\n for (const method of HTTP_METHODS) {\n const operation = record[method] as OpenApiOperation | undefined;\n if (!operation || typeof operation !== 'object') continue;\n ops.push({ ...operation, method, path });\n }\n }\n return ops;\n}\n\nfunction toInfo(op: Op): OperationInfo {\n return {\n operationId: op.operationId,\n method: op.method,\n path: op.path,\n tags: op.tags,\n summary: op.summary,\n description: op.description,\n };\n}\n\n/**\n * Assemble the action inputSchema from an operation's parameters + requestBody.\n * Produces { type: 'object', properties: { path, query, header, body }, required }\n * where only non-empty sections are emitted.\n */\nfunction buildInputSchema(op: OpenApiOperation): JsonSchema | undefined {\n const sections: Record<'path' | 'query' | 'header', { props: Record<string, JsonSchema>; required: string[] }> = {\n path: { props: {}, required: [] },\n query: { props: {}, required: [] },\n header: { props: {}, required: [] },\n };\n\n for (const p of op.parameters ?? []) {\n if (!p || typeof p !== 'object' || '$ref' in p) continue;\n if (p.in !== 'path' && p.in !== 'query' && p.in !== 'header') continue;\n const sec = sections[p.in];\n sec.props[p.name] = p.schema ?? (p.description ? { type: 'string', description: p.description } : { type: 'string' });\n if (p.required) sec.required.push(p.name);\n }\n\n const properties: Record<string, JsonSchema> = {};\n const required: string[] = [];\n for (const where of ['path', 'query', 'header'] as const) {\n const sec = sections[where];\n if (Object.keys(sec.props).length === 0) continue;\n const schema: JsonSchema = { type: 'object', properties: sec.props };\n if (sec.required.length) schema.required = sec.required;\n properties[where] = schema;\n // Path params are always required when present; others only if any are.\n if (where === 'path' || sec.required.length) required.push(where);\n }\n\n const bodySchema = extractRequestBodySchema(op.requestBody);\n if (bodySchema) {\n properties.body = bodySchema;\n if (op.requestBody && !('$ref' in op.requestBody) && op.requestBody.required) required.push('body');\n }\n\n if (Object.keys(properties).length === 0) return undefined;\n const schema: JsonSchema = { type: 'object', properties };\n if (required.length) schema.required = required;\n return schema;\n}\n\n/** Pick the success response's JSON schema (200 → first 2xx → default). */\nfunction buildOutputSchema(op: OpenApiOperation): JsonSchema | undefined {\n const responses = op.responses;\n if (!responses) return undefined;\n let code: string | undefined;\n if (responses['200']) code = '200';\n else code = Object.keys(responses).find((c) => /^2\\d\\d$/.test(c));\n if (!code && responses['default']) code = 'default';\n if (!code) return undefined;\n const resp = responses[code];\n if (!resp || typeof resp !== 'object' || '$ref' in resp) return undefined;\n return pickJsonSchema(resp.content);\n}\n\n/** Extract the requestBody JSON schema (prefers application/json). */\nfunction extractRequestBodySchema(rb: OpenApiRequestBody | undefined): JsonSchema | undefined {\n if (!rb || typeof rb !== 'object' || '$ref' in rb) return undefined;\n return pickJsonSchema(rb.content);\n}\n\n/** Choose the application/json schema, falling back to the first content type. */\nfunction pickJsonSchema(content: Record<string, { schema?: JsonSchema }> | undefined): JsonSchema | undefined {\n if (!content) return undefined;\n const chosen = content['application/json'] ?? Object.values(content)[0];\n return chosen?.schema;\n}\n\n/** Build the request URL from base + path + query, encoding query params. */\nfunction buildUrl(baseUrl: string, path: string, query: Record<string, string>): string {\n const base = baseUrl.replace(/\\/+$/, '');\n const suffix = path ? (path.startsWith('/') ? path : `/${path}`) : '';\n const url = new URL(base + suffix);\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined && value !== null) url.searchParams.set(key, String(value));\n }\n return url.toString();\n}\n\n/** Apply static auth to the outgoing headers / query (mirrors connector-rest). */\nfunction applyAuth(auth: RestAuth, headers: Record<string, string>, query: Record<string, string>): void {\n switch (auth.type) {\n case 'none':\n return;\n case 'bearer':\n headers['Authorization'] = `Bearer ${auth.token}`;\n return;\n case 'basic': {\n const encoded = Buffer.from(`${auth.username}:${auth.password}`).toString('base64');\n headers['Authorization'] = `Basic ${encoded}`;\n return;\n }\n case 'api-key':\n if (auth.paramName) query[auth.paramName] = auth.key;\n else headers[auth.headerName ?? 'X-API-Key'] = auth.key;\n return;\n }\n}\n\n/** Interpolate {name} path templates with encoded values from the input. */\nfunction interpolatePath(template: string, pathParams: Record<string, unknown>): string {\n return template.replace(/\\{([^}]+)\\}/g, (_match, key: string) => {\n const value = pathParams[key];\n return value === undefined || value === null ? `{${key}}` : encodeURIComponent(String(value));\n });\n}\n\n/** Coerce a record of mixed values into string values, dropping null/undefined. */\nfunction stringifyValues(rec: Record<string, unknown>): Record<string, string> {\n const out: Record<string, string> = {};\n for (const [k, v] of Object.entries(rec)) {\n if (v === undefined || v === null) continue;\n out[k] = String(v);\n }\n return out;\n}\n\n/** Return v if it is a plain object, else an empty record. */\nfunction asRecord(v: unknown): Record<string, unknown> {\n return v && typeof v === 'object' && !Array.isArray(v) ? (v as Record<string, unknown>) : {};\n}\n\n/** Ensure a deterministically unique action key within the connector. */\nfunction uniqueKey(base: string, seen: Set<string>): string {\n let candidate = base;\n if (seen.has(candidate)) {\n let i = 2;\n while (seen.has(`${base}_${i}`)) i++;\n candidate = `${base}_${i}`;\n }\n seen.add(candidate);\n return candidate;\n}\n\n/** Slugify a string into a snake_case machine name (`/^[a-z_][a-z0-9_]*$/`). */\nfunction slug(s: string): string {\n const out = s\n .normalize('NFKD')\n .replace(/[^a-zA-Z0-9]+/g, '_')\n .replace(/^_+|_+$/g, '')\n .toLowerCase();\n if (!out) return 'connector';\n return /^[a-z_]/.test(out) ? out : `op_${out}`;\n}\n\n/** Title-case a snake_case key for a default label (`get_pets` → `Get Pets`). */\nfunction titleize(name: string): string {\n return name\n .split('_')\n .filter(Boolean)\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' ');\n}\n","// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.\n\nimport type {\n ConnectorProviderContext,\n ConnectorProviderFactory,\n ResolvedConnectorAuth,\n} from '@objectstack/spec/integration';\nimport { ConnectorUpstreamUnavailableError } from '@objectstack/spec/integration';\nimport {\n createOpenApiConnector,\n type OpenApiDocument,\n type RestAuth,\n} from './openapi-connector.js';\n\n/**\n * The provider key this package contributes (ADR-0097). A declarative\n * `connectors:` entry with `provider: 'openapi'` is materialized by this factory.\n */\nexport const OPENAPI_PROVIDER_KEY = 'openapi';\n\n/**\n * HTTP statuses treated as **transient** when fetching a remote spec at boot\n * (#3049 follow-up): a timeout / rate-limit / 5xx means the spec endpoint is\n * momentarily unhealthy, not that the connector is misconfigured — so the\n * instance degrades and retries rather than aborting boot. Mirrors the\n * connector request-retry convention (`retryableStatusCodes` default in\n * `ConnectorSchema`). Any OTHER non-2xx (400 / 401 / 403 / 404 / 410 …) means\n * the request itself is wrong — a configuration fault that stays fatal.\n */\nconst SPEC_FETCH_RETRYABLE_STATUS = new Set([408, 429, 500, 502, 503, 504]);\n\n/** Injectable dependencies for {@link createOpenApiProviderFactory} (tests). */\nexport interface OpenApiProviderDeps {\n /** Injected fetch implementation (spec fetch + request transport); defaults to global `fetch`. */\n fetchImpl?: typeof fetch;\n}\n\n/** Shape of `providerConfig` for a `provider: 'openapi'` declarative instance. */\ninterface OpenApiProviderConfig {\n /**\n * The OpenAPI 3.x document: an inline object, an http(s) URL to fetch at\n * boot, or a file path resolved relative to the declaring stack/package root\n * (`'./billing-openapi.json'`, #3016).\n *\n * A remote URL that is unreachable / transiently failing (network error,\n * 408 / 429 / 5xx) degrades the instance and retries (#3049); a wrong URL\n * (non-retryable 4xx) or an unparseable document stays a fatal config fault.\n */\n spec?: unknown;\n /** Override the base URL (else the document's `servers[0].url`). */\n baseUrl?: unknown;\n}\n\n/**\n * Resolve `providerConfig.spec` into a parsed OpenAPI document (ADR-0097;\n * union per #3016): an inline document object (the reliable, no-I/O-at-boot\n * form used by the showcase), an http(s) URL fetched at materialization, or a\n * **file path** read through the host's `ctx.loadPackageFile` — which resolves\n * it relative to the declaring stack/package root and confines the read to\n * that root (absolute / `..`-escaping paths are rejected there).\n *\n * Fault classification (#3049 seam, symmetric with connector-mcp's connect\n * path): a remote spec URL that is unreachable or transiently failing throws\n * {@link ConnectorUpstreamUnavailableError} — the materializer degrades the\n * instance and retries. Every OTHER failure (missing spec, a wrong URL,\n * an unparseable document, no host file access) throws a plain error, which\n * stays fatal at boot / a skipped entry on reload.\n */\nasync function loadOpenApiDocument(\n spec: unknown,\n fetchImpl: typeof fetch | undefined,\n ctx: ConnectorProviderContext,\n): Promise<OpenApiDocument> {\n const connectorName = ctx.name;\n if (spec && typeof spec === 'object' && !Array.isArray(spec)) {\n return spec as OpenApiDocument;\n }\n if (typeof spec === 'string' && spec.length > 0) {\n if (/^https?:\\/\\//i.test(spec)) {\n const doFetch = fetchImpl ?? fetch;\n let res: Response;\n try {\n res = await doFetch(spec);\n } catch (err) {\n // The spec endpoint is unreachable — DNS / connection refused /\n // timeout / network error. Operational, not a config mistake: degrade\n // + retry rather than fail boot.\n throw new ConnectorUpstreamUnavailableError(\n `connector-openapi provider: connector '${connectorName}' could not reach spec URL '${spec}': ${(err as Error).message}`,\n { cause: err },\n );\n }\n if (!res.ok) {\n if (SPEC_FETCH_RETRYABLE_STATUS.has(res.status)) {\n // A transient server-side status (timeout / rate-limit / 5xx) — the\n // endpoint is momentarily unhealthy, so treat it as upstream-unavailable.\n throw new ConnectorUpstreamUnavailableError(\n `connector-openapi provider: connector '${connectorName}' got a transient HTTP ${res.status} fetching spec '${spec}'.`,\n );\n }\n // A non-retryable status (400 / 401 / 403 / 404 / 410 …) — the request\n // is wrong (bad URL, missing/insufficient auth for the spec endpoint):\n // a configuration fault that stays fatal.\n throw new Error(\n `connector-openapi provider: connector '${connectorName}' failed to fetch spec '${spec}' (HTTP ${res.status}).`,\n );\n }\n // A 2xx with an unparseable / non-object body is a content fault (the\n // endpoint served the wrong thing) — fatal, symmetric with the file-path\n // parse below.\n try {\n const parsed: unknown = await res.json();\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new Error('not a JSON object');\n }\n return parsed as OpenApiDocument;\n } catch (err) {\n throw new Error(\n `connector-openapi provider: connector '${connectorName}' fetched spec '${spec}' but it is not a parseable ` +\n `OpenAPI JSON document: ${(err as Error).message}`,\n );\n }\n }\n // File path — dereferenced through the host capability so resolution stays\n // anchored to (and confined within) the declaring stack/package root.\n if (!ctx.loadPackageFile) {\n throw new Error(\n `connector-openapi provider: connector '${connectorName}' providerConfig.spec '${spec}' is a file path, ` +\n `but this host provides no package file access — inline the OpenAPI document or use an http(s) URL.`,\n );\n }\n let text: string;\n try {\n text = await ctx.loadPackageFile(spec);\n } catch (err) {\n throw new Error(\n `connector-openapi provider: connector '${connectorName}' failed to read providerConfig.spec '${spec}': ` +\n `${(err as Error).message}`,\n );\n }\n try {\n const parsed: unknown = JSON.parse(text);\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new Error('not a JSON object');\n }\n return parsed as OpenApiDocument;\n } catch (err) {\n throw new Error(\n `connector-openapi provider: connector '${connectorName}' providerConfig.spec '${spec}' is not a parseable ` +\n `OpenAPI JSON document: ${(err as Error).message}`,\n );\n }\n }\n throw new Error(\n `connector-openapi provider: connector '${connectorName}' requires providerConfig.spec — an inline OpenAPI 3.x ` +\n `document object, an http(s) URL, or a package-relative file path.`,\n );\n}\n\n/**\n * Build the `openapi` {@link ConnectorProviderFactory} (ADR-0097 / ADR-0023). At\n * boot the automation service invokes it for each `provider: 'openapi'`\n * declarative instance: it loads the OpenAPI document from `providerConfig.spec`,\n * then produces the same `{ def, handlers }` bundle {@link createOpenApiConnector}\n * generates for a hand-wired OpenAPI connector — one action per operation over a\n * static-auth HTTP transport, with the resolved `auth` applied.\n *\n * Hard-fails on invalid config (missing spec, a wrong spec URL, an unparseable\n * document, a bad base URL), so a misconfigured instance fails boot loudly. A\n * remote spec URL that is merely unreachable / transiently failing instead\n * degrades the instance and retries (#3049) — see {@link loadOpenApiDocument}.\n */\nexport function createOpenApiProviderFactory(deps: OpenApiProviderDeps = {}): ConnectorProviderFactory {\n return async (ctx) => {\n const cfg = (ctx.providerConfig ?? {}) as OpenApiProviderConfig;\n if (cfg.baseUrl !== undefined && typeof cfg.baseUrl !== 'string') {\n throw new Error(\n `connector-openapi provider: connector '${ctx.name}' providerConfig.baseUrl must be a string when set.`,\n );\n }\n const document = await loadOpenApiDocument(cfg.spec, deps.fetchImpl, ctx);\n const auth = ctx.auth as ResolvedConnectorAuth | undefined as RestAuth | undefined;\n return createOpenApiConnector({\n name: ctx.name,\n label: ctx.label,\n description: ctx.description,\n document,\n baseUrl: typeof cfg.baseUrl === 'string' ? cfg.baseUrl : undefined,\n auth,\n fetchImpl: deps.fetchImpl,\n });\n };\n}\n","// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.\n\nimport type { Plugin, PluginContext } from '@objectstack/core';\nimport type { Connector, ConnectorProviderFactory } from '@objectstack/spec/integration';\nimport { createOpenApiConnector, type OpenApiConnectorConfig } from './openapi-connector.js';\nimport { createOpenApiProviderFactory, OPENAPI_PROVIDER_KEY } from './openapi-provider.js';\n\n/**\n * Minimal surface of the automation engine this package depends on — the\n * connector registry (ADR-0018 §Addendum) plus the provider registry (ADR-0097).\n * Kept structural so callers need no runtime dependency on\n * `@objectstack/service-automation` (mirrors connector-rest / connector-mcp).\n */\nexport interface ConnectorRegistrySurface {\n registerConnector(\n def: Connector,\n handlers: Record<\n string,\n (input: Record<string, unknown>, ctx: unknown) => Promise<Record<string, unknown>>\n >,\n ): void;\n unregisterConnector(name: string): void;\n registerConnectorProvider(providerKey: string, factory: ConnectorProviderFactory): void;\n}\n\n/**\n * Generate an OpenAPI-backed connector and register it on the engine's connector\n * registry so the baseline `connector_action` node can dispatch to the generated\n * actions (ADR-0023). Returns the registered connector name.\n */\nexport function registerOpenApiConnector(registry: ConnectorRegistrySurface, config: OpenApiConnectorConfig): string {\n const { def, handlers } = createOpenApiConnector(config);\n registry.registerConnector(def, handlers);\n return def.name;\n}\n\n/**\n * Options for {@link ConnectorOpenApiPlugin}. All optional (ADR-0097): with no\n * `document` the plugin contributes only the `openapi` provider factory — so a\n * stack can declare `provider: 'openapi'` instances as pure metadata. Supply a\n * `document` (+ config) to ALSO register one hand-wired OpenAPI connector.\n */\nexport interface ConnectorOpenApiPluginOptions extends Partial<OpenApiConnectorConfig> {\n /** Injected fetch implementation forwarded to the `openapi` provider factory (tests). */\n fetchImpl?: typeof fetch;\n}\n\n/**\n * ConnectorOpenApiPlugin — contributes the OpenAPI generic executor (ADR-0023) in\n * two forms:\n *\n * 1. **Provider factory** (`openapi`, ADR-0097): registered at `init()` so the\n * automation service can materialize declarative `provider: 'openapi'`\n * `connectors:` entries — loading the OpenAPI document and mapping each\n * operation to a connector action — at boot.\n * 2. **Hand-wired instance** (optional, back-compat): when constructed with a\n * `document`, it also registers one concrete OpenAPI connector at `start()`.\n *\n * If no automation engine is present the plugin logs and skips.\n */\nexport class ConnectorOpenApiPlugin implements Plugin {\n name = 'com.objectstack.connector.openapi';\n version = '1.0.0';\n type = 'standard' as const;\n // Ensure the automation engine (and its connector/provider registries) exist first.\n dependencies = ['com.objectstack.service-automation'];\n\n private readonly options: ConnectorOpenApiPluginOptions;\n private connectorName?: string;\n private automation?: ConnectorRegistrySurface;\n\n constructor(options: ConnectorOpenApiPluginOptions = {}) {\n this.options = options;\n }\n\n async init(ctx: PluginContext): Promise<void> {\n // Contribute the `openapi` provider factory (ADR-0097) before the\n // automation service materializes declarative instances during its start().\n const automation = this.tryGetAutomation(ctx);\n if (automation && typeof automation.registerConnectorProvider === 'function') {\n automation.registerConnectorProvider(\n OPENAPI_PROVIDER_KEY,\n createOpenApiProviderFactory({ fetchImpl: this.options.fetchImpl }),\n );\n ctx.logger.info(\"ConnectorOpenApiPlugin: registered 'openapi' connector provider\");\n }\n }\n\n async start(ctx: PluginContext): Promise<void> {\n // Provider-only usage (no document) contributes just the factory in init().\n if (!this.options.document) return;\n\n const automation = this.tryGetAutomation(ctx);\n if (!automation || typeof automation.registerConnector !== 'function') {\n ctx.logger.info('ConnectorOpenApiPlugin: no automation engine — OpenAPI connector not registered');\n return;\n }\n\n this.connectorName = registerOpenApiConnector(automation, this.options as OpenApiConnectorConfig);\n this.automation = automation;\n ctx.logger.info(`ConnectorOpenApiPlugin: OpenAPI connector '${this.connectorName}' registered`);\n }\n\n /**\n * The kernel's teardown hook (`Plugin.destroy?()`, core `types.ts`) — the\n * ONLY teardown entry point `ObjectKernel.performShutdown()` and\n * `LiteKernel.destroy()` invoke.\n *\n * [#10371] IT USED TO BE `stop()`, WHICH NOTHING CALLED. `Plugin` declares\n * `init()`, `start?()` and `destroy?()` and no `stop()`, so the kernel\n * walked past this plugin at shutdown and the OpenAPI connector stayed registered in the automation\n * engine for the lifetime of the process. `start()` IS on the\n * interface, so the pair read as symmetric in review — that asymmetry is\n * what let the same shape survive in six packages at once.\n *\n * No timers here, so this instance never cost a merge-queue eviction the\n * way the `plugin-reports` / `service-messaging` members did (#9371). The\n * class is the same one either way: a teardown the kernel does not reach.\n */\n async destroy(): Promise<void> {\n if (this.automation && this.connectorName) {\n try { this.automation.unregisterConnector(this.connectorName); } catch { /* ignore */ }\n }\n this.automation = undefined;\n this.connectorName = undefined;\n }\n\n /**\n * Retained alias for {@link destroy}. Kept because it is public API of an\n * exported class, and removing it would break an embedder who learned to\n * call it directly precisely BECAUSE the kernel never did. Prefer kernel\n * shutdown; direct callers keep working unchanged.\n */\n async stop(_ctx?: PluginContext): Promise<void> {\n await this.destroy();\n }\n\n private tryGetAutomation(ctx: PluginContext): ConnectorRegistrySurface | undefined {\n try {\n return ctx.getService<ConnectorRegistrySurface>('automation');\n } catch {\n return undefined;\n }\n }\n}\n"],"mappings":"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","names":["schema"]}
1
+ {"version":3,"sources":["../src/openapi-connector.ts","../src/openapi-provider.ts","../src/connector-openapi-plugin.ts"],"mappings":"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","names":["schema"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@objectstack/connector-openapi",
3
- "version": "17.2.0",
3
+ "version": "17.4.0",
4
4
  "license": "Apache-2.0",
5
5
  "description": "OpenAPI 3.x connector generator for ObjectStack — turns a declarative OpenAPI document into connector actions on the automation engine's registry, with a self-contained static-auth HTTP transport (ADR-0023).",
6
6
  "main": "dist/index.js",
@@ -13,14 +13,14 @@
13
13
  }
14
14
  },
15
15
  "dependencies": {
16
- "@objectstack/core": "17.2.0",
17
- "@objectstack/spec": "17.2.0"
16
+ "@objectstack/core": "17.4.0",
17
+ "@objectstack/spec": "17.4.0"
18
18
  },
19
19
  "devDependencies": {
20
20
  "@types/node": "^26.2.0",
21
21
  "typescript": "^6.0.3",
22
22
  "vitest": "^4.1.10",
23
- "@objectstack/service-automation": "17.2.0"
23
+ "@objectstack/service-automation": "17.4.0"
24
24
  },
25
25
  "keywords": [
26
26
  "objectstack",
@@ -30,14 +30,21 @@
30
30
  "integration",
31
31
  "api"
32
32
  ],
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "https://github.com/objectstack-ai/objectstack.git",
36
+ "directory": "packages/connectors/connector-openapi"
37
+ },
33
38
  "files": [
34
39
  "dist",
35
40
  "README.md",
36
41
  "CHANGELOG.md"
37
42
  ],
38
43
  "scripts": {
39
- "build": "tsup --config ../../../tsup.config.ts",
44
+ "build": "tsup --config ../../../tsup.config.ts && node ../../../scripts/check-dts-emitted.mjs",
45
+ "check:test-typecheck": "tsx ../../../scripts/check-test-typecheck.mts --self-test && tsx ../../../scripts/check-test-typecheck.mts --package packages/connectors/connector-openapi --project tsconfig.test.json",
46
+ "gen:test-typecheck-debt": "tsx ../../../scripts/check-test-typecheck.mts --update --package packages/connectors/connector-openapi --project tsconfig.test.json",
40
47
  "test": "vitest run --passWithNoTests",
41
- "typecheck": "tsc --noEmit"
48
+ "typecheck": "tsc --noEmit && pnpm check:test-typecheck"
42
49
  }
43
50
  }