@cat-factory/contracts 0.334.0 → 0.335.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 (46) hide show
  1. package/dist/binary-generators.d.ts +4 -4
  2. package/dist/cache-policy.d.ts +22 -0
  3. package/dist/cache-policy.d.ts.map +1 -0
  4. package/dist/cache-policy.js +111 -0
  5. package/dist/cache-policy.js.map +1 -0
  6. package/dist/errors.d.ts +24 -2
  7. package/dist/errors.d.ts.map +1 -1
  8. package/dist/errors.js +27 -1
  9. package/dist/errors.js.map +1 -1
  10. package/dist/foundational-services.d.ts +16 -9
  11. package/dist/foundational-services.d.ts.map +1 -1
  12. package/dist/foundational-services.js +20 -1
  13. package/dist/foundational-services.js.map +1 -1
  14. package/dist/index.d.ts +2 -0
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +2 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/observability.d.ts +57 -0
  19. package/dist/observability.d.ts.map +1 -1
  20. package/dist/observability.js +19 -0
  21. package/dist/observability.js.map +1 -1
  22. package/dist/openrouter.d.ts +111 -4
  23. package/dist/openrouter.d.ts.map +1 -1
  24. package/dist/openrouter.js +39 -1
  25. package/dist/openrouter.js.map +1 -1
  26. package/dist/reserved-env-keys.d.ts.map +1 -1
  27. package/dist/reserved-env-keys.js +6 -0
  28. package/dist/reserved-env-keys.js.map +1 -1
  29. package/dist/routes/execution.d.ts +4 -0
  30. package/dist/routes/execution.d.ts.map +1 -1
  31. package/dist/routes/foundational-services.d.ts +8 -8
  32. package/dist/routes/index.d.ts +1 -0
  33. package/dist/routes/index.d.ts.map +1 -1
  34. package/dist/routes/index.js +1 -0
  35. package/dist/routes/index.js.map +1 -1
  36. package/dist/routes/openrouter.d.ts +16 -0
  37. package/dist/routes/openrouter.d.ts.map +1 -1
  38. package/dist/routes/service-catalog.d.ts +298 -0
  39. package/dist/routes/service-catalog.d.ts.map +1 -0
  40. package/dist/routes/service-catalog.js +77 -0
  41. package/dist/routes/service-catalog.js.map +1 -0
  42. package/dist/service-catalog.d.ts +223 -0
  43. package/dist/service-catalog.d.ts.map +1 -0
  44. package/dist/service-catalog.js +234 -0
  45. package/dist/service-catalog.js.map +1 -0
  46. package/package.json +1 -1
@@ -35,7 +35,7 @@ export declare const listFoundationalServicesContract: {
35
35
  readonly capabilities: v.ArraySchema<v.StringSchema<undefined>, undefined>;
36
36
  readonly contracts: v.ArraySchema<v.ObjectSchema<{
37
37
  readonly contractId: v.StringSchema<undefined>;
38
- readonly format: v.PicklistSchema<["openapi", "toad-contract", "lokalise-api-contract"], undefined>;
38
+ readonly format: v.PicklistSchema<["openapi", "toad-contract", "lokalise-api-contract", "asyncapi", "graphql", "grpc"], undefined>;
39
39
  readonly title: v.StringSchema<undefined>;
40
40
  readonly size: v.NumberSchema<undefined>;
41
41
  readonly path: v.NullableSchema<v.StringSchema<undefined>, undefined>;
@@ -61,7 +61,7 @@ export declare const createFoundationalServiceContract: {
61
61
  readonly capabilities: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>, undefined>, undefined>;
62
62
  readonly contracts: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
63
63
  readonly contractId: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>, v.RegexAction<string, "must be a lower-kebab slug">]>;
64
- readonly format: v.PicklistSchema<["openapi", "toad-contract", "lokalise-api-contract"], undefined>;
64
+ readonly format: v.PicklistSchema<["openapi", "toad-contract", "lokalise-api-contract", "asyncapi", "graphql", "grpc"], undefined>;
65
65
  readonly title: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>;
66
66
  readonly body: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 1000000, undefined>]>;
67
67
  }, undefined>, undefined>, undefined>;
