@superblocksteam/shared 0.9589.6 → 0.9590.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 (82) hide show
  1. package/dist/database-lifecycle/index.d.ts +60 -1
  2. package/dist/database-lifecycle/index.d.ts.map +1 -1
  3. package/dist/database-lifecycle/index.js +34 -0
  4. package/dist/database-lifecycle/index.js.map +1 -1
  5. package/dist/types/application/index.d.ts +1 -1
  6. package/dist/types/application/index.d.ts.map +1 -1
  7. package/dist/types/application/index.js.map +1 -1
  8. package/dist/types/audit/ocsf.d.ts.map +1 -1
  9. package/dist/types/audit/ocsf.js +8 -1
  10. package/dist/types/audit/ocsf.js.map +1 -1
  11. package/dist/types/plugin/form.d.ts +7 -0
  12. package/dist/types/plugin/form.d.ts.map +1 -1
  13. package/dist/types/plugin/form.js +22 -1
  14. package/dist/types/plugin/form.js.map +1 -1
  15. package/dist/types/plugin/form.test.d.ts +2 -0
  16. package/dist/types/plugin/form.test.d.ts.map +1 -0
  17. package/dist/types/plugin/form.test.js +156 -0
  18. package/dist/types/plugin/form.test.js.map +1 -0
  19. package/dist/types/policyGate/index.d.ts +21 -1
  20. package/dist/types/policyGate/index.d.ts.map +1 -1
  21. package/dist/types/rbac/index.d.ts +5 -0
  22. package/dist/types/rbac/index.d.ts.map +1 -1
  23. package/dist/types/rbac/index.js +5 -0
  24. package/dist/types/rbac/index.js.map +1 -1
  25. package/dist/types/reviewPolicy/index.d.ts +35 -0
  26. package/dist/types/reviewPolicy/index.d.ts.map +1 -1
  27. package/dist/types/user/index.d.ts +2 -0
  28. package/dist/types/user/index.d.ts.map +1 -1
  29. package/dist/types/user/index.js.map +1 -1
  30. package/dist/utils/string.d.ts +2 -0
  31. package/dist/utils/string.d.ts.map +1 -1
  32. package/dist/utils/string.js +13 -1
  33. package/dist/utils/string.js.map +1 -1
  34. package/dist/utils/string.test.js +28 -0
  35. package/dist/utils/string.test.js.map +1 -1
  36. package/dist-esm/database-lifecycle/index.d.ts +60 -1
  37. package/dist-esm/database-lifecycle/index.d.ts.map +1 -1
  38. package/dist-esm/database-lifecycle/index.js +32 -0
  39. package/dist-esm/database-lifecycle/index.js.map +1 -1
  40. package/dist-esm/types/application/index.d.ts +1 -1
  41. package/dist-esm/types/application/index.d.ts.map +1 -1
  42. package/dist-esm/types/application/index.js.map +1 -1
  43. package/dist-esm/types/audit/ocsf.d.ts.map +1 -1
  44. package/dist-esm/types/audit/ocsf.js +8 -1
  45. package/dist-esm/types/audit/ocsf.js.map +1 -1
  46. package/dist-esm/types/plugin/form.d.ts +7 -0
  47. package/dist-esm/types/plugin/form.d.ts.map +1 -1
  48. package/dist-esm/types/plugin/form.js +20 -0
  49. package/dist-esm/types/plugin/form.js.map +1 -1
  50. package/dist-esm/types/plugin/form.test.d.ts +2 -0
  51. package/dist-esm/types/plugin/form.test.d.ts.map +1 -0
  52. package/dist-esm/types/plugin/form.test.js +154 -0
  53. package/dist-esm/types/plugin/form.test.js.map +1 -0
  54. package/dist-esm/types/policyGate/index.d.ts +21 -1
  55. package/dist-esm/types/policyGate/index.d.ts.map +1 -1
  56. package/dist-esm/types/rbac/index.d.ts +5 -0
  57. package/dist-esm/types/rbac/index.d.ts.map +1 -1
  58. package/dist-esm/types/rbac/index.js +5 -0
  59. package/dist-esm/types/rbac/index.js.map +1 -1
  60. package/dist-esm/types/reviewPolicy/index.d.ts +35 -0
  61. package/dist-esm/types/reviewPolicy/index.d.ts.map +1 -1
  62. package/dist-esm/types/user/index.d.ts +2 -0
  63. package/dist-esm/types/user/index.d.ts.map +1 -1
  64. package/dist-esm/types/user/index.js.map +1 -1
  65. package/dist-esm/utils/string.d.ts +2 -0
  66. package/dist-esm/utils/string.d.ts.map +1 -1
  67. package/dist-esm/utils/string.js +11 -0
  68. package/dist-esm/utils/string.js.map +1 -1
  69. package/dist-esm/utils/string.test.js +29 -1
  70. package/dist-esm/utils/string.test.js.map +1 -1
  71. package/package.json +2 -2
  72. package/src/database-lifecycle/index.ts +156 -1
  73. package/src/types/application/index.ts +5 -0
  74. package/src/types/audit/ocsf.ts +8 -1
  75. package/src/types/plugin/form.test.ts +161 -0
  76. package/src/types/plugin/form.ts +22 -0
  77. package/src/types/policyGate/index.ts +26 -1
  78. package/src/types/rbac/index.ts +5 -0
  79. package/src/types/reviewPolicy/index.ts +34 -3
  80. package/src/types/user/index.ts +2 -0
  81. package/src/utils/string.test.ts +32 -1
  82. package/src/utils/string.ts +12 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/reviewPolicy/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/reviewPolicy/index.ts"],"names":[],"mappings":"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"}
