@cat-factory/contracts 0.121.2 → 0.122.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/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/routes/index.d.ts +1 -0
- package/dist/routes/index.d.ts.map +1 -1
- package/dist/routes/index.js +1 -0
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/test-secrets.d.ts +135 -0
- package/dist/routes/test-secrets.d.ts.map +1 -0
- package/dist/routes/test-secrets.js +30 -0
- package/dist/routes/test-secrets.js.map +1 -0
- package/dist/test-secrets.d.ts +71 -0
- package/dist/test-secrets.d.ts.map +1 -0
- package/dist/test-secrets.js +100 -0
- package/dist/test-secrets.js.map +1 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,0BAA0B,CAAA;AACxC,cAAc,cAAc,CAAA;AAC5B,cAAc,sBAAsB,CAAA;AACpC,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,wBAAwB,CAAA;AACtC,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA;AACvC,cAAc,cAAc,CAAA;AAC5B,cAAc,2BAA2B,CAAA;AACzC,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA;AAClC,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,yBAAyB,CAAA;AACvC,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,6BAA6B,CAAA;AAC3C,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,wBAAwB,CAAA;AACtC,cAAc,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,0BAA0B,CAAA;AACxC,cAAc,cAAc,CAAA;AAC5B,cAAc,sBAAsB,CAAA;AACpC,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,wBAAwB,CAAA;AACtC,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA;AACvC,cAAc,cAAc,CAAA;AAC5B,cAAc,2BAA2B,CAAA;AACzC,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA;AAClC,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,yBAAyB,CAAA;AACvC,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,6BAA6B,CAAA;AAC3C,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,wBAAwB,CAAA;AACtC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,0BAA0B,CAAA;AACxC,cAAc,cAAc,CAAA;AAC5B,cAAc,sBAAsB,CAAA;AACpC,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,wBAAwB,CAAA;AACtC,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA;AACvC,cAAc,cAAc,CAAA;AAC5B,cAAc,2BAA2B,CAAA;AACzC,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA;AAClC,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,yBAAyB,CAAA;AACvC,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,6BAA6B,CAAA;AAC3C,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,wBAAwB,CAAA;AACtC,cAAc,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,0BAA0B,CAAA;AACxC,cAAc,cAAc,CAAA;AAC5B,cAAc,sBAAsB,CAAA;AACpC,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA;AACrC,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,wBAAwB,CAAA;AACtC,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA;AACvC,cAAc,cAAc,CAAA;AAC5B,cAAc,2BAA2B,CAAA;AACzC,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA;AAClC,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,yBAAyB,CAAA;AACvC,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,6BAA6B,CAAA;AAC3C,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,wBAAwB,CAAA;AACtC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA"}
|
package/dist/routes/index.d.ts
CHANGED
|
@@ -45,6 +45,7 @@ export * from './runners.js';
|
|
|
45
45
|
export * from './sandbox.js';
|
|
46
46
|
export * from './service-fragment-defaults.js';
|
|
47
47
|
export * from './services.js';
|
|
48
|
+
export * from './test-secrets.js';
|
|
48
49
|
export * from './slack.js';
|
|
49
50
|
export * from './spec.js';
|
|
50
51
|
export * from './tasks.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,aAAa,CAAA;AAC3B,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,oBAAoB,CAAA;AAClC,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,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,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,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,aAAa,CAAA;AAC3B,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,oBAAoB,CAAA;AAClC,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,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,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,iBAAiB,CAAA"}
|
package/dist/routes/index.js
CHANGED
|
@@ -48,6 +48,7 @@ export * from './runners.js';
|
|
|
48
48
|
export * from './sandbox.js';
|
|
49
49
|
export * from './service-fragment-defaults.js';
|
|
50
50
|
export * from './services.js';
|
|
51
|
+
export * from './test-secrets.js';
|
|
51
52
|
export * from './slack.js';
|
|
52
53
|
export * from './spec.js';
|
|
53
54
|
export * from './tasks.js';
|
package/dist/routes/index.js.map
CHANGED
|
@@ -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,aAAa,CAAA;AAC3B,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,oBAAoB,CAAA;AAClC,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,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,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,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,aAAa,CAAA;AAC3B,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,oBAAoB,CAAA;AAClC,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,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,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { ContractNoBody } from '@toad-contracts/valibot';
|
|
2
|
+
export declare const getServiceTestSecretsContract: {
|
|
3
|
+
readonly method: "get";
|
|
4
|
+
readonly requestPathParamsSchema: import("valibot").ObjectSchema<{
|
|
5
|
+
blockId: import("valibot").StringSchema<undefined>;
|
|
6
|
+
}, undefined> & import("@toad-contracts/core").StandardObjectKeysV1<unknown, unknown>;
|
|
7
|
+
readonly pathResolver: ({ blockId }: {
|
|
8
|
+
blockId: string;
|
|
9
|
+
}) => string;
|
|
10
|
+
readonly responsesByStatusCode: {
|
|
11
|
+
readonly '4xx': import("valibot").ObjectSchema<{
|
|
12
|
+
readonly error: import("valibot").ObjectSchema<{
|
|
13
|
+
readonly code: import("valibot").StringSchema<undefined>;
|
|
14
|
+
readonly message: import("valibot").StringSchema<undefined>;
|
|
15
|
+
readonly details: import("valibot").OptionalSchema<import("valibot").UnknownSchema, undefined>;
|
|
16
|
+
readonly issues: import("valibot").OptionalSchema<import("valibot").ArraySchema<import("valibot").ObjectSchema<{
|
|
17
|
+
readonly path: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
|
|
18
|
+
readonly message: import("valibot").StringSchema<undefined>;
|
|
19
|
+
}, undefined>, undefined>, undefined>;
|
|
20
|
+
}, undefined>;
|
|
21
|
+
}, undefined>;
|
|
22
|
+
readonly '5xx': import("valibot").ObjectSchema<{
|
|
23
|
+
readonly error: import("valibot").ObjectSchema<{
|
|
24
|
+
readonly code: import("valibot").StringSchema<undefined>;
|
|
25
|
+
readonly message: import("valibot").StringSchema<undefined>;
|
|
26
|
+
readonly details: import("valibot").OptionalSchema<import("valibot").UnknownSchema, undefined>;
|
|
27
|
+
readonly issues: import("valibot").OptionalSchema<import("valibot").ArraySchema<import("valibot").ObjectSchema<{
|
|
28
|
+
readonly path: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
|
|
29
|
+
readonly message: import("valibot").StringSchema<undefined>;
|
|
30
|
+
}, undefined>, undefined>, undefined>;
|
|
31
|
+
}, undefined>;
|
|
32
|
+
}, undefined>;
|
|
33
|
+
readonly 200: import("valibot").ObjectSchema<{
|
|
34
|
+
readonly blockId: import("valibot").StringSchema<undefined>;
|
|
35
|
+
readonly entries: import("valibot").ArraySchema<import("valibot").ObjectSchema<{
|
|
36
|
+
readonly key: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MinLengthAction<string, 1, undefined>, import("valibot").MaxLengthAction<string, 128, undefined>, import("valibot").RegexAction<string, "must be a valid environment variable name (letters, digits and underscores, not starting with a digit)">, import("valibot").CheckAction<string, "must not be a reserved/toolchain environment variable name (e.g. PATH, HOME, NODE_OPTIONS, npm_config_*, GIT_*)">]>;
|
|
37
|
+
readonly description: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MaxLengthAction<string, 500, undefined>]>;
|
|
38
|
+
}, undefined>, undefined>;
|
|
39
|
+
}, undefined>;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
export declare const setServiceTestSecretsContract: {
|
|
43
|
+
readonly method: "put";
|
|
44
|
+
readonly requestPathParamsSchema: import("valibot").ObjectSchema<{
|
|
45
|
+
blockId: import("valibot").StringSchema<undefined>;
|
|
46
|
+
}, undefined> & import("@toad-contracts/core").StandardObjectKeysV1<unknown, unknown>;
|
|
47
|
+
readonly pathResolver: ({ blockId }: {
|
|
48
|
+
blockId: string;
|
|
49
|
+
}) => string;
|
|
50
|
+
readonly requestBodySchema: import("valibot").SchemaWithPipe<readonly [import("valibot").ObjectSchema<{
|
|
51
|
+
readonly entries: import("valibot").ArraySchema<import("valibot").ObjectSchema<{
|
|
52
|
+
readonly key: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MinLengthAction<string, 1, undefined>, import("valibot").MaxLengthAction<string, 128, undefined>, import("valibot").RegexAction<string, "must be a valid environment variable name (letters, digits and underscores, not starting with a digit)">, import("valibot").CheckAction<string, "must not be a reserved/toolchain environment variable name (e.g. PATH, HOME, NODE_OPTIONS, npm_config_*, GIT_*)">]>;
|
|
53
|
+
readonly description: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MaxLengthAction<string, 500, undefined>]>;
|
|
54
|
+
readonly value: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").MinLengthAction<string, 1, undefined>, import("valibot").MaxLengthAction<string, 8192, undefined>]>;
|
|
55
|
+
}, undefined>, undefined>;
|
|
56
|
+
}, undefined>, import("valibot").CheckAction<{
|
|
57
|
+
entries: {
|
|
58
|
+
key: string;
|
|
59
|
+
description: string;
|
|
60
|
+
value: string;
|
|
61
|
+
}[];
|
|
62
|
+
}, "test-secret keys must be unique within a service">, import("valibot").CheckAction<{
|
|
63
|
+
entries: {
|
|
64
|
+
key: string;
|
|
65
|
+
description: string;
|
|
66
|
+
value: string;
|
|
67
|
+
}[];
|
|
68
|
+
}, "at most 50 test secrets per service">]>;
|
|
69
|
+
readonly responsesByStatusCode: {
|
|
70
|
+
readonly '4xx': import("valibot").ObjectSchema<{
|
|
71
|
+
readonly error: import("valibot").ObjectSchema<{
|
|
72
|
+
readonly code: import("valibot").StringSchema<undefined>;
|
|
73
|
+
readonly message: import("valibot").StringSchema<undefined>;
|
|
74
|
+
readonly details: import("valibot").OptionalSchema<import("valibot").UnknownSchema, undefined>;
|
|
75
|
+
readonly issues: import("valibot").OptionalSchema<import("valibot").ArraySchema<import("valibot").ObjectSchema<{
|
|
76
|
+
readonly path: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
|
|
77
|
+
readonly message: import("valibot").StringSchema<undefined>;
|
|
78
|
+
}, undefined>, undefined>, undefined>;
|
|
79
|
+
}, undefined>;
|
|
80
|
+
}, undefined>;
|
|
81
|
+
readonly '5xx': import("valibot").ObjectSchema<{
|
|
82
|
+
readonly error: import("valibot").ObjectSchema<{
|
|
83
|
+
readonly code: import("valibot").StringSchema<undefined>;
|
|
84
|
+
readonly message: import("valibot").StringSchema<undefined>;
|
|
85
|
+
readonly details: import("valibot").OptionalSchema<import("valibot").UnknownSchema, undefined>;
|
|
86
|
+
readonly issues: import("valibot").OptionalSchema<import("valibot").ArraySchema<import("valibot").ObjectSchema<{
|
|
87
|
+
readonly path: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
|
|
88
|
+
readonly message: import("valibot").StringSchema<undefined>;
|
|
89
|
+
}, undefined>, undefined>, undefined>;
|
|
90
|
+
}, undefined>;
|
|
91
|
+
}, undefined>;
|
|
92
|
+
readonly 200: import("valibot").ObjectSchema<{
|
|
93
|
+
readonly blockId: import("valibot").StringSchema<undefined>;
|
|
94
|
+
readonly entries: import("valibot").ArraySchema<import("valibot").ObjectSchema<{
|
|
95
|
+
readonly key: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MinLengthAction<string, 1, undefined>, import("valibot").MaxLengthAction<string, 128, undefined>, import("valibot").RegexAction<string, "must be a valid environment variable name (letters, digits and underscores, not starting with a digit)">, import("valibot").CheckAction<string, "must not be a reserved/toolchain environment variable name (e.g. PATH, HOME, NODE_OPTIONS, npm_config_*, GIT_*)">]>;
|
|
96
|
+
readonly description: import("valibot").SchemaWithPipe<readonly [import("valibot").StringSchema<undefined>, import("valibot").TrimAction, import("valibot").MaxLengthAction<string, 500, undefined>]>;
|
|
97
|
+
}, undefined>, undefined>;
|
|
98
|
+
}, undefined>;
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
export declare const deleteServiceTestSecretsContract: {
|
|
102
|
+
readonly method: "delete";
|
|
103
|
+
readonly requestPathParamsSchema: import("valibot").ObjectSchema<{
|
|
104
|
+
blockId: import("valibot").StringSchema<undefined>;
|
|
105
|
+
}, undefined> & import("@toad-contracts/core").StandardObjectKeysV1<unknown, unknown>;
|
|
106
|
+
readonly pathResolver: ({ blockId }: {
|
|
107
|
+
blockId: string;
|
|
108
|
+
}) => string;
|
|
109
|
+
readonly responsesByStatusCode: {
|
|
110
|
+
readonly '4xx': import("valibot").ObjectSchema<{
|
|
111
|
+
readonly error: import("valibot").ObjectSchema<{
|
|
112
|
+
readonly code: import("valibot").StringSchema<undefined>;
|
|
113
|
+
readonly message: import("valibot").StringSchema<undefined>;
|
|
114
|
+
readonly details: import("valibot").OptionalSchema<import("valibot").UnknownSchema, undefined>;
|
|
115
|
+
readonly issues: import("valibot").OptionalSchema<import("valibot").ArraySchema<import("valibot").ObjectSchema<{
|
|
116
|
+
readonly path: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
|
|
117
|
+
readonly message: import("valibot").StringSchema<undefined>;
|
|
118
|
+
}, undefined>, undefined>, undefined>;
|
|
119
|
+
}, undefined>;
|
|
120
|
+
}, undefined>;
|
|
121
|
+
readonly '5xx': import("valibot").ObjectSchema<{
|
|
122
|
+
readonly error: import("valibot").ObjectSchema<{
|
|
123
|
+
readonly code: import("valibot").StringSchema<undefined>;
|
|
124
|
+
readonly message: import("valibot").StringSchema<undefined>;
|
|
125
|
+
readonly details: import("valibot").OptionalSchema<import("valibot").UnknownSchema, undefined>;
|
|
126
|
+
readonly issues: import("valibot").OptionalSchema<import("valibot").ArraySchema<import("valibot").ObjectSchema<{
|
|
127
|
+
readonly path: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
|
|
128
|
+
readonly message: import("valibot").StringSchema<undefined>;
|
|
129
|
+
}, undefined>, undefined>, undefined>;
|
|
130
|
+
}, undefined>;
|
|
131
|
+
}, undefined>;
|
|
132
|
+
readonly 204: typeof ContractNoBody;
|
|
133
|
+
};
|
|
134
|
+
};
|
|
135
|
+
//# sourceMappingURL=test-secrets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-secrets.d.ts","sourceRoot":"","sources":["../../src/routes/test-secrets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAqB,MAAM,yBAAyB,CAAA;AAa3E,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKxC,CAAA;AAEF,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMxC,CAAA;AAEF,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAK3C,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ContractNoBody, defineApiContract } from '@toad-contracts/valibot';
|
|
2
|
+
import { serviceTestSecretsViewSchema, upsertServiceTestSecretsSchema } from '../test-secrets.js';
|
|
3
|
+
import { errorResponses, singleStringParam } from './_shared.js';
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
// Sensitive per-service test-secret route contracts. Mounted under
|
|
6
|
+
// `/workspaces/:workspaceId`, so the paths here are relative to that prefix.
|
|
7
|
+
// The blockId is a SERVICE FRAME block. Values are write-only (never read back);
|
|
8
|
+
// the view returns only the configured keys + descriptions. See TestSecretsController.
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
const blockIdParams = singleStringParam('blockId');
|
|
11
|
+
export const getServiceTestSecretsContract = defineApiContract({
|
|
12
|
+
method: 'get',
|
|
13
|
+
requestPathParamsSchema: blockIdParams,
|
|
14
|
+
pathResolver: ({ blockId }) => `/services/${blockId}/test-secrets`,
|
|
15
|
+
responsesByStatusCode: { 200: serviceTestSecretsViewSchema, ...errorResponses },
|
|
16
|
+
});
|
|
17
|
+
export const setServiceTestSecretsContract = defineApiContract({
|
|
18
|
+
method: 'put',
|
|
19
|
+
requestPathParamsSchema: blockIdParams,
|
|
20
|
+
pathResolver: ({ blockId }) => `/services/${blockId}/test-secrets`,
|
|
21
|
+
requestBodySchema: upsertServiceTestSecretsSchema,
|
|
22
|
+
responsesByStatusCode: { 200: serviceTestSecretsViewSchema, ...errorResponses },
|
|
23
|
+
});
|
|
24
|
+
export const deleteServiceTestSecretsContract = defineApiContract({
|
|
25
|
+
method: 'delete',
|
|
26
|
+
requestPathParamsSchema: blockIdParams,
|
|
27
|
+
pathResolver: ({ blockId }) => `/services/${blockId}/test-secrets`,
|
|
28
|
+
responsesByStatusCode: { 204: ContractNoBody, ...errorResponses },
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=test-secrets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-secrets.js","sourceRoot":"","sources":["../../src/routes/test-secrets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3E,OAAO,EAAE,4BAA4B,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAA;AACjG,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAEhE,8EAA8E;AAC9E,mEAAmE;AACnE,6EAA6E;AAC7E,iFAAiF;AACjF,uFAAuF;AACvF,8EAA8E;AAE9E,MAAM,aAAa,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAA;AAElD,MAAM,CAAC,MAAM,6BAA6B,GAAG,iBAAiB,CAAC;IAC7D,MAAM,EAAE,KAAK;IACb,uBAAuB,EAAE,aAAa;IACtC,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,aAAa,OAAO,eAAe;IAClE,qBAAqB,EAAE,EAAE,GAAG,EAAE,4BAA4B,EAAE,GAAG,cAAc,EAAE;CAChF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG,iBAAiB,CAAC;IAC7D,MAAM,EAAE,KAAK;IACb,uBAAuB,EAAE,aAAa;IACtC,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,aAAa,OAAO,eAAe;IAClE,iBAAiB,EAAE,8BAA8B;IACjD,qBAAqB,EAAE,EAAE,GAAG,EAAE,4BAA4B,EAAE,GAAG,cAAc,EAAE;CAChF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,gCAAgC,GAAG,iBAAiB,CAAC;IAChE,MAAM,EAAE,QAAQ;IAChB,uBAAuB,EAAE,aAAa;IACtC,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,aAAa,OAAO,eAAe;IAClE,qBAAqB,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE;CAClE,CAAC,CAAA"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import * as v from 'valibot';
|
|
2
|
+
export declare const testSecretKeySchema: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 128, undefined>, v.RegexAction<string, "must be a valid environment variable name (letters, digits and underscores, not starting with a digit)">, v.CheckAction<string, "must not be a reserved/toolchain environment variable name (e.g. PATH, HOME, NODE_OPTIONS, npm_config_*, GIT_*)">]>;
|
|
3
|
+
/**
|
|
4
|
+
* One sensitive test credential: the env-var name it is injected under, a non-secret
|
|
5
|
+
* description (advertised to the agent), and the (write-only) secret value (sealed at rest,
|
|
6
|
+
* delivered only to the container environment — never echoed back or put in a prompt).
|
|
7
|
+
*/
|
|
8
|
+
export declare const testSecretEntrySchema: v.ObjectSchema<{
|
|
9
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 128, undefined>, v.RegexAction<string, "must be a valid environment variable name (letters, digits and underscores, not starting with a digit)">, v.CheckAction<string, "must not be a reserved/toolchain environment variable name (e.g. PATH, HOME, NODE_OPTIONS, npm_config_*, GIT_*)">]>;
|
|
10
|
+
readonly description: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>;
|
|
11
|
+
readonly value: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 8192, undefined>]>;
|
|
12
|
+
}, undefined>;
|
|
13
|
+
export type TestSecretEntry = v.InferOutput<typeof testSecretEntrySchema>;
|
|
14
|
+
/**
|
|
15
|
+
* A non-secret REFERENCE to a configured test secret: the key + description, NEVER the value.
|
|
16
|
+
* This is what is safe to render into the tester prompt, expose on the API, and carry on the
|
|
17
|
+
* agent run context.
|
|
18
|
+
*/
|
|
19
|
+
export declare const testSecretRefSchema: v.ObjectSchema<{
|
|
20
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 128, undefined>, v.RegexAction<string, "must be a valid environment variable name (letters, digits and underscores, not starting with a digit)">, v.CheckAction<string, "must not be a reserved/toolchain environment variable name (e.g. PATH, HOME, NODE_OPTIONS, npm_config_*, GIT_*)">]>;
|
|
21
|
+
readonly description: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>;
|
|
22
|
+
}, undefined>;
|
|
23
|
+
export type TestSecretRef = v.InferOutput<typeof testSecretRefSchema>;
|
|
24
|
+
/**
|
|
25
|
+
* Validate a decrypted test-secret blob at the read boundary. The service calls this on the
|
|
26
|
+
* JSON it decrypts so a drifted/corrupted row fails with a clear schema error here rather than
|
|
27
|
+
* deep in a dispatch. (The persisted blob is `TestSecretEntry[]` — key + description + value.)
|
|
28
|
+
*/
|
|
29
|
+
export declare const testSecretEntriesSchema: v.ArraySchema<v.ObjectSchema<{
|
|
30
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 128, undefined>, v.RegexAction<string, "must be a valid environment variable name (letters, digits and underscores, not starting with a digit)">, v.CheckAction<string, "must not be a reserved/toolchain environment variable name (e.g. PATH, HOME, NODE_OPTIONS, npm_config_*, GIT_*)">]>;
|
|
31
|
+
readonly description: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>;
|
|
32
|
+
readonly value: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 8192, undefined>]>;
|
|
33
|
+
}, undefined>, undefined>;
|
|
34
|
+
export declare function parseTestSecretEntries(raw: unknown): TestSecretEntry[];
|
|
35
|
+
/** Set/replace a service's sensitive test-secret set (values write-only; keys unique). */
|
|
36
|
+
export declare const upsertServiceTestSecretsSchema: v.SchemaWithPipe<readonly [v.ObjectSchema<{
|
|
37
|
+
readonly entries: v.ArraySchema<v.ObjectSchema<{
|
|
38
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 128, undefined>, v.RegexAction<string, "must be a valid environment variable name (letters, digits and underscores, not starting with a digit)">, v.CheckAction<string, "must not be a reserved/toolchain environment variable name (e.g. PATH, HOME, NODE_OPTIONS, npm_config_*, GIT_*)">]>;
|
|
39
|
+
readonly description: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>;
|
|
40
|
+
readonly value: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 8192, undefined>]>;
|
|
41
|
+
}, undefined>, undefined>;
|
|
42
|
+
}, undefined>, v.CheckAction<{
|
|
43
|
+
entries: {
|
|
44
|
+
key: string;
|
|
45
|
+
description: string;
|
|
46
|
+
value: string;
|
|
47
|
+
}[];
|
|
48
|
+
}, "test-secret keys must be unique within a service">, v.CheckAction<{
|
|
49
|
+
entries: {
|
|
50
|
+
key: string;
|
|
51
|
+
description: string;
|
|
52
|
+
value: string;
|
|
53
|
+
}[];
|
|
54
|
+
}, "at most 50 test secrets per service">]>;
|
|
55
|
+
export type UpsertServiceTestSecretsInput = v.InferOutput<typeof upsertServiceTestSecretsSchema>;
|
|
56
|
+
/** What `GET .../test-secrets` returns — the configured keys + descriptions, NEVER the values. */
|
|
57
|
+
export declare const serviceTestSecretsViewSchema: v.ObjectSchema<{
|
|
58
|
+
/** The service-frame block these secrets belong to. */
|
|
59
|
+
readonly blockId: v.StringSchema<undefined>;
|
|
60
|
+
readonly entries: v.ArraySchema<v.ObjectSchema<{
|
|
61
|
+
readonly key: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 128, undefined>, v.RegexAction<string, "must be a valid environment variable name (letters, digits and underscores, not starting with a digit)">, v.CheckAction<string, "must not be a reserved/toolchain environment variable name (e.g. PATH, HOME, NODE_OPTIONS, npm_config_*, GIT_*)">]>;
|
|
62
|
+
readonly description: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MaxLengthAction<string, 500, undefined>]>;
|
|
63
|
+
}, undefined>, undefined>;
|
|
64
|
+
}, undefined>;
|
|
65
|
+
export type ServiceTestSecretsView = v.InferOutput<typeof serviceTestSecretsViewSchema>;
|
|
66
|
+
/**
|
|
67
|
+
* The non-secret summary persisted alongside the sealed values, so the view (and the tester
|
|
68
|
+
* prompt) can list what is configured without decrypting anything.
|
|
69
|
+
*/
|
|
70
|
+
export declare function serviceTestSecretsSummary(entries: TestSecretEntry[]): TestSecretRef[];
|
|
71
|
+
//# sourceMappingURL=test-secrets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-secrets.d.ts","sourceRoot":"","sources":["../src/test-secrets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAuD5B,eAAO,MAAM,mBAAmB,qaAa/B,CAAA;AAKD;;;;GAIG;AACH,eAAO,MAAM,qBAAqB;;;;aAIhC,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEzE;;;;GAIG;AACH,eAAO,MAAM,mBAAmB;;;aAG9B,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAErE;;;;GAIG;AACH,eAAO,MAAM,uBAAuB;;;;yBAAiC,CAAA;AACrE,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,EAAE,CAEtE;AAED,0FAA0F;AAC1F,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;2CAO1C,CAAA;AACD,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,8BAA8B,CAAC,CAAA;AAEhG,kGAAkG;AAClG,eAAO,MAAM,4BAA4B;IACvC,uDAAuD;;;;;;aAGvD,CAAA;AACF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,4BAA4B,CAAC,CAAA;AAEvF;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,aAAa,EAAE,CAErF"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import * as v from 'valibot';
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// Sensitive per-service test credentials (SEALED).
|
|
4
|
+
//
|
|
5
|
+
// A companion to the NON-sensitive test-credential pools (`ServiceTestCredentials`,
|
|
6
|
+
// stored as plain JSON and rendered straight into the tester prompt): this store is for
|
|
7
|
+
// SENSITIVE testing credentials — e.g. a third-party API token a Tester needs to exercise
|
|
8
|
+
// an integration. Unlike the pools, these are:
|
|
9
|
+
// - SEALED at rest by the facade `SecretCipher` (like `observability_connections`), and
|
|
10
|
+
// - delivered to the Tester container OUT OF BAND — injected as environment variables the
|
|
11
|
+
// agent's shell can read, NEVER rendered into the prompt text or the telemetry snapshot.
|
|
12
|
+
// The prompt only advertises each secret's KEY + (non-secret) DESCRIPTION so the agent knows
|
|
13
|
+
// which env vars exist and what each is for; the VALUES reach only the container environment.
|
|
14
|
+
//
|
|
15
|
+
// Both this and the non-sensitive pools are per SERVICE FRAME (resolved up the frame chain),
|
|
16
|
+
// mirroring the release-health per-block config. See docs/initiatives/tester-environment-access.md.
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
/**
|
|
19
|
+
* An env-var-safe key: the name the secret is injected under in the Tester container's
|
|
20
|
+
* environment, so it must be a valid POSIX shell variable name (letters, digits, underscore;
|
|
21
|
+
* not starting with a digit). The operator names it as the system under test expects it —
|
|
22
|
+
* e.g. `STRIPE_API_KEY` — and the agent references it as `$STRIPE_API_KEY`.
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* Toolchain-critical / reserved env-var names never accepted as a test-secret key: injecting one
|
|
26
|
+
* would clobber the harness's own environment (`PATH`/`NODE_OPTIONS`/`LD_PRELOAD`/…) or reconfigure
|
|
27
|
+
* its package manager (`npm_config_*`) or git (`GIT_*`). The harness (executor-harness `job.ts`)
|
|
28
|
+
* ALSO drops these defensively at parse; rejecting here means the operator gets a clear error at
|
|
29
|
+
* write time instead of a key that is silently never injected. Kept in step with the harness's
|
|
30
|
+
* `RESERVED_ENV_NAMES` / `RESERVED_ENV_PREFIXES` (the harness has no dependency on this package).
|
|
31
|
+
* Exact names match verbatim (Linux env is case-sensitive); the family prefixes match
|
|
32
|
+
* case-insensitively (npm reads `npm_config_*` regardless of case).
|
|
33
|
+
*/
|
|
34
|
+
const RESERVED_ENV_NAMES = new Set([
|
|
35
|
+
'PATH',
|
|
36
|
+
'HOME',
|
|
37
|
+
'NODE_OPTIONS',
|
|
38
|
+
'NODE_PATH',
|
|
39
|
+
'NODE_EXTRA_CA_CERTS',
|
|
40
|
+
'LD_PRELOAD',
|
|
41
|
+
'LD_LIBRARY_PATH',
|
|
42
|
+
'BASH_ENV',
|
|
43
|
+
'ENV',
|
|
44
|
+
'SHELL',
|
|
45
|
+
'IFS',
|
|
46
|
+
]);
|
|
47
|
+
const RESERVED_ENV_PREFIXES = ['npm_config_', 'git_'];
|
|
48
|
+
function isReservedEnvName(key) {
|
|
49
|
+
if (RESERVED_ENV_NAMES.has(key))
|
|
50
|
+
return true;
|
|
51
|
+
const lower = key.toLowerCase();
|
|
52
|
+
return RESERVED_ENV_PREFIXES.some((p) => lower.startsWith(p));
|
|
53
|
+
}
|
|
54
|
+
export const testSecretKeySchema = v.pipe(v.string(), v.trim(), v.minLength(1), v.maxLength(128), v.regex(/^[A-Za-z_][A-Za-z0-9_]*$/, 'must be a valid environment variable name (letters, digits and underscores, not starting with a digit)'), v.check((key) => !isReservedEnvName(key), 'must not be a reserved/toolchain environment variable name (e.g. PATH, HOME, NODE_OPTIONS, npm_config_*, GIT_*)'));
|
|
55
|
+
/** A non-secret note describing what a test secret is for. Rendered into the tester prompt. */
|
|
56
|
+
const testSecretDescriptionSchema = v.pipe(v.string(), v.trim(), v.maxLength(500));
|
|
57
|
+
/**
|
|
58
|
+
* One sensitive test credential: the env-var name it is injected under, a non-secret
|
|
59
|
+
* description (advertised to the agent), and the (write-only) secret value (sealed at rest,
|
|
60
|
+
* delivered only to the container environment — never echoed back or put in a prompt).
|
|
61
|
+
*/
|
|
62
|
+
export const testSecretEntrySchema = v.object({
|
|
63
|
+
key: testSecretKeySchema,
|
|
64
|
+
description: testSecretDescriptionSchema,
|
|
65
|
+
value: v.pipe(v.string(), v.minLength(1), v.maxLength(8192)),
|
|
66
|
+
});
|
|
67
|
+
/**
|
|
68
|
+
* A non-secret REFERENCE to a configured test secret: the key + description, NEVER the value.
|
|
69
|
+
* This is what is safe to render into the tester prompt, expose on the API, and carry on the
|
|
70
|
+
* agent run context.
|
|
71
|
+
*/
|
|
72
|
+
export const testSecretRefSchema = v.object({
|
|
73
|
+
key: testSecretKeySchema,
|
|
74
|
+
description: testSecretDescriptionSchema,
|
|
75
|
+
});
|
|
76
|
+
/**
|
|
77
|
+
* Validate a decrypted test-secret blob at the read boundary. The service calls this on the
|
|
78
|
+
* JSON it decrypts so a drifted/corrupted row fails with a clear schema error here rather than
|
|
79
|
+
* deep in a dispatch. (The persisted blob is `TestSecretEntry[]` — key + description + value.)
|
|
80
|
+
*/
|
|
81
|
+
export const testSecretEntriesSchema = v.array(testSecretEntrySchema);
|
|
82
|
+
export function parseTestSecretEntries(raw) {
|
|
83
|
+
return v.parse(testSecretEntriesSchema, raw);
|
|
84
|
+
}
|
|
85
|
+
/** Set/replace a service's sensitive test-secret set (values write-only; keys unique). */
|
|
86
|
+
export const upsertServiceTestSecretsSchema = v.pipe(v.object({ entries: v.array(testSecretEntrySchema) }), v.check((o) => new Set(o.entries.map((e) => e.key)).size === o.entries.length, 'test-secret keys must be unique within a service'), v.check((o) => o.entries.length <= 50, 'at most 50 test secrets per service'));
|
|
87
|
+
/** What `GET .../test-secrets` returns — the configured keys + descriptions, NEVER the values. */
|
|
88
|
+
export const serviceTestSecretsViewSchema = v.object({
|
|
89
|
+
/** The service-frame block these secrets belong to. */
|
|
90
|
+
blockId: v.string(),
|
|
91
|
+
entries: v.array(testSecretRefSchema),
|
|
92
|
+
});
|
|
93
|
+
/**
|
|
94
|
+
* The non-secret summary persisted alongside the sealed values, so the view (and the tester
|
|
95
|
+
* prompt) can list what is configured without decrypting anything.
|
|
96
|
+
*/
|
|
97
|
+
export function serviceTestSecretsSummary(entries) {
|
|
98
|
+
return entries.map((e) => ({ key: e.key, description: e.description }));
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=test-secrets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-secrets.js","sourceRoot":"","sources":["../src/test-secrets.ts"],"names":[],"mappings":"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"}
|