@activepieces/piece-hashi-corp-vault 0.0.1
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 +7 -0
- package/package.json +27 -0
- package/src/index.d.ts +20 -0
- package/src/index.js +186 -0
- package/src/index.js.map +1 -0
- package/src/lib/actions/delete-secret.d.ts +13 -0
- package/src/lib/actions/delete-secret.js +63 -0
- package/src/lib/actions/delete-secret.js.map +1 -0
- package/src/lib/actions/list-secrets.d.ts +13 -0
- package/src/lib/actions/list-secrets.js +65 -0
- package/src/lib/actions/list-secrets.js.map +1 -0
- package/src/lib/actions/read-secret.d.ts +14 -0
- package/src/lib/actions/read-secret.js +85 -0
- package/src/lib/actions/read-secret.js.map +1 -0
- package/src/lib/actions/write-secret.d.ts +14 -0
- package/src/lib/actions/write-secret.js +64 -0
- package/src/lib/actions/write-secret.js.map +1 -0
- package/src/lib/common/index.d.ts +11 -0
- package/src/lib/common/index.js +76 -0
- package/src/lib/common/index.js.map +1 -0
package/README.md
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@activepieces/piece-hashi-corp-vault",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"type": "commonjs",
|
|
5
|
+
"main": "./src/index.js",
|
|
6
|
+
"types": "./src/index.d.ts",
|
|
7
|
+
"dependencies": {
|
|
8
|
+
"@sinclair/typebox": "0.34.11",
|
|
9
|
+
"ai": "5.0.104",
|
|
10
|
+
"axios": "1.13.1",
|
|
11
|
+
"axios-retry": "4.4.1",
|
|
12
|
+
"deepmerge-ts": "7.1.0",
|
|
13
|
+
"form-data": "4.0.4",
|
|
14
|
+
"mime-types": "2.1.35",
|
|
15
|
+
"nanoid": "3.3.8",
|
|
16
|
+
"semver": "7.6.0",
|
|
17
|
+
"socket.io-client": "4.8.1",
|
|
18
|
+
"tslib": "^2.3.0",
|
|
19
|
+
"zod": "4.1.13",
|
|
20
|
+
"@activepieces/pieces-common": "0.11.1",
|
|
21
|
+
"@activepieces/pieces-framework": "0.23.0",
|
|
22
|
+
"@activepieces/shared": "0.30.4"
|
|
23
|
+
},
|
|
24
|
+
"resolutions": {
|
|
25
|
+
"rollup": "npm:@rollup/wasm-node"
|
|
26
|
+
}
|
|
27
|
+
}
|
package/src/index.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare const hashiCorpVaultAuth: import("@activepieces/pieces-framework").CustomAuthProperty<{
|
|
2
|
+
url: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
3
|
+
authMethod: import("@activepieces/pieces-framework").StaticDropdownProperty<string, true>;
|
|
4
|
+
token: import("@activepieces/pieces-framework").SecretTextProperty<false>;
|
|
5
|
+
roleId: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
6
|
+
secretId: import("@activepieces/pieces-framework").SecretTextProperty<false>;
|
|
7
|
+
appRolePath: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
8
|
+
namespace: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
9
|
+
apiVersion: import("@activepieces/pieces-framework").StaticDropdownProperty<string, true>;
|
|
10
|
+
}>;
|
|
11
|
+
export declare const hashiCorpVault: import("@activepieces/pieces-framework").Piece<import("@activepieces/pieces-framework").CustomAuthProperty<{
|
|
12
|
+
url: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
13
|
+
authMethod: import("@activepieces/pieces-framework").StaticDropdownProperty<string, true>;
|
|
14
|
+
token: import("@activepieces/pieces-framework").SecretTextProperty<false>;
|
|
15
|
+
roleId: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
16
|
+
secretId: import("@activepieces/pieces-framework").SecretTextProperty<false>;
|
|
17
|
+
appRolePath: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
18
|
+
namespace: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
19
|
+
apiVersion: import("@activepieces/pieces-framework").StaticDropdownProperty<string, true>;
|
|
20
|
+
}>>;
|
package/src/index.js
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hashiCorpVault = exports.hashiCorpVaultAuth = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const pieces_framework_1 = require("@activepieces/pieces-framework");
|
|
6
|
+
const shared_1 = require("@activepieces/shared");
|
|
7
|
+
const pieces_common_1 = require("@activepieces/pieces-common");
|
|
8
|
+
const read_secret_1 = require("./lib/actions/read-secret");
|
|
9
|
+
const write_secret_1 = require("./lib/actions/write-secret");
|
|
10
|
+
const delete_secret_1 = require("./lib/actions/delete-secret");
|
|
11
|
+
const list_secrets_1 = require("./lib/actions/list-secrets");
|
|
12
|
+
const markdownDescription = `
|
|
13
|
+
Connect to HashiCorp Vault to securely manage secrets.
|
|
14
|
+
|
|
15
|
+
**Authentication Methods:**
|
|
16
|
+
- **Token**: Use a Vault token directly
|
|
17
|
+
- **AppRole**: Use Role ID and Secret ID for machine authentication
|
|
18
|
+
`;
|
|
19
|
+
exports.hashiCorpVaultAuth = pieces_framework_1.PieceAuth.CustomAuth({
|
|
20
|
+
description: markdownDescription,
|
|
21
|
+
props: {
|
|
22
|
+
url: pieces_framework_1.Property.ShortText({
|
|
23
|
+
displayName: 'Vault URL',
|
|
24
|
+
description: 'The URL of your HashiCorp Vault instance (e.g., https://vault.example.com:8200)',
|
|
25
|
+
required: true,
|
|
26
|
+
}),
|
|
27
|
+
authMethod: pieces_framework_1.Property.StaticDropdown({
|
|
28
|
+
displayName: 'Authentication Method',
|
|
29
|
+
description: 'Choose how to authenticate with Vault',
|
|
30
|
+
required: true,
|
|
31
|
+
defaultValue: 'token',
|
|
32
|
+
options: {
|
|
33
|
+
options: [
|
|
34
|
+
{ label: 'Token', value: 'token' },
|
|
35
|
+
{ label: 'AppRole', value: 'appRole' },
|
|
36
|
+
],
|
|
37
|
+
},
|
|
38
|
+
}),
|
|
39
|
+
token: pieces_framework_1.PieceAuth.SecretText({
|
|
40
|
+
displayName: 'Vault Token',
|
|
41
|
+
description: 'Your Vault authentication token',
|
|
42
|
+
required: false,
|
|
43
|
+
}),
|
|
44
|
+
roleId: pieces_framework_1.Property.ShortText({
|
|
45
|
+
displayName: 'Role ID',
|
|
46
|
+
description: 'The Role ID for AppRole authentication',
|
|
47
|
+
required: false,
|
|
48
|
+
}),
|
|
49
|
+
secretId: pieces_framework_1.PieceAuth.SecretText({
|
|
50
|
+
displayName: 'Secret ID',
|
|
51
|
+
description: 'The Secret ID for AppRole authentication',
|
|
52
|
+
required: false,
|
|
53
|
+
}),
|
|
54
|
+
appRolePath: pieces_framework_1.Property.ShortText({
|
|
55
|
+
displayName: 'AppRole Mount Path',
|
|
56
|
+
description: 'The mount path of the AppRole auth method',
|
|
57
|
+
required: false,
|
|
58
|
+
defaultValue: 'approle',
|
|
59
|
+
}),
|
|
60
|
+
namespace: pieces_framework_1.Property.ShortText({
|
|
61
|
+
displayName: 'Namespace',
|
|
62
|
+
description: 'Vault namespace (Enterprise feature, leave empty if not using)',
|
|
63
|
+
required: false,
|
|
64
|
+
}),
|
|
65
|
+
apiVersion: pieces_framework_1.Property.StaticDropdown({
|
|
66
|
+
displayName: 'KV Secrets Engine Version',
|
|
67
|
+
description: 'The version of the KV secrets engine',
|
|
68
|
+
required: true,
|
|
69
|
+
defaultValue: 'v2',
|
|
70
|
+
options: {
|
|
71
|
+
options: [
|
|
72
|
+
{ label: 'Version 1 (KV v1)', value: 'v1' },
|
|
73
|
+
{ label: 'Version 2 (KV v2)', value: 'v2' },
|
|
74
|
+
],
|
|
75
|
+
},
|
|
76
|
+
}),
|
|
77
|
+
},
|
|
78
|
+
validate: (_a) => tslib_1.__awaiter(void 0, [_a], void 0, function* ({ auth }) {
|
|
79
|
+
var _b;
|
|
80
|
+
// Validate required fields based on auth method
|
|
81
|
+
if (auth.authMethod === 'token') {
|
|
82
|
+
if (!auth.token) {
|
|
83
|
+
return {
|
|
84
|
+
valid: false,
|
|
85
|
+
error: 'Vault Token is required when using Token authentication',
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else if (auth.authMethod === 'appRole') {
|
|
90
|
+
if (!auth.roleId || !auth.secretId) {
|
|
91
|
+
return {
|
|
92
|
+
valid: false,
|
|
93
|
+
error: 'Role ID and Secret ID are required when using AppRole authentication',
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
try {
|
|
98
|
+
const baseUrl = auth.url.replace(/\/$/, '');
|
|
99
|
+
let token;
|
|
100
|
+
if (auth.authMethod === 'token') {
|
|
101
|
+
if (!auth.token) {
|
|
102
|
+
throw new Error('Vault Token is required when using Token authentication');
|
|
103
|
+
}
|
|
104
|
+
token = auth.token;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
// Test AppRole login
|
|
108
|
+
const appRolePath = auth.appRolePath || 'approle';
|
|
109
|
+
const response = yield pieces_common_1.httpClient.sendRequest({
|
|
110
|
+
method: pieces_common_1.HttpMethod.POST,
|
|
111
|
+
url: `${baseUrl}/v1/auth/${appRolePath}/login`,
|
|
112
|
+
headers: Object.assign({ 'Content-Type': 'application/json' }, (auth.namespace && { 'X-Vault-Namespace': auth.namespace })),
|
|
113
|
+
body: {
|
|
114
|
+
role_id: auth.roleId,
|
|
115
|
+
secret_id: auth.secretId,
|
|
116
|
+
},
|
|
117
|
+
});
|
|
118
|
+
if (!((_b = response.body.auth) === null || _b === void 0 ? void 0 : _b.client_token)) {
|
|
119
|
+
return {
|
|
120
|
+
valid: false,
|
|
121
|
+
error: 'AppRole authentication failed: No token received',
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
token = response.body.auth.client_token;
|
|
125
|
+
}
|
|
126
|
+
// Verify token by checking token info
|
|
127
|
+
yield pieces_common_1.httpClient.sendRequest({
|
|
128
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
129
|
+
url: `${baseUrl}/v1/auth/token/lookup-self`,
|
|
130
|
+
headers: Object.assign({ 'X-Vault-Token': token }, (auth.namespace && { 'X-Vault-Namespace': auth.namespace })),
|
|
131
|
+
});
|
|
132
|
+
return { valid: true };
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
136
|
+
return {
|
|
137
|
+
valid: false,
|
|
138
|
+
error: `Connection failed: ${errorMessage}`,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
}),
|
|
142
|
+
required: true,
|
|
143
|
+
});
|
|
144
|
+
exports.hashiCorpVault = (0, pieces_framework_1.createPiece)({
|
|
145
|
+
displayName: 'HashiCorp Vault',
|
|
146
|
+
description: 'Securely manage secrets and sensitive data with HashiCorp Vault',
|
|
147
|
+
auth: exports.hashiCorpVaultAuth,
|
|
148
|
+
minimumSupportedRelease: '0.36.1',
|
|
149
|
+
logoUrl: 'https://cdn.activepieces.com/pieces/hashi-corp-vault.png',
|
|
150
|
+
authors: ['onyedikachi-david'],
|
|
151
|
+
categories: [shared_1.PieceCategory.DEVELOPER_TOOLS],
|
|
152
|
+
actions: [
|
|
153
|
+
read_secret_1.readSecret,
|
|
154
|
+
write_secret_1.writeSecret,
|
|
155
|
+
delete_secret_1.deleteSecret,
|
|
156
|
+
list_secrets_1.listSecrets,
|
|
157
|
+
(0, pieces_common_1.createCustomApiCallAction)({
|
|
158
|
+
baseUrl: (auth) => ((auth === null || auth === void 0 ? void 0 : auth.props.url) || '').replace(/\/$/, ''),
|
|
159
|
+
auth: exports.hashiCorpVaultAuth,
|
|
160
|
+
authMapping: (auth) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
161
|
+
var _a;
|
|
162
|
+
let token;
|
|
163
|
+
if (auth.props.authMethod === 'token') {
|
|
164
|
+
token = auth.props.token || '';
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
const appRolePath = auth.props.appRolePath || 'approle';
|
|
168
|
+
const baseUrl = (auth.props.url || '').replace(/\/$/, '');
|
|
169
|
+
const response = yield pieces_common_1.httpClient.sendRequest({
|
|
170
|
+
method: pieces_common_1.HttpMethod.POST,
|
|
171
|
+
url: `${baseUrl}/v1/auth/${appRolePath}/login`,
|
|
172
|
+
headers: Object.assign({ 'Content-Type': 'application/json' }, (auth.props.namespace && { 'X-Vault-Namespace': auth.props.namespace })),
|
|
173
|
+
body: {
|
|
174
|
+
role_id: auth.props.roleId || '',
|
|
175
|
+
secret_id: auth.props.secretId || '',
|
|
176
|
+
},
|
|
177
|
+
});
|
|
178
|
+
token = ((_a = response.body.auth) === null || _a === void 0 ? void 0 : _a.client_token) || '';
|
|
179
|
+
}
|
|
180
|
+
return Object.assign({ 'X-Vault-Token': token }, (auth.props.namespace && { 'X-Vault-Namespace': auth.props.namespace }));
|
|
181
|
+
}),
|
|
182
|
+
}),
|
|
183
|
+
],
|
|
184
|
+
triggers: [],
|
|
185
|
+
});
|
|
186
|
+
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/pieces/community/hashi-corp-vault/src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const deleteSecret: import("@activepieces/pieces-framework").IAction<import("@activepieces/pieces-framework").CustomAuthProperty<{
|
|
2
|
+
url: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
3
|
+
authMethod: import("@activepieces/pieces-framework").StaticDropdownProperty<string, true>;
|
|
4
|
+
token: import("@activepieces/pieces-framework").SecretTextProperty<false>;
|
|
5
|
+
roleId: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
6
|
+
secretId: import("@activepieces/pieces-framework").SecretTextProperty<false>;
|
|
7
|
+
appRolePath: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
8
|
+
namespace: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
9
|
+
apiVersion: import("@activepieces/pieces-framework").StaticDropdownProperty<string, true>;
|
|
10
|
+
}>, {
|
|
11
|
+
secretEngine: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
12
|
+
secretPath: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
13
|
+
}>;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.deleteSecret = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const pieces_framework_1 = require("@activepieces/pieces-framework");
|
|
6
|
+
const pieces_common_1 = require("@activepieces/pieces-common");
|
|
7
|
+
const index_1 = require("../../index");
|
|
8
|
+
const common_1 = require("../common");
|
|
9
|
+
exports.deleteSecret = (0, pieces_framework_1.createAction)({
|
|
10
|
+
auth: index_1.hashiCorpVaultAuth,
|
|
11
|
+
name: 'delete_secret',
|
|
12
|
+
displayName: 'Delete Secret',
|
|
13
|
+
description: 'Delete a secret from HashiCorp Vault',
|
|
14
|
+
props: {
|
|
15
|
+
secretEngine: pieces_framework_1.Property.ShortText({
|
|
16
|
+
displayName: 'Secret Engine',
|
|
17
|
+
description: 'The name of the secrets engine (mount path)',
|
|
18
|
+
required: true,
|
|
19
|
+
defaultValue: 'secret',
|
|
20
|
+
}),
|
|
21
|
+
secretPath: pieces_framework_1.Property.ShortText({
|
|
22
|
+
displayName: 'Secret Path',
|
|
23
|
+
description: 'The path to the secret to delete (e.g., myapp/database)',
|
|
24
|
+
required: true,
|
|
25
|
+
}),
|
|
26
|
+
},
|
|
27
|
+
run(context) {
|
|
28
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
29
|
+
var _a;
|
|
30
|
+
const { secretEngine, secretPath } = context.propsValue;
|
|
31
|
+
const vaultAuth = yield (0, common_1.getVaultToken)(context.auth);
|
|
32
|
+
const url = (0, common_1.buildSecretUrl)(vaultAuth.baseUrl, secretEngine, secretPath, vaultAuth.apiVersion, 'delete');
|
|
33
|
+
try {
|
|
34
|
+
yield pieces_common_1.httpClient.sendRequest({
|
|
35
|
+
method: pieces_common_1.HttpMethod.DELETE,
|
|
36
|
+
url,
|
|
37
|
+
headers: (0, common_1.buildVaultHeaders)(vaultAuth.token, vaultAuth.namespace),
|
|
38
|
+
});
|
|
39
|
+
return {
|
|
40
|
+
success: true,
|
|
41
|
+
deleted: true,
|
|
42
|
+
path: secretPath,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
if (error &&
|
|
47
|
+
typeof error === 'object' &&
|
|
48
|
+
'response' in error &&
|
|
49
|
+
((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 404) {
|
|
50
|
+
return {
|
|
51
|
+
success: true,
|
|
52
|
+
deleted: false,
|
|
53
|
+
path: secretPath,
|
|
54
|
+
message: 'Secret not found at this path (may already be deleted)',
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
58
|
+
throw new Error(`Failed to delete secret: ${errorMessage}`);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
//# sourceMappingURL=delete-secret.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete-secret.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/community/hashi-corp-vault/src/lib/actions/delete-secret.ts"],"names":[],"mappings":";;;;AAAA,qEAAwE;AACxE,+DAAqE;AACrE,uCAAiD;AACjD,sCAA6E;AAEhE,QAAA,YAAY,GAAG,IAAA,+BAAY,EAAC;IACvC,IAAI,EAAE,0BAAkB;IACxB,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,eAAe;IAC5B,WAAW,EAAE,sCAAsC;IACnD,KAAK,EAAE;QACL,YAAY,EAAE,2BAAQ,CAAC,SAAS,CAAC;YAC/B,WAAW,EAAE,eAAe;YAC5B,WAAW,EAAE,6CAA6C;YAC1D,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE,QAAQ;SACvB,CAAC;QACF,UAAU,EAAE,2BAAQ,CAAC,SAAS,CAAC;YAC7B,WAAW,EAAE,aAAa;YAC1B,WAAW,EAAE,yDAAyD;YACtE,QAAQ,EAAE,IAAI;SACf,CAAC;KACH;IACK,GAAG,CAAC,OAAO;;;YACf,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;YACxD,MAAM,SAAS,GAAG,MAAM,IAAA,sBAAa,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAEpD,MAAM,GAAG,GAAG,IAAA,uBAAc,EACxB,SAAS,CAAC,OAAO,EACjB,YAAY,EACZ,UAAU,EACV,SAAS,CAAC,UAAU,EACpB,QAAQ,CACT,CAAC;YAEF,IAAI,CAAC;gBACH,MAAM,0BAAU,CAAC,WAAW,CAAC;oBAC3B,MAAM,EAAE,0BAAU,CAAC,MAAM;oBACzB,GAAG;oBACH,OAAO,EAAE,IAAA,0BAAiB,EAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,SAAS,CAAC;iBACjE,CAAC,CAAC;gBAEH,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,IAAI;oBACb,IAAI,EAAE,UAAU;iBACjB,CAAC;YACJ,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,IACE,KAAK;oBACL,OAAO,KAAK,KAAK,QAAQ;oBACzB,UAAU,IAAI,KAAK;oBACnB,CAAA,MAAC,KAA4C,CAAC,QAAQ,0CAAE,MAAM,MAAK,GAAG,EACtE,CAAC;oBACD,OAAO;wBACL,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE,KAAK;wBACd,IAAI,EAAE,UAAU;wBAChB,OAAO,EAAE,wDAAwD;qBAClE,CAAC;gBACJ,CAAC;gBAED,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;gBAC3D,MAAM,IAAI,KAAK,CAAC,4BAA4B,YAAY,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;KAAA;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const listSecrets: import("@activepieces/pieces-framework").IAction<import("@activepieces/pieces-framework").CustomAuthProperty<{
|
|
2
|
+
url: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
3
|
+
authMethod: import("@activepieces/pieces-framework").StaticDropdownProperty<string, true>;
|
|
4
|
+
token: import("@activepieces/pieces-framework").SecretTextProperty<false>;
|
|
5
|
+
roleId: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
6
|
+
secretId: import("@activepieces/pieces-framework").SecretTextProperty<false>;
|
|
7
|
+
appRolePath: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
8
|
+
namespace: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
9
|
+
apiVersion: import("@activepieces/pieces-framework").StaticDropdownProperty<string, true>;
|
|
10
|
+
}>, {
|
|
11
|
+
secretEngine: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
12
|
+
listPath: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
13
|
+
}>;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.listSecrets = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const pieces_framework_1 = require("@activepieces/pieces-framework");
|
|
6
|
+
const pieces_common_1 = require("@activepieces/pieces-common");
|
|
7
|
+
const index_1 = require("../../index");
|
|
8
|
+
const common_1 = require("../common");
|
|
9
|
+
exports.listSecrets = (0, pieces_framework_1.createAction)({
|
|
10
|
+
auth: index_1.hashiCorpVaultAuth,
|
|
11
|
+
name: 'list_secrets',
|
|
12
|
+
displayName: 'List Secrets',
|
|
13
|
+
description: 'List secrets at a path in HashiCorp Vault',
|
|
14
|
+
props: {
|
|
15
|
+
secretEngine: pieces_framework_1.Property.ShortText({
|
|
16
|
+
displayName: 'Secret Engine',
|
|
17
|
+
description: 'The name of the secrets engine (mount path)',
|
|
18
|
+
required: true,
|
|
19
|
+
defaultValue: 'secret',
|
|
20
|
+
}),
|
|
21
|
+
listPath: pieces_framework_1.Property.ShortText({
|
|
22
|
+
displayName: 'Path',
|
|
23
|
+
description: 'The path to list secrets from (e.g., myapp/)',
|
|
24
|
+
required: false,
|
|
25
|
+
defaultValue: '',
|
|
26
|
+
}),
|
|
27
|
+
},
|
|
28
|
+
run(context) {
|
|
29
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
30
|
+
var _a, _b;
|
|
31
|
+
const { secretEngine, listPath } = context.propsValue;
|
|
32
|
+
const vaultAuth = yield (0, common_1.getVaultToken)(context.auth);
|
|
33
|
+
const cleanPath = (listPath || '').replace(/^\/+|\/+$/g, '');
|
|
34
|
+
const url = (0, common_1.buildSecretUrl)(vaultAuth.baseUrl, secretEngine, cleanPath, vaultAuth.apiVersion, 'list') + '?list=true';
|
|
35
|
+
try {
|
|
36
|
+
const response = yield pieces_common_1.httpClient.sendRequest({
|
|
37
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
38
|
+
url,
|
|
39
|
+
headers: (0, common_1.buildVaultHeaders)(vaultAuth.token, vaultAuth.namespace),
|
|
40
|
+
});
|
|
41
|
+
return {
|
|
42
|
+
success: true,
|
|
43
|
+
keys: ((_a = response.body.data) === null || _a === void 0 ? void 0 : _a.keys) || [],
|
|
44
|
+
path: listPath || '/',
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
if (error &&
|
|
49
|
+
typeof error === 'object' &&
|
|
50
|
+
'response' in error &&
|
|
51
|
+
((_b = error.response) === null || _b === void 0 ? void 0 : _b.status) === 404) {
|
|
52
|
+
return {
|
|
53
|
+
success: true,
|
|
54
|
+
keys: [],
|
|
55
|
+
path: listPath || '/',
|
|
56
|
+
message: 'No secrets found at this path',
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
60
|
+
throw new Error(`Failed to list secrets: ${errorMessage}`);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
//# sourceMappingURL=list-secrets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-secrets.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/community/hashi-corp-vault/src/lib/actions/list-secrets.ts"],"names":[],"mappings":";;;;AAAA,qEAAwE;AACxE,+DAAqE;AACrE,uCAAiD;AACjD,sCAA6E;AAEhE,QAAA,WAAW,GAAG,IAAA,+BAAY,EAAC;IACtC,IAAI,EAAE,0BAAkB;IACxB,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,cAAc;IAC3B,WAAW,EAAE,2CAA2C;IACxD,KAAK,EAAE;QACL,YAAY,EAAE,2BAAQ,CAAC,SAAS,CAAC;YAC/B,WAAW,EAAE,eAAe;YAC5B,WAAW,EAAE,6CAA6C;YAC1D,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE,QAAQ;SACvB,CAAC;QACF,QAAQ,EAAE,2BAAQ,CAAC,SAAS,CAAC;YAC3B,WAAW,EAAE,MAAM;YACnB,WAAW,EAAE,8CAA8C;YAC3D,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,EAAE;SACjB,CAAC;KACH;IACK,GAAG,CAAC,OAAO;;;YACf,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;YACtD,MAAM,SAAS,GAAG,MAAM,IAAA,sBAAa,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAEpD,MAAM,SAAS,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YAC7D,MAAM,GAAG,GAAG,IAAA,uBAAc,EACxB,SAAS,CAAC,OAAO,EACjB,YAAY,EACZ,SAAS,EACT,SAAS,CAAC,UAAU,EACpB,MAAM,CACP,GAAG,YAAY,CAAC;YAEjB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,0BAAU,CAAC,WAAW,CAE1C;oBACD,MAAM,EAAE,0BAAU,CAAC,GAAG;oBACtB,GAAG;oBACH,OAAO,EAAE,IAAA,0BAAiB,EAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,SAAS,CAAC;iBACjE,CAAC,CAAC;gBAEH,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,IAAI,EAAE,CAAA,MAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,0CAAE,IAAI,KAAI,EAAE;oBACpC,IAAI,EAAE,QAAQ,IAAI,GAAG;iBACtB,CAAC;YACJ,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,IACE,KAAK;oBACL,OAAO,KAAK,KAAK,QAAQ;oBACzB,UAAU,IAAI,KAAK;oBACnB,CAAA,MAAC,KAA4C,CAAC,QAAQ,0CAAE,MAAM,MAAK,GAAG,EACtE,CAAC;oBACD,OAAO;wBACL,OAAO,EAAE,IAAI;wBACb,IAAI,EAAE,EAAE;wBACR,IAAI,EAAE,QAAQ,IAAI,GAAG;wBACrB,OAAO,EAAE,+BAA+B;qBACzC,CAAC;gBACJ,CAAC;gBAED,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;gBAC3D,MAAM,IAAI,KAAK,CAAC,2BAA2B,YAAY,EAAE,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;KAAA;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const readSecret: import("@activepieces/pieces-framework").IAction<import("@activepieces/pieces-framework").CustomAuthProperty<{
|
|
2
|
+
url: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
3
|
+
authMethod: import("@activepieces/pieces-framework").StaticDropdownProperty<string, true>;
|
|
4
|
+
token: import("@activepieces/pieces-framework").SecretTextProperty<false>;
|
|
5
|
+
roleId: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
6
|
+
secretId: import("@activepieces/pieces-framework").SecretTextProperty<false>;
|
|
7
|
+
appRolePath: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
8
|
+
namespace: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
9
|
+
apiVersion: import("@activepieces/pieces-framework").StaticDropdownProperty<string, true>;
|
|
10
|
+
}>, {
|
|
11
|
+
secretEngine: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
12
|
+
secretPath: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
13
|
+
version: import("@activepieces/pieces-framework").NumberProperty<false>;
|
|
14
|
+
}>;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.readSecret = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const pieces_framework_1 = require("@activepieces/pieces-framework");
|
|
6
|
+
const pieces_common_1 = require("@activepieces/pieces-common");
|
|
7
|
+
const index_1 = require("../../index");
|
|
8
|
+
const common_1 = require("../common");
|
|
9
|
+
exports.readSecret = (0, pieces_framework_1.createAction)({
|
|
10
|
+
auth: index_1.hashiCorpVaultAuth,
|
|
11
|
+
name: 'read_secret',
|
|
12
|
+
displayName: 'Read Secret',
|
|
13
|
+
description: 'Read a secret from HashiCorp Vault',
|
|
14
|
+
props: {
|
|
15
|
+
secretEngine: pieces_framework_1.Property.ShortText({
|
|
16
|
+
displayName: 'Secret Engine',
|
|
17
|
+
description: 'The name of the secrets engine (mount path)',
|
|
18
|
+
required: true,
|
|
19
|
+
defaultValue: 'secret',
|
|
20
|
+
}),
|
|
21
|
+
secretPath: pieces_framework_1.Property.ShortText({
|
|
22
|
+
displayName: 'Secret Path',
|
|
23
|
+
description: 'The path to the secret (e.g., myapp/database)',
|
|
24
|
+
required: true,
|
|
25
|
+
}),
|
|
26
|
+
version: pieces_framework_1.Property.Number({
|
|
27
|
+
displayName: 'Version',
|
|
28
|
+
description: 'Version of the secret to read (0 for latest, KV v2 only)',
|
|
29
|
+
required: false,
|
|
30
|
+
defaultValue: 0,
|
|
31
|
+
}),
|
|
32
|
+
},
|
|
33
|
+
run(context) {
|
|
34
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
35
|
+
var _a, _b, _c;
|
|
36
|
+
const { secretEngine, secretPath, version } = context.propsValue;
|
|
37
|
+
const vaultAuth = yield (0, common_1.getVaultToken)(context.auth);
|
|
38
|
+
let url = (0, common_1.buildSecretUrl)(vaultAuth.baseUrl, secretEngine, secretPath, vaultAuth.apiVersion, 'read');
|
|
39
|
+
// Add version parameter for KV v2
|
|
40
|
+
if (vaultAuth.apiVersion === 'v2' && version && version > 0) {
|
|
41
|
+
url += `?version=${version}`;
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
const response = yield pieces_common_1.httpClient.sendRequest({
|
|
45
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
46
|
+
url,
|
|
47
|
+
headers: (0, common_1.buildVaultHeaders)(vaultAuth.token, vaultAuth.namespace),
|
|
48
|
+
});
|
|
49
|
+
if (vaultAuth.apiVersion === 'v2') {
|
|
50
|
+
return {
|
|
51
|
+
success: true,
|
|
52
|
+
data: ((_a = response.body.data) === null || _a === void 0 ? void 0 : _a.data) || {},
|
|
53
|
+
metadata: ((_b = response.body.data) === null || _b === void 0 ? void 0 : _b.metadata) || {},
|
|
54
|
+
lease_duration: response.body.lease_duration,
|
|
55
|
+
renewable: response.body.renewable,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
return {
|
|
60
|
+
success: true,
|
|
61
|
+
data: response.body.data || {},
|
|
62
|
+
lease_duration: response.body.lease_duration,
|
|
63
|
+
renewable: response.body.renewable,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
if (error &&
|
|
69
|
+
typeof error === 'object' &&
|
|
70
|
+
'response' in error &&
|
|
71
|
+
((_c = error.response) === null || _c === void 0 ? void 0 : _c.status) === 404) {
|
|
72
|
+
return {
|
|
73
|
+
success: false,
|
|
74
|
+
data: {},
|
|
75
|
+
path: secretPath,
|
|
76
|
+
message: 'Secret not found at this path',
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
80
|
+
throw new Error(`Failed to read secret: ${errorMessage}`);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
//# sourceMappingURL=read-secret.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-secret.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/community/hashi-corp-vault/src/lib/actions/read-secret.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const writeSecret: import("@activepieces/pieces-framework").IAction<import("@activepieces/pieces-framework").CustomAuthProperty<{
|
|
2
|
+
url: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
3
|
+
authMethod: import("@activepieces/pieces-framework").StaticDropdownProperty<string, true>;
|
|
4
|
+
token: import("@activepieces/pieces-framework").SecretTextProperty<false>;
|
|
5
|
+
roleId: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
6
|
+
secretId: import("@activepieces/pieces-framework").SecretTextProperty<false>;
|
|
7
|
+
appRolePath: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
8
|
+
namespace: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
9
|
+
apiVersion: import("@activepieces/pieces-framework").StaticDropdownProperty<string, true>;
|
|
10
|
+
}>, {
|
|
11
|
+
secretEngine: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
12
|
+
secretPath: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
13
|
+
secretData: import("@activepieces/pieces-framework").JsonProperty<true>;
|
|
14
|
+
}>;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.writeSecret = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const pieces_framework_1 = require("@activepieces/pieces-framework");
|
|
6
|
+
const pieces_common_1 = require("@activepieces/pieces-common");
|
|
7
|
+
const index_1 = require("../../index");
|
|
8
|
+
const common_1 = require("../common");
|
|
9
|
+
exports.writeSecret = (0, pieces_framework_1.createAction)({
|
|
10
|
+
auth: index_1.hashiCorpVaultAuth,
|
|
11
|
+
name: 'write_secret',
|
|
12
|
+
displayName: 'Write Secret',
|
|
13
|
+
description: 'Write a secret to HashiCorp Vault',
|
|
14
|
+
props: {
|
|
15
|
+
secretEngine: pieces_framework_1.Property.ShortText({
|
|
16
|
+
displayName: 'Secret Engine',
|
|
17
|
+
description: 'The name of the secrets engine (mount path)',
|
|
18
|
+
required: true,
|
|
19
|
+
defaultValue: 'secret',
|
|
20
|
+
}),
|
|
21
|
+
secretPath: pieces_framework_1.Property.ShortText({
|
|
22
|
+
displayName: 'Secret Path',
|
|
23
|
+
description: 'The path to store the secret (e.g., myapp/database)',
|
|
24
|
+
required: true,
|
|
25
|
+
}),
|
|
26
|
+
secretData: pieces_framework_1.Property.Json({
|
|
27
|
+
displayName: 'Secret Data',
|
|
28
|
+
description: 'The secret data to store as JSON',
|
|
29
|
+
required: true,
|
|
30
|
+
defaultValue: {
|
|
31
|
+
username: 'myuser',
|
|
32
|
+
password: 'mypassword',
|
|
33
|
+
},
|
|
34
|
+
}),
|
|
35
|
+
},
|
|
36
|
+
run(context) {
|
|
37
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
38
|
+
const { secretEngine, secretPath, secretData } = context.propsValue;
|
|
39
|
+
const vaultAuth = yield (0, common_1.getVaultToken)(context.auth);
|
|
40
|
+
const url = (0, common_1.buildSecretUrl)(vaultAuth.baseUrl, secretEngine, secretPath, vaultAuth.apiVersion, 'write');
|
|
41
|
+
let requestBody;
|
|
42
|
+
if (vaultAuth.apiVersion === 'v2') {
|
|
43
|
+
requestBody = { data: secretData };
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
requestBody = secretData;
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
const response = yield pieces_common_1.httpClient.sendRequest({
|
|
50
|
+
method: pieces_common_1.HttpMethod.POST,
|
|
51
|
+
url,
|
|
52
|
+
headers: (0, common_1.buildVaultHeaders)(vaultAuth.token, vaultAuth.namespace),
|
|
53
|
+
body: requestBody,
|
|
54
|
+
});
|
|
55
|
+
return Object.assign({ success: true, path: secretPath }, (response.body.data && { metadata: response.body.data }));
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
59
|
+
throw new Error(`Failed to write secret: ${errorMessage}`);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
//# sourceMappingURL=write-secret.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-secret.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/community/hashi-corp-vault/src/lib/actions/write-secret.ts"],"names":[],"mappings":";;;;AAAA,qEAAwE;AACxE,+DAAqE;AACrE,uCAAiD;AACjD,sCAA6E;AAEhE,QAAA,WAAW,GAAG,IAAA,+BAAY,EAAC;IACtC,IAAI,EAAE,0BAAkB;IACxB,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,cAAc;IAC3B,WAAW,EAAE,mCAAmC;IAChD,KAAK,EAAE;QACL,YAAY,EAAE,2BAAQ,CAAC,SAAS,CAAC;YAC/B,WAAW,EAAE,eAAe;YAC5B,WAAW,EAAE,6CAA6C;YAC1D,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE,QAAQ;SACvB,CAAC;QACF,UAAU,EAAE,2BAAQ,CAAC,SAAS,CAAC;YAC7B,WAAW,EAAE,aAAa;YAC1B,WAAW,EAAE,qDAAqD;YAClE,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,UAAU,EAAE,2BAAQ,CAAC,IAAI,CAAC;YACxB,WAAW,EAAE,aAAa;YAC1B,WAAW,EAAE,kCAAkC;YAC/C,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE;gBACZ,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,YAAY;aACvB;SACF,CAAC;KACH;IACK,GAAG,CAAC,OAAO;;YACf,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;YACpE,MAAM,SAAS,GAAG,MAAM,IAAA,sBAAa,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAEpD,MAAM,GAAG,GAAG,IAAA,uBAAc,EACxB,SAAS,CAAC,OAAO,EACjB,YAAY,EACZ,UAAU,EACV,SAAS,CAAC,UAAU,EACpB,OAAO,CACR,CAAC;YAEF,IAAI,WAAoB,CAAC;YACzB,IAAI,SAAS,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;gBAClC,WAAW,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,WAAW,GAAG,UAAU,CAAC;YAC3B,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,0BAAU,CAAC,WAAW,CAE1C;oBACD,MAAM,EAAE,0BAAU,CAAC,IAAI;oBACvB,GAAG;oBACH,OAAO,EAAE,IAAA,0BAAiB,EAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,SAAS,CAAC;oBAChE,IAAI,EAAE,WAAW;iBAClB,CAAC,CAAC;gBAEH,uBACE,OAAO,EAAE,IAAI,EACb,IAAI,EAAE,UAAU,IACb,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAC3D;YACJ,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;gBAC3D,MAAM,IAAI,KAAK,CAAC,2BAA2B,YAAY,EAAE,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;KAAA;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { hashiCorpVaultAuth } from '../../index';
|
|
2
|
+
import { AppConnectionValueForAuthProperty } from '@activepieces/pieces-framework';
|
|
3
|
+
export interface VaultAuthResult {
|
|
4
|
+
token: string;
|
|
5
|
+
baseUrl: string;
|
|
6
|
+
namespace?: string;
|
|
7
|
+
apiVersion: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function getVaultToken(auth: AppConnectionValueForAuthProperty<typeof hashiCorpVaultAuth>): Promise<VaultAuthResult>;
|
|
10
|
+
export declare function buildVaultHeaders(token: string, namespace?: string, customHeaders?: Record<string, string>): Record<string, string>;
|
|
11
|
+
export declare function buildSecretUrl(baseUrl: string, secretEngine: string, secretPath: string, apiVersion: string, operation: 'read' | 'write' | 'delete' | 'list'): string;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getVaultToken = getVaultToken;
|
|
4
|
+
exports.buildVaultHeaders = buildVaultHeaders;
|
|
5
|
+
exports.buildSecretUrl = buildSecretUrl;
|
|
6
|
+
const tslib_1 = require("tslib");
|
|
7
|
+
const pieces_common_1 = require("@activepieces/pieces-common");
|
|
8
|
+
function getVaultToken(auth) {
|
|
9
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
10
|
+
var _a;
|
|
11
|
+
const baseUrl = auth.props.url.replace(/\/$/, '');
|
|
12
|
+
const namespace = auth.props.namespace || undefined;
|
|
13
|
+
const apiVersion = auth.props.apiVersion || 'v2';
|
|
14
|
+
let token;
|
|
15
|
+
if (auth.props.authMethod === 'token') {
|
|
16
|
+
if (!auth.props.token) {
|
|
17
|
+
throw new Error('Vault Token is required for token authentication');
|
|
18
|
+
}
|
|
19
|
+
token = auth.props.token;
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
// AppRole authentication
|
|
23
|
+
if (!auth.props.roleId || !auth.props.secretId) {
|
|
24
|
+
throw new Error('Role ID and Secret ID are required for AppRole authentication');
|
|
25
|
+
}
|
|
26
|
+
const appRolePath = auth.props.appRolePath || 'approle';
|
|
27
|
+
const loginUrl = `${baseUrl}/v1/auth/${appRolePath}/login`;
|
|
28
|
+
const request = {
|
|
29
|
+
method: pieces_common_1.HttpMethod.POST,
|
|
30
|
+
url: loginUrl,
|
|
31
|
+
headers: Object.assign({ 'Content-Type': 'application/json' }, (namespace && { 'X-Vault-Namespace': namespace })),
|
|
32
|
+
body: {
|
|
33
|
+
role_id: auth.props.roleId,
|
|
34
|
+
secret_id: auth.props.secretId,
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
try {
|
|
38
|
+
const response = yield pieces_common_1.httpClient.sendRequest(request);
|
|
39
|
+
if (!((_a = response.body.auth) === null || _a === void 0 ? void 0 : _a.client_token)) {
|
|
40
|
+
throw new Error('Failed to obtain token from AppRole login');
|
|
41
|
+
}
|
|
42
|
+
token = response.body.auth.client_token;
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
46
|
+
throw new Error(`AppRole authentication failed: ${errorMessage}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
token,
|
|
51
|
+
baseUrl,
|
|
52
|
+
namespace,
|
|
53
|
+
apiVersion,
|
|
54
|
+
};
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
function buildVaultHeaders(token, namespace, customHeaders) {
|
|
58
|
+
return Object.assign(Object.assign({ 'X-Vault-Token': token, 'Content-Type': 'application/json' }, (namespace && { 'X-Vault-Namespace': namespace })), customHeaders);
|
|
59
|
+
}
|
|
60
|
+
function buildSecretUrl(baseUrl, secretEngine, secretPath, apiVersion, operation) {
|
|
61
|
+
const cleanPath = secretPath.replace(/^\/+|\/+$/g, '');
|
|
62
|
+
if (apiVersion === 'v2') {
|
|
63
|
+
switch (operation) {
|
|
64
|
+
case 'read':
|
|
65
|
+
case 'write':
|
|
66
|
+
return `${baseUrl}/v1/${secretEngine}/data/${cleanPath}`;
|
|
67
|
+
case 'delete':
|
|
68
|
+
case 'list':
|
|
69
|
+
return `${baseUrl}/v1/${secretEngine}/metadata/${cleanPath}`;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
return `${baseUrl}/v1/${secretEngine}/${cleanPath}`;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/community/hashi-corp-vault/src/lib/common/index.ts"],"names":[],"mappings":"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"}
|