vgscli 0.0.2 → 0.0.3

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/README.md CHANGED
@@ -31,7 +31,7 @@ export VGS_USERNAME=your_vgs_username
31
31
  export VGS_PASSWORD=your_vgs_password
32
32
 
33
33
  # Optional - Your VGS vault host URL
34
- export VGS_HOST=https://api.sandbox.verygoodsecurity.com
34
+ export VGS_HOST=https://api.sandbox.verygoodvault.com
35
35
  ```
36
36
 
37
37
  ## Usage
@@ -57,6 +57,32 @@ vgscli alias show --alias="my-alias"
57
57
  **Options:**
58
58
  - `--alias <alias>` - Alias name to show (required)
59
59
 
60
+ ### Delete Alias
61
+
62
+ Removes the token from the vault: it can no longer be revealed. Useful to simulate an
63
+ expired token (for example a CVV alias) against a sandbox vault.
64
+
65
+ ```bash
66
+ vgscli alias delete --alias="tok_sandbox_xxx" --verify
67
+ ```
68
+
69
+ **Options:**
70
+ - `--alias <alias>` - Alias to delete (required, there is no default)
71
+ - `--verify` - After deleting, check that the alias can no longer be revealed
72
+ - `--force` - Needed when `VGS_HOST` is not a sandbox host
73
+
74
+ Errors show the HTTP status and body of the VGS API (401 credentials, 403 permissions,
75
+ 404 unknown alias).
76
+
77
+ ### Makefile
78
+
79
+ ```bash
80
+ make vgsalias.show alias=tok_sandbox_xxx
81
+ make vgsalias.delete alias=tok_sandbox_xxx # deletes and verifies
82
+ make vgsalias.delete alias=tok_live_xxx force=1 # non-sandbox hosts
83
+ make vgsalias.expire alias=tok_sandbox_xxx # same, to simulate an expired CVV
84
+ ```
85
+
60
86
  ## Examples
61
87
 
62
88
  ```bash
@@ -6,6 +6,8 @@ interface VGSAliasCommandOptions {
6
6
  value?: string;
7
7
  alias?: string;
8
8
  classifiers?: string[];
9
+ force?: boolean;
10
+ verify?: boolean;
9
11
  }
10
12
  export declare class VGSAliasCommand extends CommandRunner {
11
13
  private readonly vgsAliasService;
@@ -19,5 +21,7 @@ export declare class VGSAliasCommand extends CommandRunner {
19
21
  parseStorage(val: string): string;
20
22
  parseClassifiers(val: string): string;
21
23
  parseAlias(val: string): string;
24
+ parseForce(): boolean;
25
+ parseVerify(): boolean;
22
26
  }
23
27
  export {};
@@ -33,7 +33,7 @@ let VGSAliasCommand = class VGSAliasCommand extends nest_commander_1.CommandRunn
33
33
  break;
34
34
  default:
35
35
  console.error(`Unknown action: ${action}`);
36
- console.log('Available actions: create, list, delete, show');
36
+ console.log('Available actions: create, delete, show');
37
37
  process.exit(1);
38
38
  }
39
39
  }
@@ -62,22 +62,27 @@ let VGSAliasCommand = class VGSAliasCommand extends nest_commander_1.CommandRunn
62
62
  }
63
63
  }
64
64
  async deleteAlias(options) {
65
- const alias = options?.alias || 'fiserv-tokenization';
65
+ const alias = options?.alias;
66
66
  if (!alias) {
67
- throw new Error('Alias name is required for deletion. Use --name option.');
67
+ throw new Error('Alias is required for deletion. Use --alias option.');
68
68
  }
69
- try {
70
- await this.vgsAliasService.deleteAlias(alias);
71
- console.log(`✅ Alias "${alias}" deleted successfully!`);
69
+ const host = this.vgsAliasService.host;
70
+ if (!host.includes('sandbox') && !options?.force) {
71
+ throw new Error(`Host ${host} does not look like a sandbox vault. Use --force to delete anyway.`);
72
72
  }
73
- catch (error) {
74
- throw new Error(`Failed to delete alias "${alias}": ${error.message}`);
73
+ await this.vgsAliasService.deleteAlias(alias);
74
+ if (options?.verify) {
75
+ const stillThere = await this.vgsAliasService.aliasExists(alias);
76
+ if (stillThere) {
77
+ throw new Error(`Alias "${alias}" can still be revealed after deleting it.`);
78
+ }
79
+ console.log(`🔎 Verified: alias "${alias}" can no longer be revealed.`);
75
80
  }
76
81
  }
77
82
  async showAlias(options) {
78
- const alias = options?.alias || 'fiserv-tokenization';
83
+ const alias = options?.alias;
79
84
  if (!alias) {
80
- throw new Error('Alias name is required. Use --alias option.');
85
+ throw new Error('Alias is required. Use --alias option.');
81
86
  }
82
87
  try {
83
88
  const aliasData = await this.vgsAliasService.getAlias(alias);
@@ -104,6 +109,12 @@ let VGSAliasCommand = class VGSAliasCommand extends nest_commander_1.CommandRunn
104
109
  parseAlias(val) {
105
110
  return val;
106
111
  }
112
+ parseForce() {
113
+ return true;
114
+ }
115
+ parseVerify() {
116
+ return true;
117
+ }
107
118
  };
108
119
  exports.VGSAliasCommand = VGSAliasCommand;
109
120
  __decorate([
@@ -151,13 +162,31 @@ __decorate([
151
162
  __metadata("design:paramtypes", [String]),
152
163
  __metadata("design:returntype", String)
153
164
  ], VGSAliasCommand.prototype, "parseAlias", null);
165
+ __decorate([
166
+ (0, nest_commander_1.Option)({
167
+ flags: '--force',
168
+ description: `Allow deleting on a host that is not a sandbox (default host: ${vgs_1.DEFAULT_VGS_HOST})`,
169
+ }),
170
+ __metadata("design:type", Function),
171
+ __metadata("design:paramtypes", []),
172
+ __metadata("design:returntype", Boolean)
173
+ ], VGSAliasCommand.prototype, "parseForce", null);
174
+ __decorate([
175
+ (0, nest_commander_1.Option)({
176
+ flags: '--verify',
177
+ description: 'After deleting, check that the alias can no longer be revealed',
178
+ }),
179
+ __metadata("design:type", Function),
180
+ __metadata("design:paramtypes", []),
181
+ __metadata("design:returntype", Boolean)
182
+ ], VGSAliasCommand.prototype, "parseVerify", null);
154
183
  exports.VGSAliasCommand = VGSAliasCommand = __decorate([
155
184
  (0, nest_commander_1.Command)({
156
185
  name: 'alias',
157
186
  description: 'Manage VGS aliases for tokenization',
158
187
  arguments: '[action]',
159
188
  argsDescription: {
160
- action: 'Action to perform: create, list, delete, show (default: create)',
189
+ action: 'Action to perform: create, delete, show (default: create)',
161
190
  },
162
191
  }),
163
192
  __metadata("design:paramtypes", [vgs_1.VGSAliasService])
@@ -1 +1 @@
1
- {"version":3,"file":"vgs-alias.command.js","sourceRoot":"","sources":["../../src/commands/vgs-alias.command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vgs-alias.command.js","sourceRoot":"","sources":["../../src/commands/vgs-alias.command.ts"],"names":[],"mappings":"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"}