@red-hat-developer-hub/e2e-test-utils 2.1.14 → 2.1.16

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 (79) hide show
  1. package/dist/deployment/rhdh/constants.d.ts +0 -1
  2. package/dist/deployment/rhdh/constants.d.ts.map +1 -1
  3. package/dist/deployment/rhdh/constants.js +0 -1
  4. package/dist/deployment/rhdh/deployment.d.ts.map +1 -1
  5. package/dist/deployment/rhdh/deployment.js +0 -3
  6. package/dist/secrets/bitwarden.d.ts +43 -0
  7. package/dist/secrets/bitwarden.d.ts.map +1 -1
  8. package/dist/secrets/bitwarden.js +465 -53
  9. package/dist/secrets/cli.d.ts +48 -1
  10. package/dist/secrets/cli.d.ts.map +1 -1
  11. package/dist/secrets/cli.js +455 -28
  12. package/dist/secrets/command.d.ts +7 -0
  13. package/dist/secrets/command.d.ts.map +1 -1
  14. package/dist/secrets/command.js +103 -26
  15. package/dist/secrets/config.d.ts +11 -1
  16. package/dist/secrets/config.d.ts.map +1 -1
  17. package/dist/secrets/config.js +32 -1
  18. package/dist/secrets/environment-name.d.ts +2 -0
  19. package/dist/secrets/environment-name.d.ts.map +1 -0
  20. package/dist/secrets/environment-name.js +4 -0
  21. package/dist/secrets/environment.d.ts +10 -0
  22. package/dist/secrets/environment.d.ts.map +1 -1
  23. package/dist/secrets/environment.js +35 -4
  24. package/dist/secrets/exec.d.ts +9 -1
  25. package/dist/secrets/exec.d.ts.map +1 -1
  26. package/dist/secrets/exec.js +318 -38
  27. package/dist/secrets/gsm-wrapper.d.ts +42 -0
  28. package/dist/secrets/gsm-wrapper.d.ts.map +1 -0
  29. package/dist/secrets/gsm-wrapper.js +238 -0
  30. package/dist/secrets/gsm.d.ts +33 -0
  31. package/dist/secrets/gsm.d.ts.map +1 -0
  32. package/dist/secrets/gsm.js +172 -0
  33. package/dist/secrets/index.d.ts +9 -4
  34. package/dist/secrets/index.d.ts.map +1 -1
  35. package/dist/secrets/index.js +7 -2
  36. package/dist/secrets/lock.d.ts +3 -0
  37. package/dist/secrets/lock.d.ts.map +1 -0
  38. package/dist/secrets/lock.js +28 -0
  39. package/dist/secrets/mutation.d.ts +71 -0
  40. package/dist/secrets/mutation.d.ts.map +1 -0
  41. package/dist/secrets/mutation.js +210 -0
  42. package/dist/secrets/secret-input.d.ts +17 -0
  43. package/dist/secrets/secret-input.d.ts.map +1 -0
  44. package/dist/secrets/secret-input.js +40 -0
  45. package/dist/secrets/stream.d.ts +9 -0
  46. package/dist/secrets/stream.d.ts.map +1 -0
  47. package/dist/secrets/stream.js +211 -0
  48. package/dist/secrets/temporary-secret.d.ts +13 -0
  49. package/dist/secrets/temporary-secret.d.ts.map +1 -0
  50. package/dist/secrets/temporary-secret.js +87 -0
  51. package/dist/secrets/tests/bitwarden.test.js +640 -0
  52. package/dist/secrets/tests/cli.integration.test.js +131 -3
  53. package/dist/secrets/tests/cli.test.js +281 -6
  54. package/dist/secrets/tests/command.test.d.ts +2 -0
  55. package/dist/secrets/tests/command.test.d.ts.map +1 -0
  56. package/dist/secrets/tests/command.test.js +39 -0
  57. package/dist/secrets/tests/config.test.js +20 -1
  58. package/dist/secrets/tests/environment.test.js +145 -3
  59. package/dist/secrets/tests/exec.test.js +469 -2
  60. package/dist/secrets/tests/gsm-wrapper.test.d.ts +2 -0
  61. package/dist/secrets/tests/gsm-wrapper.test.d.ts.map +1 -0
  62. package/dist/secrets/tests/gsm-wrapper.test.js +166 -0
  63. package/dist/secrets/tests/gsm.test.d.ts +2 -0
  64. package/dist/secrets/tests/gsm.test.d.ts.map +1 -0
  65. package/dist/secrets/tests/gsm.test.js +181 -0
  66. package/dist/secrets/tests/mutation.test.d.ts +2 -0
  67. package/dist/secrets/tests/mutation.test.d.ts.map +1 -0
  68. package/dist/secrets/tests/mutation.test.js +390 -0
  69. package/dist/secrets/tests/secret-input.test.d.ts +2 -0
  70. package/dist/secrets/tests/secret-input.test.d.ts.map +1 -0
  71. package/dist/secrets/tests/secret-input.test.js +71 -0
  72. package/dist/secrets/tests/stream.test.d.ts +2 -0
  73. package/dist/secrets/tests/stream.test.d.ts.map +1 -0
  74. package/dist/secrets/tests/stream.test.js +88 -0
  75. package/dist/secrets/tests/temporary-secret.test.d.ts +2 -0
  76. package/dist/secrets/tests/temporary-secret.test.d.ts.map +1 -0
  77. package/dist/secrets/tests/temporary-secret.test.js +76 -0
  78. package/package.json +1 -1
  79. package/dist/deployment/rhdh/config/new-frontend-system/secrets.yaml +0 -8