@@ -40,11 +40,13 @@ export type GetOrganizationGeneralResponseBody = {
40
40
  name: string;
41
41
  allowedDomains: Domain[];
42
42
  roleSettings: RoleSettingsDto;
43
+ npmAllowInstallScripts?: boolean;
43
44
  };
44
45
  export type PatchOrganizationGeneralResponseBody = {
45
46
  name?: string;
46
47
  allowedDomains?: string[];
47
48
  roleSettings?: RoleSettingsDto;
49
+ npmAllowInstallScripts?: boolean;
48
50
  };
49
51
  export type DataTreeUser = {
50
52
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/user/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/user/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB,EAAE,MAAM,CAAC;IAC9B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,oBAAY,qBAAqB;IAC/B,mBAAmB,IAAI;IACvB,aAAa,IAAI;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,qBAAqB,CAAC;CAC/B;AAED,oBAAY,sBAAsB;IAChC,OAAO,IAAI;IACX,MAAM,IAAI;IACV,QAAQ,IAAI;CACb;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,sBAAsB,CAAC;IAC/B,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,eAAe,CAAC,EAAE,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,aAAa,EAAE,CAAC;CAC/B;AAED,MAAM,MAAM,MAAM,GAAG;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,eAAe,CAAC;IAC9B,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,oCAAoC,GAAG;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,CAAC;AAEF,oBAAY,UAAU;IACpB,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,aAAa,kBAAkB;CAChC;AAED,oBAAY,UAAU;IACpB,WAAW,gBAAgB;IAC3B,IAAI,SAAS;CACd;AAED,oBAAY,QAAQ;IAClB,WAAW,gBAAgB;IAC3B,QAAQ,aAAa;CACtB;AAED,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,OAAO,GAAG,WAAW,CAAC;AAEnE,oBAAY,iBAAiB;IAC3B,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,EAAE,IAAI,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,oBAAY,aAAa;IACvB,WAAW,gBAAgB;IAC3B,KAAK,UAAU;CAChB;AAED,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/user/index.ts"],"names":[],"mappings":"AAWA,MAAM,CAAN,IAAY,qBAGX;AAHD,WAAY,qBAAqB;IAC/B,+FAAuB,CAAA;IACvB,mFAAiB,CAAA;AACnB,CAAC,EAHW,qBAAqB,KAArB,qBAAqB,QAGhC;AASD,MAAM,CAAN,IAAY,sBAIX;AAJD,WAAY,sBAAsB;IAChC,yEAAW,CAAA;IACX,uEAAU,CAAA;IACV,2EAAY,CAAA;AACd,CAAC,EAJW,sBAAsB,KAAtB,sBAAsB,QAIjC;AAuCD,MAAM,CAAN,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,iCAAmB,CAAA;IACnB,qCAAuB,CAAA;IACvB,6CAA+B,CAAA;AACjC,CAAC,EAJW,UAAU,KAAV,UAAU,QAIrB;AAED,MAAM,CAAN,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,yCAA2B,CAAA;IAC3B,2BAAa,CAAA;AACf,CAAC,EAHW,UAAU,KAAV,UAAU,QAGrB;AAED,MAAM,CAAN,IAAY,QAGX;AAHD,WAAY,QAAQ;IAClB,uCAA2B,CAAA;IAC3B,iCAAqB,CAAA;AACvB,CAAC,EAHW,QAAQ,KAAR,QAAQ,QAGnB;AAID,MAAM,CAAN,IAAY,iBAKX;AALD,WAAY,iBAAiB;IAC3B,0CAAqB,CAAA;IACrB,4CAAuB,CAAA;IACvB,sCAAiB,CAAA;IACjB,wCAAmB,CAAA;AACrB,CAAC,EALW,iBAAiB,KAAjB,iBAAiB,QAK5B;AAiBD,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,4CAA2B,CAAA;IAC3B,gCAAe,CAAA;AACjB,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB;AAED,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/user/index.ts"],"names":[],"mappings":"AAWA,MAAM,CAAN,IAAY,qBAGX;AAHD,WAAY,qBAAqB;IAC/B,+FAAuB,CAAA;IACvB,mFAAiB,CAAA;AACnB,CAAC,EAHW,qBAAqB,KAArB,qBAAqB,QAGhC;AASD,MAAM,CAAN,IAAY,sBAIX;AAJD,WAAY,sBAAsB;IAChC,yEAAW,CAAA;IACX,uEAAU,CAAA;IACV,2EAAY,CAAA;AACd,CAAC,EAJW,sBAAsB,KAAtB,sBAAsB,QAIjC;AAyCD,MAAM,CAAN,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,iCAAmB,CAAA;IACnB,qCAAuB,CAAA;IACvB,6CAA+B,CAAA;AACjC,CAAC,EAJW,UAAU,KAAV,UAAU,QAIrB;AAED,MAAM,CAAN,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,yCAA2B,CAAA;IAC3B,2BAAa,CAAA;AACf,CAAC,EAHW,UAAU,KAAV,UAAU,QAGrB;AAED,MAAM,CAAN,IAAY,QAGX;AAHD,WAAY,QAAQ;IAClB,uCAA2B,CAAA;IAC3B,iCAAqB,CAAA;AACvB,CAAC,EAHW,QAAQ,KAAR,QAAQ,QAGnB;AAID,MAAM,CAAN,IAAY,iBAKX;AALD,WAAY,iBAAiB;IAC3B,0CAAqB,CAAA;IACrB,4CAAuB,CAAA;IACvB,sCAAiB,CAAA;IACjB,wCAAmB,CAAA;AACrB,CAAC,EALW,iBAAiB,KAAjB,iBAAiB,QAK5B;AAiBD,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,4CAA2B,CAAA;IAC3B,gCAAe,CAAA;AACjB,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB;AAED,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC"}
@@ -3,5 +3,7 @@ export declare const snakeCaseToDisplay: (snakeCaseString: string) => string;
3
3
  export declare const jsonPrettyPrint: (obj: unknown) => string;
4
4
  export declare const EmailRegexString = "(([^<>()[\\].,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})";
5
5
  export declare const validateEmail: (email: string) => boolean;
6
+ export declare const UUID_REGEX_STRING = "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}";
7
+ export declare const isUuid: (value: unknown) => value is string;
6
8
  export declare const getNextEntityName: (prefix: string, existingNames: string[], separator?: string) => string;
7
9
  //# sourceMappingURL=string.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../../src/utils/string.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,GAAI,iBAAiB,MAAM,KAAG,MAE5D,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,iBAAiB,MAAM,KAAG,MAE5D,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,KAAK,OAAO,KAAG,MAE9C,CAAC;AAEF,eAAO,MAAM,gBAAgB,8IAC0G,CAAC;AAGxI,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,OAE7C,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,EAAE,eAAe,MAAM,EAAE,EAAE,kBAAe,WA0BzF,CAAC"}
1
+ {"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../../src/utils/string.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,GAAI,iBAAiB,MAAM,KAAG,MAE5D,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,iBAAiB,MAAM,KAAG,MAE5D,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,KAAK,OAAO,KAAG,MAE9C,CAAC;AAEF,eAAO,MAAM,gBAAgB,8IAC0G,CAAC;AAGxI,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,OAE7C,CAAC;AAQF,eAAO,MAAM,iBAAiB,iEAAiE,CAAC;AAEhG,eAAO,MAAM,MAAM,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,MAEhD,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,EAAE,eAAe,MAAM,EAAE,EAAE,kBAAe,WA0BzF,CAAC"}
@@ -12,6 +12,17 @@ const EmailRegexComplete = new RegExp(`^${EmailRegexString}$`);
12
12
  export const validateEmail = (email) => {
13
13
  return EmailRegexComplete.test(email);
14
14
  };
15
+ // Matches canonical RFC 4122-style UUIDs (8-4-4-4-12 hex, case-insensitive).
16
+ // Intentionally strict: we want to reject inputs that PostgreSQL would later
17
+ // reject with `invalid input syntax for type uuid`, surfacing the boundary as
18
+ // a 4xx in our own validators instead of a 500 from the DB driver. Do NOT
19
+ // loosen this to a partial match or a "looks UUID-ish" regex — the strictness
20
+ // is the contract.
21
+ export const UUID_REGEX_STRING = '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}';
22
+ const UuidRegexComplete = new RegExp(`^${UUID_REGEX_STRING}$`, 'i');
23
+ export const isUuid = (value) => {
24
+ return typeof value === 'string' && UuidRegexComplete.test(value);
25
+ };
15
26
  export const getNextEntityName = (prefix, existingNames, separator = '_') => {
16
27
  const cleanName = (name) => {
17
28
  return (name
@@ -1 +1 @@
1
- {"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/utils/string.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,eAAuB,EAAU,EAAE;IACpE,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AAChH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,eAAuB,EAAU,EAAE;IACpE,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACrG,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAY,EAAU,EAAE;IACtD,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAC3B,qIAAqI,CAAC;AAExI,MAAM,kBAAkB,GAAG,IAAI,MAAM,CAAC,IAAI,gBAAgB,GAAG,CAAC,CAAC;AAC/D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAa,EAAW,EAAE;IACtD,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAE,aAAuB,EAAE,SAAS,GAAG,GAAG,EAAE,EAAE;IAC5F,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE;QACjC,OAAO,CACL,IAAI;YACF,6CAA6C;aAC5C,OAAO,CAAC,eAAe,EAAE,SAAS,CAAC;aACnC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;aAC3B,OAAO,CAAC,IAAI,MAAM,CAAC,GAAG,SAAS,GAAG,EAAE,GAAG,CAAC,EAAE,SAAS,CAAC,CACxD,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,eAAe,SAAS,CAAC,CAAC;IACvD,MAAM,WAAW,GAAa,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACtD,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAClC,MAAM,GAAG,GAAG,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7E,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACrC,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC,CAAa,CAAC;IAEf,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnD,OAAO,GAAG,eAAe,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC;AAC9C,CAAC,CAAC"}
1
+ {"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/utils/string.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { describe, test, expect } from 'vitest';
2
- import { camelCaseToDisplay, getNextEntityName, validateEmail } from './string.js';
2
+ import { camelCaseToDisplay, getNextEntityName, isUuid, validateEmail } from './string.js';
3
3
  describe('camel case to display', () => {
4
4
  test('can convert camel case to display', () => {
5
5
  expect(camelCaseToDisplay('testCamelCase')).toBe('Test Camel Case');
@@ -15,6 +15,34 @@ describe('validate email', () => {
15
15
  expect(validateEmail('some<>body@domain.com')).toBe(false);
16
16
  });
17
17
  });
18
+ describe('isUuid', () => {
19
+ test('accepts canonical RFC 4122-style UUIDs (case-insensitive)', () => {
20
+ expect(isUuid('a1b2c3d4-e5f6-7890-abcd-1234567890ab')).toBe(true);
21
+ expect(isUuid('A1B2C3D4-E5F6-7890-ABCD-1234567890AB')).toBe(true);
22
+ expect(isUuid('00000000-0000-0000-0000-000000000000')).toBe(true);
23
+ });
24
+ test('rejects non-UUID strings without throwing', () => {
25
+ // Strictness is the contract — these are the shapes PostgreSQL would
26
+ // reject with `invalid input syntax for type uuid` if forwarded to a
27
+ // UUID column.
28
+ expect(isUuid('not-a-uuid')).toBe(false);
29
+ expect(isUuid('unknown agent id')).toBe(false);
30
+ // Near-miss: first segment is 7 chars instead of 8.
31
+ expect(isUuid('1234567-1234-1234-1234-123456789abc')).toBe(false);
32
+ // Too many segments.
33
+ expect(isUuid('a1b2c3d4-e5f6-7890-abcd-1234567890ab-extra')).toBe(false);
34
+ // Non-hex character.
35
+ expect(isUuid('a1b2c3d4-e5f6-7890-abcd-1234567890zz')).toBe(false);
36
+ // Empty string.
37
+ expect(isUuid('')).toBe(false);
38
+ });
39
+ test('rejects non-string inputs', () => {
40
+ expect(isUuid(null)).toBe(false);
41
+ expect(isUuid(undefined)).toBe(false);
42
+ expect(isUuid(123)).toBe(false);
43
+ expect(isUuid({})).toBe(false);
44
+ });
45
+ });
18
46
  describe('getNextEntityName', () => {
19
47
  test('get next name with underscore', async () => {
20
48
  expect(getNextEntityName('Tabs_', ['Tabs_1', 'Tabs_2', 'Tabs_3'])).toEqual('Tabs_4');
@@ -1 +1 @@
1
- {"version":3,"file":"string.test.js","sourceRoot":"","sources":["../../src/utils/string.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"string.test.js","sourceRoot":"","sources":["../../src/utils/string.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@superblocksteam/shared",
3
- "version": "0.9589.6",
3
+ "version": "0.9590.0",
4
4
  "description": "Superblocks Shared Resources",
5
5
  "license": "Superblocks Community Software License",
6
6
  "repository": "https://github.com/superblocksteam/shared.git",
@@ -23,7 +23,7 @@
23
23
  "@lezer/common": "0.16.1",
24
24
  "@lezer/lr": "0.16.3",
25
25
  "@opentelemetry/api": "^1.9.1",
26
- "@opentelemetry/semantic-conventions": "^1.28.0",
26
+ "@opentelemetry/semantic-conventions": "^1.36.0",
27
27
  "@superblocksteam/sabs-types": "0.154.0",
28
28
  "@superblocksteam/types": "1.351.0",
29
29
  "@types/esprima": "4.0.3",
@@ -23,7 +23,13 @@ export type LifecycleErrorCode =
23
23
  | 'policy_blocked'
24
24
  | 'credential_resolution_failed'
25
25
  | 'terraform_failed'
26
- | 'callback_failed';
26
+ | 'migration_failed'
27
+ | 'callback_failed'
28
+ // Server-side classification for a terminal callback that arrived for a
29
+ // request whose desiredSpecHash no longer matches the binding (binding has
30
+ // moved to a newer spec). The callback's metadata/state is discarded and
31
+ // the request is cancelled rather than applied to the current binding.
32
+ | 'stale_dispatch';
27
33
 
28
34
  export const CREDENTIAL_RESOLVERS = ['opa_local', 'aws_secrets_manager', 'gcp_secret_manager', 'vault', 'kubernetes_secret'] as const;
29
35
  export type CredentialResolver = (typeof CREDENTIAL_RESOLVERS)[number];
@@ -34,6 +40,22 @@ export type CredentialRef = {
34
40
  field?: string;
35
41
  };
36
42
 
43
+ export type CredentialResolverConfig = {
44
+ type: CredentialResolver;
45
+ config: Record<string, unknown>;
46
+ };
47
+
48
+ // Reference to a versioned Terraform module that the lifecycle worker should
49
+ // invoke for one operation in this profile. `baseInputs` are profile-level
50
+ // inputs the org admin sets once (AWS account/region/VPC/subnets/KMS/...);
51
+ // the planner merges these with binding-derived inputs (binding_key,
52
+ // requirement spec, credential refs) when it builds a dispatch payload.
53
+ export type TerraformModuleRef = {
54
+ source: string;
55
+ version: string;
56
+ baseInputs: Record<string, unknown>;
57
+ };
58
+
37
59
  export type DatabaseRequirement = {
38
60
  logicalName: string;
39
61
  engine: DatabaseEngine;
@@ -63,6 +85,22 @@ export type EnvironmentProfile = {
63
85
  supportedOperations: LifecycleOperation[];
64
86
  supportedEngines: DatabaseEngine[];
65
87
  backend: DatabaseBackend;
88
+ // V1 stop-gap. Picks the Terraform module the lifecycle worker invokes
89
+ // per operation. `Partial` because not every operation is Terraform-backed
90
+ // in V1 — `migrate_schema` is served by the native Go runner inside the
91
+ // worker (ENG-3415); admins leave it unset and the dispatcher skips
92
+ // emitting a Terraform dispatch for it.
93
+ //
94
+ // TODO(ENG-3456): collapse into per-operation backends when the
95
+ // shared-vs-isolated admin config lands. Each operation will then carry
96
+ // its own discriminated kind ('terraform' | 'native-migration-runner'),
97
+ // with the module reference and Terraform backend config nested under
98
+ // kind: 'terraform'. The wire protocol picks up a matching discriminant.
99
+ moduleSelectors: Partial<Record<LifecycleOperation, TerraformModuleRef>>;
100
+ // Where the worker resolves and writes credential refs. Scoped per profile
101
+ // because dev/prod profiles may use different resolvers (e.g. opa_local
102
+ // for dev, aws_secrets_manager for prod).
103
+ credentialResolver: CredentialResolverConfig;
66
104
  };
67
105
 
68
106
  type DatabaseBindingBase = {
@@ -123,6 +161,74 @@ export type TerraformModuleOutput = {
123
161
  resourceKey: string;
124
162
  };
125
163
 
164
+ // Resolved per-dispatch Terraform module reference. Mirrors the Go worker's
165
+ // `pkg/databaselifecycle.TerraformModule` JSON shape — `MaterializeJob`
166
+ // writes these straight into `terraform.tfvars.json` and the generated root
167
+ // `main.tf` module block.
168
+ export type TerraformModuleDispatch = {
169
+ source: string;
170
+ version: string;
171
+ inputs: Record<string, unknown>;
172
+ };
173
+
174
+ // Backend config the worker writes into `backend.tfbackend` and passes to
175
+ // `terraform init -backend-config=...`. Derived from the profile's
176
+ // `backend.stateBackend` plus the per-binding state key. `stateBackend` is
177
+ // the discriminant the worker uses to emit the right HCL
178
+ // `terraform { backend "<stateBackend>" {} }` block — same name as on the
179
+ // profile side. `remoteState` and `locking` pass through unchanged. The
180
+ // worker doesn't see `provisioner`/`provider` — those are server-side
181
+ // categorical fields, not backend args.
182
+ export type TerraformBackendDispatch = {
183
+ stateBackend: TerraformDatabaseBackend['stateBackend'];
184
+ remoteState: boolean;
185
+ locking: boolean;
186
+ key: string;
187
+ };
188
+
189
+ // One forward-only SQL migration the server attaches to a dispatch
190
+ // payload so the lifecycle worker's migration runner can apply it after
191
+ // `tofu apply` succeeds. `version` is the sort key + the primary key in
192
+ // the worker's in-DB `superblocks_schema_migrations` ledger; `filename`
193
+ // is recorded for diagnostics; `sql` is the raw multi-statement SQL.
194
+ // Matches `orchestrator/pkg/databaselifecycle/migrations.Migration`.
195
+ export type LifecycleMigration = {
196
+ version: string;
197
+ filename: string;
198
+ sql: string;
199
+ };
200
+
201
+ // Canonical wire payload for a lifecycle dispatch sent from the server to a
202
+ // lifecycle worker. The worker's `DispatchPayload` struct in
203
+ // orchestrator/pkg/databaselifecycle/dispatch.go decodes this JSON shape;
204
+ // keys and order here are intentional. Replaces three duplicate definitions
205
+ // previously living in dispatchQueue.ts / devPersistence.ts / planner.
206
+ //
207
+ // `migrations` is present iff the operation should consider migration
208
+ // state — `ensure_dev_database` / `ensure_prod_database` / `migrate_schema`
209
+ // dispatches carry an array (possibly empty); `retire_database` omits it.
210
+ // An omitted slice keeps the worker's `MigrationState` at the default
211
+ // "pending"; an empty slice means "vacuous truth, mark migrated"; a
212
+ // non-empty slice triggers the runner.
213
+ export type LifecycleDispatchPayload = {
214
+ agentId: string;
215
+ bindingKey: string;
216
+ connectionMetadata?: Record<string, string | number | boolean>;
217
+ desiredSpec: DatabaseRequirement;
218
+ desiredSpecHash: string;
219
+ migrations?: LifecycleMigration[];
220
+ operation: LifecycleOperation;
221
+ profileId: string;
222
+ requestId: string;
223
+ resourceKey: string;
224
+ runtimeCredentialRefs?: Record<string, CredentialRef>;
225
+ // Present for Terraform-backed operations. Omitted for native migration
226
+ // dispatches, where the worker skips Terraform materialization and runs the
227
+ // migration runner directly.
228
+ terraformBackend?: TerraformBackendDispatch;
229
+ terraformModule?: TerraformModuleDispatch;
230
+ };
231
+
126
232
  export function computeRequirementKey(requirement: Pick<DatabaseRequirement, 'logicalName' | 'engine'>): string {
127
233
  return `${slugify(requirement.logicalName)}~${encodeURIComponent(requirement.logicalName)}:${requirement.engine}`;
128
234
  }
@@ -164,6 +270,55 @@ export async function computeDesiredSpecHash(requirement: DatabaseRequirement):
164
270
  return await sha256Base64(JSON.stringify(canonicalize(requirement)));
165
271
  }
166
272
 
273
+ // resource_key identifies the physical resource a binding maps to in
274
+ // customer infrastructure, and is the unit of locking inside the lifecycle
275
+ // worker. Distinct from binding_key (product identity in the control plane)
276
+ // because two different profiles could plausibly target the same logical
277
+ // resource — the planner uses profileId here so a profile swap forces a
278
+ // fresh resource. Shape mirrors planning doc §15.
279
+ export function computeResourceKey(input: {
280
+ organizationId: string;
281
+ profileId: string;
282
+ applicationId: string;
283
+ requirementKey: string;
284
+ environmentClass: EnvironmentClass;
285
+ environmentName: string;
286
+ actorScope?: string;
287
+ }): string {
288
+ return [
289
+ input.organizationId,
290
+ input.profileId,
291
+ input.applicationId,
292
+ input.requirementKey,
293
+ input.environmentClass,
294
+ `${slugify(input.environmentName)}~${encodeURIComponent(input.environmentName)}`,
295
+ input.actorScope ?? 'default'
296
+ ].join('/');
297
+ }
298
+
299
+ // Per-binding Terraform state path inside the configured backend. Used to
300
+ // generate the `backend.tfbackend` config that the worker passes to
301
+ // `terraform init -backend-config=...`. Planning doc §9.4.
302
+ export function computeTerraformStateKey(input: {
303
+ organizationId: string;
304
+ applicationId: string;
305
+ requirementKey: string;
306
+ environmentClass: EnvironmentClass;
307
+ environmentName: string;
308
+ actorScope?: string;
309
+ }): string {
310
+ return [
311
+ 'superblocks/byo-db',
312
+ input.environmentClass,
313
+ input.organizationId,
314
+ input.applicationId,
315
+ input.requirementKey,
316
+ `${slugify(input.environmentName)}~${encodeURIComponent(input.environmentName)}`,
317
+ input.actorScope ?? 'default',
318
+ 'terraform.tfstate'
319
+ ].join('/');
320
+ }
321
+
167
322
  export function isTerminalLifecycleState(state: LifecycleState): state is LifecycleTerminalState {
168
323
  return (LIFECYCLE_TERMINAL_STATES as readonly string[]).includes(state);
169
324
  }
@@ -604,6 +604,11 @@ export type ApplicationHashChangeSource =
604
604
  | 'requestedFilesSync'
605
605
  | 'cli:sdk'
606
606
  | 'cli:git-sync'
607
+ // Brownfield npm private-registry migration (APPS-4195, historical).
608
+ // Emitted by the now-removed background install/upload path in the
609
+ // dev-server SDK; retained as a known ApplicationHashChangeSource so
610
+ // existing audit records still parse. Mapped to action='none' (no commit).
611
+ | 'cli:private-registry-migration'
607
612
  | 'initialSync'
608
613
  // Atomic V2 -> V3 template migration: the vite dev server performs the
609
614
  // deterministic folder restructure and calls setApplicationHash with this
@@ -235,7 +235,14 @@ export const AUDIT_EVENT_TYPE_CATALOG: AuditEventTypeEntry[] = [
235
235
  category_uid: OCSFCategoryUid.APPLICATION_ACTIVITY,
236
236
  category_name: 'APPLICATION_ACTIVITY',
237
237
  resource_type: 'Organization',
238
- operations: ['organization.settings.update', 'organization.update']
238
+ operations: [
239
+ 'organization.npm_allow_install_scripts_changed',
240
+ 'organization.npm_registry.create',
241
+ 'organization.npm_registry.delete',
242
+ 'organization.npm_registry.update',
243
+ 'organization.settings.update',
244
+ 'organization.update'
245
+ ]
239
246
  },
240
247
  {
241
248
  class_uid: OCSFClassUid.ENTITY_MANAGEMENT,
@@ -0,0 +1,161 @@
1
+ import { describe, expect, it } from 'vitest';
2
+
3
+ import { FormComponentType, getDisplayOnlyFieldNames } from './form.js';
4
+ import type { FormTemplate } from './form.js';
5
+
6
+ describe('getDisplayOnlyFieldNames', () => {
7
+ it('returns ALERT field names', () => {
8
+ const template: FormTemplate = {
9
+ sections: [
10
+ {
11
+ name: 'auth',
12
+ items: [
13
+ {
14
+ name: 'HTTPBasicAlert',
15
+ label: '',
16
+ startVersion: '1',
17
+ componentType: FormComponentType.ALERT,
18
+ messageTemplate: 'some info'
19
+ }
20
+ ]
21
+ }
22
+ ]
23
+ };
24
+ expect(getDisplayOnlyFieldNames(template)).toEqual(new Set(['HTTPBasicAlert']));
25
+ });
26
+
27
+ it('returns BUTTON field names', () => {
28
+ const template: FormTemplate = {
29
+ sections: [
30
+ {
31
+ name: 'authButtons',
32
+ items: [
33
+ {
34
+ rowItems: [
35
+ {
36
+ name: 'oauth-connect-button',
37
+ label: 'Connect',
38
+ startVersion: '1',
39
+ componentType: FormComponentType.BUTTON,
40
+ buttonType: 'connectOAuth'
41
+ },
42
+ {
43
+ name: 'oauth-revoke-shared-tokens-button',
44
+ label: 'Revoke',
45
+ startVersion: '1',
46
+ componentType: FormComponentType.BUTTON,
47
+ buttonType: 'revokeOAuthTokens'
48
+ }
49
+ ]
50
+ }
51
+ ]
52
+ }
53
+ ]
54
+ };
55
+ expect(getDisplayOnlyFieldNames(template)).toEqual(new Set(['oauth-connect-button', 'oauth-revoke-shared-tokens-button']));
56
+ });
57
+
58
+ it('returns disabled + immutable INPUT_TEXT field names', () => {
59
+ const template: FormTemplate = {
60
+ sections: [
61
+ {
62
+ name: 'auth',
63
+ items: [
64
+ {
65
+ name: 'oauth-callback-alert',
66
+ label: 'Callback URL',
67
+ startVersion: '1',
68
+ componentType: FormComponentType.INPUT_TEXT,
69
+ disabled: true,
70
+ immutable: true,
71
+ initialValue: 'https://example.com/oauth/callback'
72
+ }
73
+ ]
74
+ }
75
+ ]
76
+ };
77
+ expect(getDisplayOnlyFieldNames(template)).toEqual(new Set(['oauth-callback-alert']));
78
+ });
79
+
80
+ it('does not include regular INPUT_TEXT fields', () => {
81
+ const template: FormTemplate = {
82
+ sections: [
83
+ {
84
+ name: 'main',
85
+ items: [
86
+ {
87
+ name: 'path',
88
+ label: 'URL',
89
+ startVersion: '1',
90
+ componentType: FormComponentType.INPUT_TEXT
91
+ }
92
+ ]
93
+ }
94
+ ]
95
+ };
96
+ expect(getDisplayOnlyFieldNames(template).size).toBe(0);
97
+ });
98
+
99
+ it('does not include disabled-only fields without immutable', () => {
100
+ const template: FormTemplate = {
101
+ sections: [
102
+ {
103
+ name: 'main',
104
+ items: [
105
+ {
106
+ name: 'path',
107
+ label: 'URL',
108
+ startVersion: '1',
109
+ componentType: FormComponentType.INPUT_TEXT,
110
+ disabled: true
111
+ }
112
+ ]
113
+ }
114
+ ]
115
+ };
116
+ expect(getDisplayOnlyFieldNames(template).size).toBe(0);
117
+ });
118
+
119
+ it('handles mixed sections with normal and display-only fields', () => {
120
+ const template: FormTemplate = {
121
+ sections: [
122
+ {
123
+ name: 'main',
124
+ items: [
125
+ {
126
+ name: 'path',
127
+ label: 'URL',
128
+ startVersion: '1',
129
+ componentType: FormComponentType.INPUT_TEXT
130
+ },
131
+ {
132
+ name: 'OAuth2PasswordAlert',
133
+ label: '',
134
+ startVersion: '1',
135
+ componentType: FormComponentType.ALERT
136
+ }
137
+ ]
138
+ },
139
+ {
140
+ name: 'authButtons',
141
+ items: [
142
+ {
143
+ rowItems: [
144
+ {
145
+ name: 'oauth-connect-button',
146
+ label: 'Connect',
147
+ startVersion: '1',
148
+ componentType: FormComponentType.BUTTON,
149
+ buttonType: 'connectOAuth'
150
+ }
151
+ ]
152
+ }
153
+ ]
154
+ }
155
+ ]
156
+ };
157
+ const result = getDisplayOnlyFieldNames(template);
158
+ expect(result).toEqual(new Set(['OAuth2PasswordAlert', 'oauth-connect-button']));
159
+ expect(result.has('path')).toBe(false);
160
+ });
161
+ });
@@ -439,6 +439,28 @@ interface CheckboxFormItem extends BaseFormItem {
439
439
  validateReduxPath?: ValidateReduxPath;
440
440
  }
441
441
 
442
+ const DISPLAY_ONLY_COMPONENT_TYPES: ReadonlySet<FormComponentType> = new Set([FormComponentType.ALERT, FormComponentType.BUTTON]);
443
+
444
+ /**
445
+ * Returns the set of field names from a form template that are display-only
446
+ * and should not be persisted. This includes ALERT and BUTTON components
447
+ * (which render informational banners or action triggers) and disabled
448
+ * immutable fields (e.g. the OAuth callback URL display).
449
+ */
450
+ export const getDisplayOnlyFieldNames = (template: FormTemplate): Set<string> => {
451
+ const names = new Set<string>();
452
+ for (const section of template.sections) {
453
+ for (const sectionItem of section.items) {
454
+ for (const item of getRowItemsFromSectionItem(sectionItem)) {
455
+ if (DISPLAY_ONLY_COMPONENT_TYPES.has(item.componentType) || (item.disabled && item.immutable)) {
456
+ names.add(item.name);
457
+ }
458
+ }
459
+ }
460
+ }
461
+ return names;
462
+ };
463
+
442
464
  export interface DropdownOption {
443
465
  key: string;
444
466
  value: string;
@@ -14,14 +14,39 @@ export type PolicyGateReadinessFindingSummary = {
14
14
  suppressed: number;
15
15
  };
16
16
 
17
+ export type PolicyGateReadinessFinding = {
18
+ blocking: boolean;
19
+ severity: 'critical' | 'high' | 'info' | 'low' | 'medium';
20
+ title: string;
21
+ };
22
+
23
+ export type PolicyGateScanPhaseName = 'built_asset' | 'dependency_audit' | 'source';
24
+
25
+ export type PolicyGateScanPhaseState = 'complete' | 'failed' | 'pending' | 'running' | 'skipped';
26
+
27
+ export type PolicyGateScanPhaseProgress = {
28
+ completedAt?: string;
29
+ durationMs?: number;
30
+ startedAt?: string;
31
+ state: PolicyGateScanPhaseState;
32
+ };
33
+
34
+ export type PolicyGateScanProgress = {
35
+ phases: Partial<Record<PolicyGateScanPhaseName, PolicyGateScanPhaseProgress>>;
36
+ requiredPhases: PolicyGateScanPhaseName[];
37
+ };
38
+
17
39
  export type PolicyGateReadinessItem = {
18
40
  actions: PolicyGateReadinessAction[];
41
+ displayName?: string;
42
+ findings?: PolicyGateReadinessFinding[];
19
43
  findingSummary: PolicyGateReadinessFindingSummary;
20
44
  itemId: string;
21
45
  itemType: 'security_agent' | 'security_scan';
22
46
  mode: 'advisory' | 'approval' | 'blocking' | 'report_only';
23
47
  policyId: string;
24
48
  policyVersionId: string;
49
+ progress?: PolicyGateScanProgress;
25
50
  reviewRunId?: string;
26
51
  staleReason?: string;
27
52
  status: PolicyGateReadinessItemStatus;
@@ -43,7 +68,7 @@ export type PolicyGateReadinessResponse = {
43
68
  target: PolicyGateReadinessTarget;
44
69
  };
45
70
 
46
- export type PolicyGateReadinessStatus = 'allowed' | 'approval_required' | 'blocked' | 'failed' | 'running' | 'stale';
71
+ export type PolicyGateReadinessStatus = 'allowed' | 'approval_required' | 'blocked' | 'disabled' | 'failed' | 'running' | 'stale';
47
72
 
48
73
  export type PolicyGateReadinessTarget = {
49
74
  applicationId: string;