@@ -79,7 +79,7 @@ export declare const createFoundationalServiceContract: {
79
79
  capabilities?: string[] | undefined;
80
80
  contracts?: {
81
81
  contractId: string;
82
- format: "lokalise-api-contract" | "openapi" | "toad-contract";
82
+ format: "asyncapi" | "graphql" | "grpc" | "lokalise-api-contract" | "openapi" | "toad-contract";
83
83
  title: string;
84
84
  body: string;
85
85
  }[] | undefined;
@@ -122,7 +122,7 @@ export declare const createFoundationalServiceContract: {
122
122
  readonly capabilities: v.ArraySchema<v.StringSchema<undefined>, undefined>;
123
123
  readonly contracts: v.ArraySchema<v.ObjectSchema<{
124
124
  readonly contractId: v.StringSchema<undefined>;
125
- readonly format: v.PicklistSchema<["openapi", "toad-contract", "lokalise-api-contract"], undefined>;
125
+ readonly format: v.PicklistSchema<["openapi", "toad-contract", "lokalise-api-contract", "asyncapi", "graphql", "grpc"], undefined>;
126
126
  readonly title: v.StringSchema<undefined>;
127
127
  readonly size: v.NumberSchema<undefined>;
128
128
  readonly path: v.NullableSchema<v.StringSchema<undefined>, undefined>;
@@ -152,7 +152,7 @@ export declare const updateFoundationalServiceContract: {
152
152
  readonly capabilities: v.OptionalSchema<v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>, undefined>, undefined>;
153
153
  readonly contracts: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
154
154
  readonly contractId: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>, v.RegexAction<string, "must be a lower-kebab slug">]>;
155
- readonly format: v.PicklistSchema<["openapi", "toad-contract", "lokalise-api-contract"], undefined>;
155
+ readonly format: v.PicklistSchema<["openapi", "toad-contract", "lokalise-api-contract", "asyncapi", "graphql", "grpc"], undefined>;
156
156
  readonly title: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>;
157
157
  readonly body: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 1000000, undefined>]>;
158
158
  }, undefined>, undefined>, undefined>;
@@ -195,7 +195,7 @@ export declare const updateFoundationalServiceContract: {
195
195
  readonly capabilities: v.ArraySchema<v.StringSchema<undefined>, undefined>;
196
196
  readonly contracts: v.ArraySchema<v.ObjectSchema<{
197
197
  readonly contractId: v.StringSchema<undefined>;
198
- readonly format: v.PicklistSchema<["openapi", "toad-contract", "lokalise-api-contract"], undefined>;
198
+ readonly format: v.PicklistSchema<["openapi", "toad-contract", "lokalise-api-contract", "asyncapi", "graphql", "grpc"], undefined>;
199
199
  readonly title: v.StringSchema<undefined>;
200
200
  readonly size: v.NumberSchema<undefined>;
201
201
  readonly path: v.NullableSchema<v.StringSchema<undefined>, undefined>;
@@ -283,7 +283,7 @@ export declare const getFoundationalServiceContractsContract: {
283
283
  }, undefined>;
284
284
  readonly 200: v.ArraySchema<v.ObjectSchema<{
285
285
  readonly contractId: v.StringSchema<undefined>;
286
- readonly format: v.PicklistSchema<["openapi", "toad-contract", "lokalise-api-contract"], undefined>;
286
+ readonly format: v.PicklistSchema<["openapi", "toad-contract", "lokalise-api-contract", "asyncapi", "graphql", "grpc"], undefined>;
287
287
  readonly title: v.StringSchema<undefined>;
288
288
  readonly size: v.NumberSchema<undefined>;
289
289
  readonly path: v.NullableSchema<v.StringSchema<undefined>, undefined>;
@@ -332,7 +332,7 @@ export declare const resolvedFoundationalServicesContract: {
332
332
  readonly capabilities: v.ArraySchema<v.StringSchema<undefined>, undefined>;
333
333
  readonly contracts: v.ArraySchema<v.ObjectSchema<{
334
334
  readonly contractId: v.StringSchema<undefined>;
335
- readonly format: v.PicklistSchema<["openapi", "toad-contract", "lokalise-api-contract"], undefined>;
335
+ readonly format: v.PicklistSchema<["openapi", "toad-contract", "lokalise-api-contract", "asyncapi", "graphql", "grpc"], undefined>;
336
336
  readonly title: v.StringSchema<undefined>;
337
337
  readonly size: v.NumberSchema<undefined>;
338
338
  readonly path: v.NullableSchema<v.StringSchema<undefined>, undefined>;
@@ -66,6 +66,7 @@ export * from './release.js';
66
66
  export * from './requirements.js';
67
67
  export * from './runners.js';
68
68
  export * from './sandbox.js';
69
+ export * from './service-catalog.js';
69
70
  export * from './service-fragment-defaults.js';
70
71
  export * from './services.js';
71
72
  export * from './test-secrets.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAGA,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,gCAAgC,CAAA;AAC9C,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,wBAAwB,CAAA;AACtC,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA;AACtC,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,wBAAwB,CAAA;AACtC,cAAc,yBAAyB,CAAA;AACvC,cAAc,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAGA,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,sBAAsB,CAAA;AACpC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,wBAAwB,CAAA;AACtC,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA;AACtC,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,wBAAwB,CAAA;AACtC,cAAc,yBAAyB,CAAA;AACvC,cAAc,iBAAiB,CAAA"}
@@ -69,6 +69,7 @@ export * from './release.js';
69
69
  export * from './requirements.js';
70
70
  export * from './runners.js';
71
71
  export * from './sandbox.js';
72
+ export * from './service-catalog.js';
72
73
  export * from './service-fragment-defaults.js';
73
74
  export * from './services.js';
74
75
  export * from './test-secrets.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,+EAA+E;AAC/E,oDAAoD;AACpD,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,gCAAgC,CAAA;AAC9C,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,wBAAwB,CAAA;AACtC,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA;AACtC,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,wBAAwB,CAAA;AACtC,cAAc,yBAAyB,CAAA;AACvC,cAAc,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,+EAA+E;AAC/E,oDAAoD;AACpD,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,sBAAsB,CAAA;AACpC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,wBAAwB,CAAA;AACtC,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA;AACtC,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,wBAAwB,CAAA;AACtC,cAAc,yBAAyB,CAAA;AACvC,cAAc,iBAAiB,CAAA"}
@@ -37,6 +37,10 @@ export declare const getOpenRouterCatalogContract: {
37
37
  readonly contextLength: import("valibot").OptionalSchema<import("valibot").NumberSchema<undefined>, undefined>;
38
38
  readonly inputPerMillion: import("valibot").NumberSchema<undefined>;
39
39
  readonly outputPerMillion: import("valibot").NumberSchema<undefined>;
40
+ readonly cachedInputPerMillion: import("valibot").OptionalSchema<import("valibot").NumberSchema<undefined>, undefined>;
41
+ readonly cacheWritePerMillion: import("valibot").OptionalSchema<import("valibot").NumberSchema<undefined>, undefined>;
42
+ readonly expirationDate: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MinLengthAction<string, 1, undefined>, import("valibot").MaxLengthAction<string, 40, undefined>]>, undefined>;
43
+ readonly canonicalSlug: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MinLengthAction<string, 1, undefined>, import("valibot").MaxLengthAction<string, 200, undefined>]>, undefined>;
40
44
  }, undefined>, undefined>;
41
45
  readonly createdAt: import("valibot").NumberSchema<undefined>;
42
46
  readonly updatedAt: import("valibot").NumberSchema<undefined>;
@@ -58,6 +62,10 @@ export declare const upsertOpenRouterCatalogContract: {
58
62
  readonly contextLength: import("valibot").OptionalSchema<import("valibot").NumberSchema<undefined>, undefined>;
59
63
  readonly inputPerMillion: import("valibot").NumberSchema<undefined>;
60
64
  readonly outputPerMillion: import("valibot").NumberSchema<undefined>;
65
+ readonly cachedInputPerMillion: import("valibot").OptionalSchema<import("valibot").NumberSchema<undefined>, undefined>;
66
+ readonly cacheWritePerMillion: import("valibot").OptionalSchema<import("valibot").NumberSchema<undefined>, undefined>;
67
+ readonly expirationDate: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MinLengthAction<string, 1, undefined>, import("valibot").MaxLengthAction<string, 40, undefined>]>, undefined>;
68
+ readonly canonicalSlug: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MinLengthAction<string, 1, undefined>, import("valibot").MaxLengthAction<string, 200, undefined>]>, undefined>;
61
69
  }, undefined>, undefined>;
62
70
  }, undefined>;
63
71
  readonly responsesByStatusCode: {
@@ -90,6 +98,10 @@ export declare const upsertOpenRouterCatalogContract: {
90
98
  readonly contextLength: import("valibot").OptionalSchema<import("valibot").NumberSchema<undefined>, undefined>;
91
99
  readonly inputPerMillion: import("valibot").NumberSchema<undefined>;
92
100
  readonly outputPerMillion: import("valibot").NumberSchema<undefined>;
101
+ readonly cachedInputPerMillion: import("valibot").OptionalSchema<import("valibot").NumberSchema<undefined>, undefined>;
102
+ readonly cacheWritePerMillion: import("valibot").OptionalSchema<import("valibot").NumberSchema<undefined>, undefined>;
103
+ readonly expirationDate: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MinLengthAction<string, 1, undefined>, import("valibot").MaxLengthAction<string, 40, undefined>]>, undefined>;
104
+ readonly canonicalSlug: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MinLengthAction<string, 1, undefined>, import("valibot").MaxLengthAction<string, 200, undefined>]>, undefined>;
93
105
  }, undefined>, undefined>;