@@ -6,7 +6,6 @@ export declare const DEFAULT_CONFIG_PATHS: {
6
6
  dynamicPlugins: string;
7
7
  /** New frontend system (app-next): paths merged when the deployment uses NFS layers (explicit flag, `-app-next` namespace, or `USE_NEW_FRONTEND_SYSTEM`). */
8
8
  newFrontendSystem: {
9
- secrets: string;
10
9
  dynamicPlugins: string;
11
10
  valueFile: string;
12
11
  };
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/deployment/rhdh/constants.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAK1D,eAAO,MAAM,oBAAoB;;;;IAa/B,6JAA6J;;;;;;;;;;;;CA2B9J,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CACpC,YAAY,EACZ;IACE,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,YAAY,CAAC;CAC9B,CA0CF,CAAC;AAEF,eAAO,MAAM,SAAS,6BAA6B,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/deployment/rhdh/constants.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAK1D,eAAO,MAAM,oBAAoB;;;;IAa/B,6JAA6J;;;;;;;;;;;CAuB9J,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CACpC,YAAY,EACZ;IACE,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,YAAY,CAAC;CAC9B,CA0CF,CAAC;AAEF,eAAO,MAAM,SAAS,6BAA6B,CAAC"}
@@ -7,7 +7,6 @@ export const DEFAULT_CONFIG_PATHS = {
7
7
  dynamicPlugins: path.join(PACKAGE_ROOT, "dist/deployment/rhdh/config/common/dynamic-plugins.yaml"),
8
8
  /** New frontend system (app-next): paths merged when the deployment uses NFS layers (explicit flag, `-app-next` namespace, or `USE_NEW_FRONTEND_SYSTEM`). */
9
9
  newFrontendSystem: {
10
- secrets: path.join(PACKAGE_ROOT, "dist/deployment/rhdh/config/new-frontend-system/secrets.yaml"),
11
10
  dynamicPlugins: path.join(PACKAGE_ROOT, "dist/deployment/rhdh/config/new-frontend-system/dynamic-plugins.yaml"),
12
11
  valueFile: path.join(PACKAGE_ROOT, "dist/deployment/rhdh/config/new-frontend-system/value_file.yaml"),
13
12
  },
@@ -1 +1 @@
1
- {"version":3,"file":"deployment.d.ts","sourceRoot":"","sources":["../../../src/deployment/rhdh/deployment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAwB1E,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAGjB,MAAM,YAAY,CAAC;AAEpB,qBAAa,cAAc;IAClB,SAAS,yBAAgC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,gBAAgB,CAAC;gBAE9B,SAAS,EAAE,MAAM;IAKvB,MAAM,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YA0CpD,eAAe;YAmBf,aAAa;IA2B3B,uDAAuD;IACvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAE5B;IAEX;;;OAGG;YACW,iBAAiB;IAe/B;;OAEG;YACW,uBAAuB;IAgBrC;;;;;;;;OAQG;YACW,0BAA0B;YAsC1B,oBAAoB;YAWpB,eAAe;YAuEf,mBAAmB;IAmCjC,OAAO,KAAK,cAAc,GAIzB;IAEK,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAWrC;;;;OAIG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAOpC,cAAc,CAAC,OAAO,GAAE,MAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BpD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;YAIjB,iBAAiB;YASjB,oBAAoB;IAsClC;;;OAGG;YACW,0BAA0B;IAwCxC,OAAO,CAAC,sBAAsB;IA2CxB,SAAS,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAUrE,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,SAAS;CAMlB"}
1
+ {"version":3,"file":"deployment.d.ts","sourceRoot":"","sources":["../../../src/deployment/rhdh/deployment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAwB1E,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAGjB,MAAM,YAAY,CAAC;AAEpB,qBAAa,cAAc;IAClB,SAAS,yBAAgC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,gBAAgB,CAAC;gBAE9B,SAAS,EAAE,MAAM;IAKvB,MAAM,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YA0CpD,eAAe;YAmBf,aAAa;IAwB3B,uDAAuD;IACvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAE5B;IAEX;;;OAGG;YACW,iBAAiB;IAe/B;;OAEG;YACW,uBAAuB;IAgBrC;;;;;;;;OAQG;YACW,0BAA0B;YAsC1B,oBAAoB;YAWpB,eAAe;YAuEf,mBAAmB;IAmCjC,OAAO,KAAK,cAAc,GAIzB;IAEK,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAWrC;;;;OAIG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAOpC,cAAc,CAAC,OAAO,GAAE,MAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BpD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;YAIjB,iBAAiB;YASjB,oBAAoB;IAsClC;;;OAGG;YACW,0BAA0B;IAwCxC,OAAO,CAAC,sBAAsB;IA2CxB,SAAS,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAUrE,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,SAAS;CAMlB"}
@@ -65,9 +65,6 @@ export class RHDHDeployment {
65
65
  const secretsPaths = [
66
66
  DEFAULT_CONFIG_PATHS.secrets,
67
67
  authConfig.secrets,
68
- ...(this.deploymentConfig.useNewFrontendSystem
69
- ? [DEFAULT_CONFIG_PATHS.newFrontendSystem.secrets]
70
- : []),
71
68
  this.deploymentConfig.secrets,
72
69
  ];
73
70
  const secretsYaml = await mergeYamlFilesIfExists(secretsPaths);
@@ -16,19 +16,62 @@ export interface BitwardenAttachment {
16
16
  id: string;
17
17
  fileName: string;
18
18
  }
19
+ export type BitwardenSecretStorage = "note" | "attachment";
20
+ export interface BitwardenSecretItem {
21
+ id: string;
22
+ name: string;
23
+ value: string;
24
+ storage: BitwardenSecretStorage;
25
+ revisionDate: string;
26
+ raw: Record<string, unknown>;
27
+ attachments: readonly BitwardenAttachment[];
28
+ attachment?: BitwardenAttachment;
29
+ }
19
30
  export interface BitwardenClientOptions {
20
31
  command?: string;
21
32
  env?: NodeJS.ProcessEnv;
22
33
  runner?: BitwardenCommandRunner;
34
+ removeTemporaryDirectory?: (directory: string) => Promise<void>;
23
35
  }
24
36
  export declare class BitwardenClient {
25
37
  private readonly command;
26
38
  private readonly env;
27
39
  private readonly runner;
40
+ private readonly removeTemporaryDirectory;
41
+ private sessionCheck?;
42
+ private readonly collections;
43
+ private readonly itemCollections;
28
44
  constructor(options?: BitwardenClientOptions);
29
45
  read(collectionId: ReadableCollectionId, selectors: readonly ExpandedSecretSelector[]): Promise<BitwardenSecret[]>;
46
+ readItem(collectionId: ReadableCollectionId, name: string): Promise<BitwardenSecretItem>;
47
+ findItem(collectionId: ReadableCollectionId, name: string): Promise<BitwardenSecretItem | undefined>;
48
+ createItem(collectionId: ReadableCollectionId, name: string, value: string, storage: BitwardenSecretStorage): Promise<BitwardenSecretItem>;
49
+ deleteItem(item: BitwardenSecretItem): Promise<void>;
50
+ updateItem(item: BitwardenSecretItem, value: string, storage?: BitwardenSecretStorage): Promise<BitwardenSecretItem>;
30
51
  private resolveCollection;
52
+ private loadCollection;
31
53
  private readSelector;
54
+ private ensureSession;
55
+ private checkSession;
56
+ private readItemById;
57
+ private parseItem;
58
+ private refreshItem;
59
+ private refreshItemById;
60
+ private findItemInCollection;
61
+ private collectionForItem;
62
+ private deleteItemById;
63
+ private itemPayload;
64
+ private updatedItemPayload;
65
+ private encodeItem;
66
+ private updateAttachment;
67
+ private convertNoteToAttachment;
68
+ private removeUploadedAttachment;
69
+ private convertAttachmentToNote;
70
+ private restoreNote;
71
+ private restoreAttachment;
72
+ private readAttachmentMetadata;
73
+ private editItem;
74
+ private createAttachment;
32
75
  private runOrThrow;
33
76
  }
34
77
  //# sourceMappingURL=bitwarden.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bitwarden.d.ts","sourceRoot":"","sources":["../../src/secrets/bitwarden.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EAC1B,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,sBAAsB;IACrC,CACE,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,CAAC,EAAE;QACR,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;QACxB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GACA,OAAO,CAAC,aAAa,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,sBAAsB,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;CAClB;AAQD,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE,sBAAsB,CAAC;CACjC;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAoB;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;gBAEpC,OAAO,GAAE,sBAA2B;IAM1C,IAAI,CACR,YAAY,EAAE,oBAAoB,EAClC,SAAS,EAAE,SAAS,sBAAsB,EAAE,GAC3C,OAAO,CAAC,eAAe,EAAE,CAAC;YA4Cf,iBAAiB;YA0CjB,YAAY;YA0HZ,UAAU;CAazB"}
1
+ {"version":3,"file":"bitwarden.d.ts","sourceRoot":"","sources":["../../src/secrets/bitwarden.ts"],"names":[],"mappings":"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"}