94
106
  readonly createdAt: import("valibot").NumberSchema<undefined>;
95
107
  readonly updatedAt: import("valibot").NumberSchema<undefined>;
@@ -136,6 +148,10 @@ export declare const refreshOpenRouterCatalogContract: {
136
148
  readonly contextLength: import("valibot").OptionalSchema<import("valibot").NumberSchema<undefined>, undefined>;
137
149
  readonly inputPerMillion: import("valibot").NumberSchema<undefined>;
138
150
  readonly outputPerMillion: import("valibot").NumberSchema<undefined>;
151
+ readonly cachedInputPerMillion: import("valibot").OptionalSchema<import("valibot").NumberSchema<undefined>, undefined>;
152
+ readonly cacheWritePerMillion: import("valibot").OptionalSchema<import("valibot").NumberSchema<undefined>, undefined>;
153
+ readonly expirationDate: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MinLengthAction<string, 1, undefined>, import("valibot").MaxLengthAction<string, 40, undefined>]>, undefined>;
154
+ readonly canonicalSlug: import("valibot").OptionalSchema<import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MinLengthAction<string, 1, undefined>, import("valibot").MaxLengthAction<string, 200, undefined>]>, undefined>;
139
155
  }, undefined>, undefined>;
140
156
  readonly error: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
141
157
  }, undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../src/routes/openrouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAqB,MAAM,yBAAyB,CAAA;AAiB3E,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKvC,CAAA;AAEF,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAM1C,CAAA;AAEF,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAM3C,CAAA"}
1
+ {"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../src/routes/openrouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAqB,MAAM,yBAAyB,CAAA;AAiB3E,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKvC,CAAA;AAEF,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAM1C,CAAA;AAEF,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAM3C,CAAA"}
@@ -0,0 +1,298 @@
1
+ import { ContractNoBody } from '@toad-contracts/valibot';
2
+ import * as v from 'valibot';
3
+ /**
4
+ * The connection, or null when the workspace has none.
5
+ *
6
+ * Null rather than a 404, because the SPA renders the connect FORM off this read: a 404 there
7
+ * would make "not connected yet" indistinguishable from "wrong workspace id" at exactly the
8
+ * moment the panel has to decide which of the two to show.
9
+ */
10
+ export declare const getServiceCatalogContract: {
11
+ readonly method: "get";
12
+ readonly pathResolver: () => string;
13
+ readonly responsesByStatusCode: {
14
+ readonly '4xx': v.ObjectSchema<{
15
+ readonly error: v.ObjectSchema<{
16
+ readonly code: v.StringSchema<undefined>;
17
+ readonly message: v.StringSchema<undefined>;
18
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
19
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
20
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
21
+ readonly message: v.StringSchema<undefined>;
22
+ }, undefined>, undefined>, undefined>;
23
+ }, undefined>;
24
+ }, undefined>;
25
+ readonly '5xx': v.ObjectSchema<{
26
+ readonly error: v.ObjectSchema<{
27
+ readonly code: v.StringSchema<undefined>;
28
+ readonly message: v.StringSchema<undefined>;
29
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
30
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
31
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
32
+ readonly message: v.StringSchema<undefined>;
33
+ }, undefined>, undefined>, undefined>;
34
+ }, undefined>;
35
+ }, undefined>;
36
+ readonly 200: v.NullableSchema<v.ObjectSchema<{
37
+ readonly provider: v.PicklistSchema<["backstage"], undefined>;
38
+ readonly baseUrl: v.StringSchema<undefined>;
39
+ readonly authMode: v.PicklistSchema<["none", "static-token", "legacy-shared-secret", "oauth2-client-credentials", "basic", "headers"], undefined>;
40
+ readonly entityFilter: v.ArraySchema<v.StringSchema<undefined>, undefined>;
41
+ readonly includeApis: v.BooleanSchema<undefined>;
42
+ readonly maxServices: v.NumberSchema<undefined>;
43
+ readonly lastSyncedAt: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
44
+ readonly lastSyncStatus: v.NullableSchema<v.PicklistSchema<["ok", "partial", "failed"], undefined>, undefined>;
45
+ readonly lastSyncMessage: v.NullableSchema<v.StringSchema<undefined>, undefined>;
46
+ readonly connectedAt: v.NumberSchema<undefined>;
47
+ }, undefined>, undefined>;
48
+ };
49
+ };
50
+ /**
51
+ * Connect or REPLACE the workspace's catalog connection.
52
+ *
53
+ * `PUT` rather than `POST`, because a credential has no meaningful partial edit and a second
54
+ * connection has no meaning: the workspace either points at a portal or it does not. Replacing
55
+ * deliberately does NOT drop what a prior connection imported: the next import reconciles
56
+ * against it, so re-entering a rotated token costs no catalog.
57
+ */
58
+ export declare const connectServiceCatalogContract: {
59
+ readonly method: "put";
60
+ readonly pathResolver: () => string;
61
+ readonly requestBodySchema: v.ObjectSchema<{
62
+ readonly provider: v.OptionalSchema<v.PicklistSchema<["backstage"], undefined>, undefined>;
63
+ readonly baseUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
64
+ readonly auth: v.VariantSchema<"mode", [v.ObjectSchema<{
65
+ readonly mode: v.LiteralSchema<"none", undefined>;
66
+ }, undefined>, v.ObjectSchema<{
67
+ readonly mode: v.LiteralSchema<"static-token", undefined>;
68
+ readonly token: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 8000, undefined>]>;
69
+ }, undefined>, v.ObjectSchema<{
70
+ readonly mode: v.LiteralSchema<"legacy-shared-secret", undefined>;
71
+ readonly sharedSecret: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 8000, undefined>]>;
72
+ }, undefined>, v.ObjectSchema<{
73
+ readonly mode: v.LiteralSchema<"oauth2-client-credentials", undefined>;
74
+ readonly tokenUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
75
+ readonly clientId: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>;
76
+ readonly clientSecret: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 8000, undefined>]>;
77
+ readonly scope: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
78
+ readonly audience: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
79
+ }, undefined>, v.ObjectSchema<{
80
+ readonly mode: v.LiteralSchema<"basic", undefined>;
81
+ readonly username: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>;
82
+ readonly password: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 8000, undefined>]>;
83
+ }, undefined>, v.ObjectSchema<{
84
+ readonly mode: v.LiteralSchema<"headers", undefined>;
85
+ readonly headers: v.SchemaWithPipe<readonly [v.ArraySchema<v.ObjectSchema<{
86
+ readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 100, undefined>, v.RegexAction<string, "must be a valid HTTP header name">]>;
87
+ readonly value: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 8000, undefined>, v.RegexAction<string, "must not contain a line break">]>;
88
+ }, undefined>, undefined>, v.MinLengthAction<{
89
+ name: string;
90
+ value: string;
91
+ }[], 1, undefined>, v.MaxLengthAction<{
92
+ name: string;
93
+ value: string;
94
+ }[], 5, undefined>]>;
95
+ }, undefined>], undefined>;
96
+ readonly entityFilter: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 3, undefined>, v.MaxLengthAction<string, 200, undefined>, v.RegexAction<string, "must be a single `key=value` term (letters, digits and `_.-:/@`)">]>, undefined>, v.MaxLengthAction<string[], 10, undefined>]>, undefined>;
97
+ readonly includeApis: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
98
+ readonly maxServices: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 1000, undefined>]>, undefined>;
99
+ }, undefined>;
100
+ readonly responsesByStatusCode: {
101
+ readonly '4xx': v.ObjectSchema<{
102
+ readonly error: v.ObjectSchema<{
103
+ readonly code: v.StringSchema<undefined>;
104
+ readonly message: v.StringSchema<undefined>;
105
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
106
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
107
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
108
+ readonly message: v.StringSchema<undefined>;
109
+ }, undefined>, undefined>, undefined>;
110
+ }, undefined>;
111
+ }, undefined>;
112
+ readonly '5xx': v.ObjectSchema<{
113
+ readonly error: v.ObjectSchema<{
114
+ readonly code: v.StringSchema<undefined>;
115
+ readonly message: v.StringSchema<undefined>;
116
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
117
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
118
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
119
+ readonly message: v.StringSchema<undefined>;
120
+ }, undefined>, undefined>, undefined>;
121
+ }, undefined>;
122
+ }, undefined>;
123
+ readonly 200: v.ObjectSchema<{
124
+ readonly provider: v.PicklistSchema<["backstage"], undefined>;
125
+ readonly baseUrl: v.StringSchema<undefined>;
126
+ readonly authMode: v.PicklistSchema<["none", "static-token", "legacy-shared-secret", "oauth2-client-credentials", "basic", "headers"], undefined>;
127
+ readonly entityFilter: v.ArraySchema<v.StringSchema<undefined>, undefined>;
128
+ readonly includeApis: v.BooleanSchema<undefined>;
129
+ readonly maxServices: v.NumberSchema<undefined>;
130
+ readonly lastSyncedAt: v.NullableSchema<v.NumberSchema<undefined>, undefined>;
131
+ readonly lastSyncStatus: v.NullableSchema<v.PicklistSchema<["ok", "partial", "failed"], undefined>, undefined>;
132
+ readonly lastSyncMessage: v.NullableSchema<v.StringSchema<undefined>, undefined>;
133
+ readonly connectedAt: v.NumberSchema<undefined>;
134
+ }, undefined>;
135
+ };
136
+ };
137
+ /**
138
+ * Disconnect: forget the credential AND tombstone every foundational service the connection
139
+ * produced.
140
+ *
141
+ * Tombstoning is the point rather than a side effect. Leaving the imported services behind
142
+ * would keep handing agents an estate nothing refreshes and nothing can explain the provenance
143
+ * of, which is worse than an empty catalog because it still reads as current.
144
+ */
145
+ export declare const disconnectServiceCatalogContract: {
146
+ readonly method: "delete";
147
+ readonly pathResolver: () => string;
148
+ readonly responsesByStatusCode: {
149
+ readonly '4xx': v.ObjectSchema<{
150
+ readonly error: v.ObjectSchema<{
151
+ readonly code: v.StringSchema<undefined>;
152
+ readonly message: v.StringSchema<undefined>;
153
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
154
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
155
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
156
+ readonly message: v.StringSchema<undefined>;
157
+ }, undefined>, undefined>, undefined>;
158
+ }, undefined>;
159
+ }, undefined>;
160
+ readonly '5xx': v.ObjectSchema<{
161
+ readonly error: v.ObjectSchema<{
162
+ readonly code: v.StringSchema<undefined>;
163
+ readonly message: v.StringSchema<undefined>;
164
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
165
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
166
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
167
+ readonly message: v.StringSchema<undefined>;
168
+ }, undefined>, undefined>, undefined>;
169
+ }, undefined>;
170
+ }, undefined>;
171
+ readonly 204: typeof ContractNoBody;
172
+ };
173
+ };
174
+ /**
175
+ * Probe the portal with the SUBMITTED credentials, before they are stored.
176
+ *
177
+ * Takes a body rather than reading the stored row, so the operator finds out that a token is
178
+ * wrong while they still have it on screen. It answers a result rather than throwing for the
179
+ * same reason every other connection test does: a refused connection is the answer.
180
+ */
181
+ export declare const probeServiceCatalogContract: {
182
+ readonly method: "post";
183
+ readonly pathResolver: () => string;
184
+ readonly requestBodySchema: v.ObjectSchema<{
185
+ readonly provider: v.OptionalSchema<v.PicklistSchema<["backstage"], undefined>, undefined>;
186
+ readonly baseUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
187
+ readonly auth: v.VariantSchema<"mode", [v.ObjectSchema<{
188
+ readonly mode: v.LiteralSchema<"none", undefined>;
189
+ }, undefined>, v.ObjectSchema<{
190
+ readonly mode: v.LiteralSchema<"static-token", undefined>;
191
+ readonly token: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 8000, undefined>]>;
192
+ }, undefined>, v.ObjectSchema<{
193
+ readonly mode: v.LiteralSchema<"legacy-shared-secret", undefined>;
194
+ readonly sharedSecret: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 8000, undefined>]>;
195
+ }, undefined>, v.ObjectSchema<{
196
+ readonly mode: v.LiteralSchema<"oauth2-client-credentials", undefined>;
197
+ readonly tokenUrl: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
198
+ readonly clientId: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>;
199
+ readonly clientSecret: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 8000, undefined>]>;
200
+ readonly scope: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
201
+ readonly audience: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>, undefined>;
202
+ }, undefined>, v.ObjectSchema<{
203
+ readonly mode: v.LiteralSchema<"basic", undefined>;
204
+ readonly username: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 200, undefined>]>;
205
+ readonly password: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 8000, undefined>]>;
206
+ }, undefined>, v.ObjectSchema<{
207
+ readonly mode: v.LiteralSchema<"headers", undefined>;
208
+ readonly headers: v.SchemaWithPipe<readonly [v.ArraySchema<v.ObjectSchema<{
209
+ readonly name: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 100, undefined>, v.RegexAction<string, "must be a valid HTTP header name">]>;
210
+ readonly value: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 8000, undefined>, v.RegexAction<string, "must not contain a line break">]>;
211
+ }, undefined>, undefined>, v.MinLengthAction<{
212
+ name: string;
213
+ value: string;
214
+ }[], 1, undefined>, v.MaxLengthAction<{
215
+ name: string;
216
+ value: string;
217
+ }[], 5, undefined>]>;
218
+ }, undefined>], undefined>;
219
+ readonly entityFilter: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 3, undefined>, v.MaxLengthAction<string, 200, undefined>, v.RegexAction<string, "must be a single `key=value` term (letters, digits and `_.-:/@`)">]>, undefined>, v.MaxLengthAction<string[], 10, undefined>]>, undefined>;
220
+ readonly includeApis: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
221
+ readonly maxServices: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 1000, undefined>]>, undefined>;
222
+ }, undefined>;
223
+ readonly responsesByStatusCode: {
224
+ readonly '4xx': v.ObjectSchema<{
225
+ readonly error: v.ObjectSchema<{
226
+ readonly code: v.StringSchema<undefined>;
227
+ readonly message: v.StringSchema<undefined>;
228
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
229
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
230
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
231
+ readonly message: v.StringSchema<undefined>;
232
+ }, undefined>, undefined>, undefined>;
233
+ }, undefined>;
234
+ }, undefined>;
235
+ readonly '5xx': v.ObjectSchema<{
236
+ readonly error: v.ObjectSchema<{
237
+ readonly code: v.StringSchema<undefined>;
238
+ readonly message: v.StringSchema<undefined>;
239
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
240
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
241
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
242
+ readonly message: v.StringSchema<undefined>;
243
+ }, undefined>, undefined>, undefined>;
244
+ }, undefined>;
245
+ }, undefined>;
246
+ readonly 200: v.ObjectSchema<{
247
+ readonly ok: v.BooleanSchema<undefined>;
248
+ readonly message: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
249
+ readonly failureCause: v.OptionalSchema<v.PicklistSchema<["refused", "dns", "timeout", "aborted", "unreachable", "reset", "tls-untrusted", "tls-expired", "tls-hostname", "tls-protocol", "invalid-header", "unknown"], undefined>, undefined>;
250
+ readonly warnings: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
251
+ readonly code: v.PicklistSchema<["runner_manifest_no_release", "runner_manifest_no_status_path", "github_pat_classic_account_wide", "github_pat_scopes_beyond_need", "github_pat_scope_unreadable", "github_pat_no_scopes"], undefined>;
252
+ readonly message: v.StringSchema<undefined>;
253
+ }, undefined>, undefined>, undefined>;
254
+ }, undefined>;
255
+ };
256
+ };
257
+ /** Import now, rather than waiting out the autorefresh sweep's staleness window. */
258
+ export declare const syncServiceCatalogContract: {
259
+ readonly method: "post";
260
+ readonly pathResolver: () => string;
261
+ readonly requestBodySchema: typeof ContractNoBody;
262
+ readonly responsesByStatusCode: {
263
+ readonly '4xx': v.ObjectSchema<{
264
+ readonly error: v.ObjectSchema<{
265
+ readonly code: v.StringSchema<undefined>;
266
+ readonly message: v.StringSchema<undefined>;
267
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
268
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
269
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
270
+ readonly message: v.StringSchema<undefined>;
271
+ }, undefined>, undefined>, undefined>;
272
+ }, undefined>;
273
+ }, undefined>;
274
+ readonly '5xx': v.ObjectSchema<{
275
+ readonly error: v.ObjectSchema<{
276
+ readonly code: v.StringSchema<undefined>;
277
+ readonly message: v.StringSchema<undefined>;
278
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
279
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
280
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
281
+ readonly message: v.StringSchema<undefined>;
282
+ }, undefined>, undefined>, undefined>;
283
+ }, undefined>;
284
+ }, undefined>;
285
+ readonly 200: v.ObjectSchema<{
286
+ readonly upserted: v.NumberSchema<undefined>;
287
+ readonly tombstoned: v.NumberSchema<undefined>;
288
+ readonly unchanged: v.NumberSchema<undefined>;
289
+ readonly contracts: v.NumberSchema<undefined>;
290
+ readonly coverage: v.PicklistSchema<["complete", "truncated", "empty"], undefined>;
291
+ readonly skippedServices: v.NumberSchema<undefined>;
292
+ readonly skippedConflicts: v.NumberSchema<undefined>;
293
+ readonly skippedApis: v.NumberSchema<undefined>;
294
+ readonly status: v.PicklistSchema<["ok", "partial", "failed"], undefined>;
295
+ }, undefined>;
296
+ };
297
+ };
298
+ //# sourceMappingURL=service-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-catalog.d.ts","sourceRoot":"","sources":["../../src/routes/service-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAqB,MAAM,yBAAyB,CAAA;AAC3E,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAmB5B;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOpC,CAAA;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKxC,CAAA;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAI3C,CAAA;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKtC,CAAA;AAEF,oFAAoF;AACpF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKrC,CAAA"}
@@ -0,0 +1,77 @@
1
+ import { ContractNoBody, defineApiContract } from '@toad-contracts/valibot';
2
+ import * as v from 'valibot';
3
+ import { connectionTestResultSchema } from '../provider-config.js';
4
+ import { connectServiceCatalogSchema, serviceCatalogConnectionSchema, serviceCatalogSyncResultSchema, } from '../service-catalog.js';
5
+ import { errorResponses } from './_shared.js';
6
+ // ---------------------------------------------------------------------------
7
+ // Service-catalog route contracts. See ServiceCatalogController in
8
+ // @cat-factory/server. Mounted under `/workspaces/:workspaceId` only, so these literals
9
+ // are relative to that prefix and the workspace id is read by the handler.
10
+ //
11
+ // One connection per workspace, so the resource is a SINGLETON: `PUT` replaces it, `GET`
12
+ // reads it, `DELETE` disconnects. There is no id in any path, which is what keeps the
13
+ // import's provenance a fact about the workspace rather than a row a caller has to track.
14
+ // ---------------------------------------------------------------------------
15
+ /**
16
+ * The connection, or null when the workspace has none.
17
+ *
18
+ * Null rather than a 404, because the SPA renders the connect FORM off this read: a 404 there
19
+ * would make "not connected yet" indistinguishable from "wrong workspace id" at exactly the
20
+ * moment the panel has to decide which of the two to show.
21
+ */
22
+ export const getServiceCatalogContract = defineApiContract({
23
+ method: 'get',
24
+ pathResolver: () => '/service-catalog',
25
+ responsesByStatusCode: {
26
+ 200: v.nullable(serviceCatalogConnectionSchema),
27
+ ...errorResponses,
28
+ },
29
+ });
30
+ /**
31
+ * Connect or REPLACE the workspace's catalog connection.
32
+ *
33
+ * `PUT` rather than `POST`, because a credential has no meaningful partial edit and a second
34
+ * connection has no meaning: the workspace either points at a portal or it does not. Replacing
35
+ * deliberately does NOT drop what a prior connection imported: the next import reconciles
36
+ * against it, so re-entering a rotated token costs no catalog.
37
+ */
38
+ export const connectServiceCatalogContract = defineApiContract({
39
+ method: 'put',
40
+ pathResolver: () => '/service-catalog',
41
+ requestBodySchema: connectServiceCatalogSchema,
42
+ responsesByStatusCode: { 200: serviceCatalogConnectionSchema, ...errorResponses },
43
+ });
44
+ /**
45
+ * Disconnect: forget the credential AND tombstone every foundational service the connection
46
+ * produced.
47
+ *
48
+ * Tombstoning is the point rather than a side effect. Leaving the imported services behind
49
+ * would keep handing agents an estate nothing refreshes and nothing can explain the provenance
50
+ * of, which is worse than an empty catalog because it still reads as current.
51
+ */
52
+ export const disconnectServiceCatalogContract = defineApiContract({
53
+ method: 'delete',
54
+ pathResolver: () => '/service-catalog',
55
+ responsesByStatusCode: { 204: ContractNoBody, ...errorResponses },
56
+ });
57
+ /**
58
+ * Probe the portal with the SUBMITTED credentials, before they are stored.
59
+ *
60
+ * Takes a body rather than reading the stored row, so the operator finds out that a token is
61
+ * wrong while they still have it on screen. It answers a result rather than throwing for the
62
+ * same reason every other connection test does: a refused connection is the answer.
63
+ */
64
+ export const probeServiceCatalogContract = defineApiContract({
65
+ method: 'post',
66
+ pathResolver: () => '/service-catalog/probe',
67
+ requestBodySchema: connectServiceCatalogSchema,
68
+ responsesByStatusCode: { 200: connectionTestResultSchema, ...errorResponses },
69
+ });
70
+ /** Import now, rather than waiting out the autorefresh sweep's staleness window. */
71
+ export const syncServiceCatalogContract = defineApiContract({
72
+ method: 'post',
73
+ pathResolver: () => '/service-catalog/sync',
74
+ requestBodySchema: ContractNoBody,
75
+ responsesByStatusCode: { 200: serviceCatalogSyncResultSchema, ...errorResponses },
76
+ });
77
+ //# sourceMappingURL=service-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-catalog.js","sourceRoot":"","sources":["../../src/routes/service-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3E,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAA;AAClE,OAAO,EACL,2BAA2B,EAC3B,8BAA8B,EAC9B,8BAA8B,GAC/B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7C,8EAA8E;AAC9E,mEAAmE;AACnE,wFAAwF;AACxF,2EAA2E;AAC3E,EAAE;AACF,yFAAyF;AACzF,sFAAsF;AACtF,0FAA0F;AAC1F,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CAAC;IACzD,MAAM,EAAE,KAAK;IACb,YAAY,EAAE,GAAG,EAAE,CAAC,kBAAkB;IACtC,qBAAqB,EAAE;QACrB,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QAC/C,GAAG,cAAc;KAClB;CACF,CAAC,CAAA;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,iBAAiB,CAAC;IAC7D,MAAM,EAAE,KAAK;IACb,YAAY,EAAE,GAAG,EAAE,CAAC,kBAAkB;IACtC,iBAAiB,EAAE,2BAA2B;IAC9C,qBAAqB,EAAE,EAAE,GAAG,EAAE,8BAA8B,EAAE,GAAG,cAAc,EAAE;CAClF,CAAC,CAAA;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,iBAAiB,CAAC;IAChE,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE,GAAG,EAAE,CAAC,kBAAkB;IACtC,qBAAqB,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE;CAClE,CAAC,CAAA;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,iBAAiB,CAAC;IAC3D,MAAM,EAAE,MAAM;IACd,YAAY,EAAE,GAAG,EAAE,CAAC,wBAAwB;IAC5C,iBAAiB,EAAE,2BAA2B;IAC9C,qBAAqB,EAAE,EAAE,GAAG,EAAE,0BAA0B,EAAE,GAAG,cAAc,EAAE;CAC9E,CAAC,CAAA;AAEF,oFAAoF;AACpF,MAAM,CAAC,MAAM,0BAA0B,GAAG,iBAAiB,CAAC;IAC1D,MAAM,EAAE,MAAM;IACd,YAAY,EAAE,GAAG,EAAE,CAAC,uBAAuB;IAC3C,iBAAiB,EAAE,cAAc;IACjC,qBAAqB,EAAE,EAAE,GAAG,EAAE,8BAA8B,EAAE,GAAG,cAAc,EAAE;CAClF,CAAC,CAAA"}