@ketrics/ketrics-cli 0.2.0 → 0.2.2

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 (33) hide show
  1. package/README.md +636 -216
  2. package/dist/src/services/api-client.d.ts +1 -1
  3. package/dist/src/services/api-client.js +1 -1
  4. package/package.json +1 -1
  5. package/templates/HelloWorld/backend/package-lock.json +374 -0
  6. package/templates/{ketrics-app-v1 → HelloWorld}/backend/package.json +4 -4
  7. package/templates/HelloWorld/backend/src/index.ts +57 -0
  8. package/templates/HelloWorld/backend/src/secrets.ts +17 -0
  9. package/templates/{ketrics-app-v1 → HelloWorld}/backend/src/volume.ts +8 -1
  10. package/templates/{ketrics-app-v1 → HelloWorld}/frontend/src/App.tsx +36 -0
  11. package/templates/HelloWorld/ketrics.config.json +19 -0
  12. package/templates/HelloWorld/tests/test.echo2.json +13 -0
  13. package/templates/HelloWorld/tests/test.getSecret.json +9 -0
  14. package/templates/HelloWorld/tests/test.getSecretWithoutGrant.json +9 -0
  15. package/templates/HelloWorld/tests/test.testWriteFileWithoutVolumeGrant.json +9 -0
  16. package/templates/ketrics-app-v1/.env.example +0 -17
  17. package/templates/ketrics-app-v1/backend/package-lock.json +0 -716
  18. package/templates/ketrics-app-v1/backend/src/index.ts +0 -41
  19. package/templates/ketrics-app-v1/ketrics.config.json +0 -10
  20. /package/templates/{ketrics-app-v1 → HelloWorld}/README.md +0 -0
  21. /package/templates/{ketrics-app-v1 → HelloWorld}/backend/tsconfig.json +0 -0
  22. /package/templates/{ketrics-app-v1 → HelloWorld}/frontend/index.html +0 -0
  23. /package/templates/{ketrics-app-v1 → HelloWorld}/frontend/package-lock.json +0 -0
  24. /package/templates/{ketrics-app-v1 → HelloWorld}/frontend/package.json +0 -0
  25. /package/templates/{ketrics-app-v1 → HelloWorld}/frontend/src/App.css +0 -0
  26. /package/templates/{ketrics-app-v1 → HelloWorld}/frontend/src/main.tsx +0 -0
  27. /package/templates/{ketrics-app-v1 → HelloWorld}/frontend/src/services/index.ts +0 -0
  28. /package/templates/{ketrics-app-v1 → HelloWorld}/frontend/tsconfig.json +0 -0
  29. /package/templates/{ketrics-app-v1 → HelloWorld}/frontend/tsconfig.node.json +0 -0
  30. /package/templates/{ketrics-app-v1 → HelloWorld}/frontend/vite.config.ts +0 -0
  31. /package/templates/{ketrics-app-v1 → HelloWorld}/tests/test.echo.json +0 -0
  32. /package/templates/{ketrics-app-v1 → HelloWorld}/tests/test.greet.json +0 -0
  33. /package/templates/{ketrics-app-v1 → HelloWorld}/tests/test.info.json +0 -0
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * API Client Service
3
3
  *
4
- * HTTP client for communicating with Ketrics Control Plane API.
4
+ * HTTP client for communicating with Ketrics Tenant API.
5
5
  */
6
6
  import type { EnvConfig, DeployResponse } from "../types";
7
7
  /**
@@ -2,7 +2,7 @@
2
2
  /**
3
3
  * API Client Service
4
4
  *
5
- * HTTP client for communicating with Ketrics Control Plane API.
5
+ * HTTP client for communicating with Ketrics Tenant API.
6
6
  */
7
7
  var __importDefault = (this && this.__importDefault) || function (mod) {
8
8
  return (mod && mod.__esModule) ? mod : { "default": mod };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ketrics/ketrics-cli",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "CLI tool for deploying applications to Ketrics platform",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -0,0 +1,374 @@
1
+ {
2
+ "name": "app3",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "app3",
9
+ "version": "1.0.0",
10
+ "devDependencies": {
11
+ "@ketrics/sdk-backend": "0.7.1",
12
+ "@types/node": ">=24.0.0",
13
+ "esbuild": "^0.27.2",
14
+ "ts-node": "^1.7.1",
15
+ "typescript": "^5.3.3"
16
+ }
17
+ },
18
+ "node_modules/@esbuild/darwin-arm64": {
19
+ "version": "0.27.2",
20
+ "cpu": [
21
+ "arm64"
22
+ ],
23
+ "dev": true,
24
+ "license": "MIT",
25
+ "optional": true,
26
+ "os": [
27
+ "darwin"
28
+ ],
29
+ "engines": {
30
+ "node": ">=18"
31
+ }
32
+ },
33
+ "node_modules/@ketrics/sdk-backend": {
34
+ "version": "0.7.1",
35
+ "resolved": "https://registry.npmjs.org/@ketrics/sdk-backend/-/sdk-backend-0.7.1.tgz",
36
+ "integrity": "sha512-cMKOditcGh0cB5kLfrP2IGQ7gvCffeOAMhhkgdiGiGmmBnMJKwcBjfBMZtLHzFQ+F/+oR1QoMnZOsaxd8BMQZw==",
37
+ "dev": true,
38
+ "license": "MIT",
39
+ "engines": {
40
+ "node": ">=24.0.0"
41
+ },
42
+ "peerDependencies": {
43
+ "@types/node": ">=24.0.0"
44
+ }
45
+ },
46
+ "node_modules/@types/node": {
47
+ "version": "25.1.0",
48
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.1.0.tgz",
49
+ "integrity": "sha512-t7frlewr6+cbx+9Ohpl0NOTKXZNV9xHRmNOvql47BFJKcEG1CxtxlPEEe+gR9uhVWM4DwhnvTF110mIL4yP9RA==",
50
+ "dev": true,
51
+ "license": "MIT",
52
+ "dependencies": {
53
+ "undici-types": "~7.16.0"
54
+ }
55
+ },
56
+ "node_modules/ansi-regex": {
57
+ "version": "2.1.1",
58
+ "dev": true,
59
+ "license": "MIT",
60
+ "engines": {
61
+ "node": ">=0.10.0"
62
+ }
63
+ },
64
+ "node_modules/ansi-styles": {
65
+ "version": "2.2.1",
66
+ "dev": true,
67
+ "license": "MIT",
68
+ "engines": {
69
+ "node": ">=0.10.0"
70
+ }
71
+ },
72
+ "node_modules/any-promise": {
73
+ "version": "1.3.0",
74
+ "dev": true,
75
+ "license": "MIT"
76
+ },
77
+ "node_modules/arrify": {
78
+ "version": "1.0.1",
79
+ "dev": true,
80
+ "license": "MIT",
81
+ "engines": {
82
+ "node": ">=0.10.0"
83
+ }
84
+ },
85
+ "node_modules/chalk": {
86
+ "version": "1.1.3",
87
+ "dev": true,
88
+ "license": "MIT",
89
+ "dependencies": {
90
+ "ansi-styles": "^2.2.1",
91
+ "escape-string-regexp": "^1.0.2",
92
+ "has-ansi": "^2.0.0",
93
+ "strip-ansi": "^3.0.0",
94
+ "supports-color": "^2.0.0"
95
+ },
96
+ "engines": {
97
+ "node": ">=0.10.0"
98
+ }
99
+ },
100
+ "node_modules/error-ex": {
101
+ "version": "1.3.4",
102
+ "dev": true,
103
+ "license": "MIT",
104
+ "dependencies": {
105
+ "is-arrayish": "^0.2.1"
106
+ }
107
+ },
108
+ "node_modules/esbuild": {
109
+ "version": "0.27.2",
110
+ "dev": true,
111
+ "hasInstallScript": true,
112
+ "license": "MIT",
113
+ "bin": {
114
+ "esbuild": "bin/esbuild"
115
+ },
116
+ "engines": {
117
+ "node": ">=18"
118
+ },
119
+ "optionalDependencies": {
120
+ "@esbuild/aix-ppc64": "0.27.2",
121
+ "@esbuild/android-arm": "0.27.2",
122
+ "@esbuild/android-arm64": "0.27.2",
123
+ "@esbuild/android-x64": "0.27.2",
124
+ "@esbuild/darwin-arm64": "0.27.2",
125
+ "@esbuild/darwin-x64": "0.27.2",
126
+ "@esbuild/freebsd-arm64": "0.27.2",
127
+ "@esbuild/freebsd-x64": "0.27.2",
128
+ "@esbuild/linux-arm": "0.27.2",
129
+ "@esbuild/linux-arm64": "0.27.2",
130
+ "@esbuild/linux-ia32": "0.27.2",
131
+ "@esbuild/linux-loong64": "0.27.2",
132
+ "@esbuild/linux-mips64el": "0.27.2",
133
+ "@esbuild/linux-ppc64": "0.27.2",
134
+ "@esbuild/linux-riscv64": "0.27.2",
135
+ "@esbuild/linux-s390x": "0.27.2",
136
+ "@esbuild/linux-x64": "0.27.2",
137
+ "@esbuild/netbsd-arm64": "0.27.2",
138
+ "@esbuild/netbsd-x64": "0.27.2",
139
+ "@esbuild/openbsd-arm64": "0.27.2",
140
+ "@esbuild/openbsd-x64": "0.27.2",
141
+ "@esbuild/openharmony-arm64": "0.27.2",
142
+ "@esbuild/sunos-x64": "0.27.2",
143
+ "@esbuild/win32-arm64": "0.27.2",
144
+ "@esbuild/win32-ia32": "0.27.2",
145
+ "@esbuild/win32-x64": "0.27.2"
146
+ }
147
+ },
148
+ "node_modules/escape-string-regexp": {
149
+ "version": "1.0.5",
150
+ "dev": true,
151
+ "license": "MIT",
152
+ "engines": {
153
+ "node": ">=0.8.0"
154
+ }
155
+ },
156
+ "node_modules/has-ansi": {
157
+ "version": "2.0.0",
158
+ "dev": true,
159
+ "license": "MIT",
160
+ "dependencies": {
161
+ "ansi-regex": "^2.0.0"
162
+ },
163
+ "engines": {
164
+ "node": ">=0.10.0"
165
+ }
166
+ },
167
+ "node_modules/is-arrayish": {
168
+ "version": "0.2.1",
169
+ "dev": true,
170
+ "license": "MIT"
171
+ },
172
+ "node_modules/is-utf8": {
173
+ "version": "0.2.1",
174
+ "dev": true,
175
+ "license": "MIT"
176
+ },
177
+ "node_modules/make-error": {
178
+ "version": "1.3.6",
179
+ "dev": true,
180
+ "license": "ISC"
181
+ },
182
+ "node_modules/minimist": {
183
+ "version": "1.2.8",
184
+ "dev": true,
185
+ "license": "MIT",
186
+ "funding": {
187
+ "url": "https://github.com/sponsors/ljharb"
188
+ }
189
+ },
190
+ "node_modules/mkdirp": {
191
+ "version": "0.5.6",
192
+ "dev": true,
193
+ "license": "MIT",
194
+ "dependencies": {
195
+ "minimist": "^1.2.6"
196
+ },
197
+ "bin": {
198
+ "mkdirp": "bin/cmd.js"
199
+ }
200
+ },
201
+ "node_modules/object-assign": {
202
+ "version": "4.1.1",
203
+ "dev": true,
204
+ "license": "MIT",
205
+ "engines": {
206
+ "node": ">=0.10.0"
207
+ }
208
+ },
209
+ "node_modules/parse-json": {
210
+ "version": "2.2.0",
211
+ "dev": true,
212
+ "license": "MIT",
213
+ "dependencies": {
214
+ "error-ex": "^1.2.0"
215
+ },
216
+ "engines": {
217
+ "node": ">=0.10.0"
218
+ }
219
+ },
220
+ "node_modules/pinkie": {
221
+ "version": "2.0.4",
222
+ "dev": true,
223
+ "license": "MIT",
224
+ "engines": {
225
+ "node": ">=0.10.0"
226
+ }
227
+ },
228
+ "node_modules/source-map": {
229
+ "version": "0.5.7",
230
+ "dev": true,
231
+ "license": "BSD-3-Clause",
232
+ "engines": {
233
+ "node": ">=0.10.0"
234
+ }
235
+ },
236
+ "node_modules/source-map-support": {
237
+ "version": "0.4.18",
238
+ "dev": true,
239
+ "license": "MIT",
240
+ "dependencies": {
241
+ "source-map": "^0.5.6"
242
+ }
243
+ },
244
+ "node_modules/strip-ansi": {
245
+ "version": "3.0.1",
246
+ "dev": true,
247
+ "license": "MIT",
248
+ "dependencies": {
249
+ "ansi-regex": "^2.0.0"
250
+ },
251
+ "engines": {
252
+ "node": ">=0.10.0"
253
+ }
254
+ },
255
+ "node_modules/strip-bom": {
256
+ "version": "2.0.0",
257
+ "dev": true,
258
+ "license": "MIT",
259
+ "dependencies": {
260
+ "is-utf8": "^0.2.0"
261
+ },
262
+ "engines": {
263
+ "node": ">=0.10.0"
264
+ }
265
+ },
266
+ "node_modules/strip-json-comments": {
267
+ "version": "2.0.1",
268
+ "dev": true,
269
+ "license": "MIT",
270
+ "engines": {
271
+ "node": ">=0.10.0"
272
+ }
273
+ },
274
+ "node_modules/supports-color": {
275
+ "version": "2.0.0",
276
+ "dev": true,
277
+ "license": "MIT",
278
+ "engines": {
279
+ "node": ">=0.8.0"
280
+ }
281
+ },
282
+ "node_modules/ts-node": {
283
+ "version": "1.7.1",
284
+ "dev": true,
285
+ "license": "MIT",
286
+ "dependencies": {
287
+ "arrify": "^1.0.0",
288
+ "chalk": "^1.1.1",
289
+ "make-error": "^1.1.1",
290
+ "minimist": "^1.2.0",
291
+ "mkdirp": "^0.5.1",
292
+ "pinkie": "^2.0.4",
293
+ "source-map-support": "^0.4.0",
294
+ "tsconfig": "^5.0.2",
295
+ "v8flags": "^2.0.11",
296
+ "xtend": "^4.0.0",
297
+ "yn": "^1.2.0"
298
+ },
299
+ "bin": {
300
+ "ts-node": "dist/bin.js"
301
+ }
302
+ },
303
+ "node_modules/tsconfig": {
304
+ "version": "5.0.3",
305
+ "dev": true,
306
+ "license": "MIT",
307
+ "dependencies": {
308
+ "any-promise": "^1.3.0",
309
+ "parse-json": "^2.2.0",
310
+ "strip-bom": "^2.0.0",
311
+ "strip-json-comments": "^2.0.0"
312
+ }
313
+ },
314
+ "node_modules/typescript": {
315
+ "version": "5.9.3",
316
+ "dev": true,
317
+ "license": "Apache-2.0",
318
+ "bin": {
319
+ "tsc": "bin/tsc",
320
+ "tsserver": "bin/tsserver"
321
+ },
322
+ "engines": {
323
+ "node": ">=14.17"
324
+ }
325
+ },
326
+ "node_modules/undici-types": {
327
+ "version": "7.16.0",
328
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
329
+ "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
330
+ "dev": true,
331
+ "license": "MIT"
332
+ },
333
+ "node_modules/user-home": {
334
+ "version": "1.1.1",
335
+ "dev": true,
336
+ "license": "MIT",
337
+ "bin": {
338
+ "user-home": "cli.js"
339
+ },
340
+ "engines": {
341
+ "node": ">=0.10.0"
342
+ }
343
+ },
344
+ "node_modules/v8flags": {
345
+ "version": "2.1.1",
346
+ "dev": true,
347
+ "dependencies": {
348
+ "user-home": "^1.1.1"
349
+ },
350
+ "engines": {
351
+ "node": ">= 0.10.0"
352
+ }
353
+ },
354
+ "node_modules/xtend": {
355
+ "version": "4.0.2",
356
+ "dev": true,
357
+ "license": "MIT",
358
+ "engines": {
359
+ "node": ">=0.4"
360
+ }
361
+ },
362
+ "node_modules/yn": {
363
+ "version": "1.3.0",
364
+ "dev": true,
365
+ "license": "MIT",
366
+ "dependencies": {
367
+ "object-assign": "^4.1.1"
368
+ },
369
+ "engines": {
370
+ "node": ">=0.10.0"
371
+ }
372
+ }
373
+ }
374
+ }
@@ -9,10 +9,10 @@
9
9
  "clean": "rm -rf dist"
10
10
  },
11
11
  "devDependencies": {
12
- "@ketrics/sdk-backend": "^0.3.0",
13
- "@types/node": "^20.10.0",
14
- "esbuild": "^0.24.0",
15
- "ts-node": "^10.9.2",
12
+ "@ketrics/sdk-backend": "0.7.1",
13
+ "@types/node": ">=24.0.0",
14
+ "esbuild": "^0.27.2",
15
+ "ts-node": "^1.7.1",
16
16
  "typescript": "^5.3.3"
17
17
  }
18
18
  }
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Ketrics Application Backend
3
+ *
4
+ * Exports handler functions compatible with Ketrics data-plane-api.
5
+ *
6
+ * The `ketrics` global object is automatically typed via @ketrics/sdk.
7
+ * No imports needed - just use `ketrics.*` directly.
8
+ *
9
+ * Available SDK features:
10
+ * - ketrics.tenant, ketrics.application, ketrics.requestor, ketrics.env (context)
11
+ * - ketrics.console (logging to CloudWatch)
12
+ * - ketrics.http (HTTP client for external APIs)
13
+ * - ketrics.Volume.connect(code) (S3-backed storage)
14
+ * - ketrics.DatabaseConnection.connect(code) (external databases)
15
+ * - ketrics.Secret.get(code) (encrypted secrets)
16
+ */
17
+
18
+ // ============================================================================
19
+ // Basic Handlers
20
+ // ============================================================================
21
+
22
+ import { saveFile, readFile, generateDownloadUrl, testWriteFileWithoutVolumeGrant } from "./volume";
23
+ import { getSecret, getSecretWithoutGrant } from "./secrets";
24
+
25
+ /**
26
+ * Echo handler - returns payload with context info
27
+ *
28
+ * @param payload - Any payload to echo back
29
+ * @returns Payload with additional context information
30
+ */
31
+
32
+ const echo = async (payload: unknown) => {
33
+ ketrics.console.log(
34
+ `Echo was called by ${ketrics.requestor.type}:${ketrics.requestor.userId || ketrics.requestor.serviceAccountCode} in tenant ${ketrics.tenant.id}`,
35
+ );
36
+
37
+ // Only send message if requestor is a user
38
+
39
+ if (ketrics.requestor.type === "USER") {
40
+ await ketrics.Messages.send({
41
+ userId: ketrics.requestor.userId!,
42
+ type: "notification",
43
+ subject: "Echo called",
44
+ body: `Echo was called by ${ketrics.requestor.type}:${ketrics.requestor.email} in tenant ${ketrics.tenant.id}`,
45
+ });
46
+ }
47
+
48
+ return {
49
+ tenant: ketrics.tenant,
50
+ requestor: ketrics.requestor,
51
+ application: ketrics.application,
52
+ environment: ketrics.environment,
53
+ runtime: ketrics.runtime,
54
+ };
55
+ };
56
+
57
+ export { echo, saveFile, readFile, generateDownloadUrl, testWriteFileWithoutVolumeGrant, getSecret, getSecretWithoutGrant };
@@ -0,0 +1,17 @@
1
+ const getSecret = async (key: string): Promise<{ value: string }> => {
2
+ const value = await ketrics.Secret.get("apikey");
3
+ if (!value) {
4
+ throw new Error(`Secret with key "${key}" not found`);
5
+ }
6
+ return { value };
7
+ };
8
+
9
+ const getSecretWithoutGrant = async (key: string): Promise<{ value: string }> => {
10
+ const value = await ketrics.Secret.get("missing-grant-secret");
11
+ if (!value) {
12
+ throw new Error(`Secret with key "${key}" not found`);
13
+ }
14
+ return { value };
15
+ };
16
+
17
+ export { getSecret, getSecretWithoutGrant };
@@ -1,3 +1,10 @@
1
+ const testWriteFileWithoutVolumeGrant = async () => {
2
+ const volume = await ketrics.Volume.connect("test2");
3
+ const buffer = Buffer.from("This should fail");
4
+ const putResults = await volume.put("files/fail.txt", buffer);
5
+ return { putResults };
6
+ };
7
+
1
8
  const saveFile = async () => {
2
9
  const volume = await ketrics.Volume.connect("test-volume");
3
10
 
@@ -45,4 +52,4 @@ const generateDownloadUrl = async () => {
45
52
  return { url: results.url };
46
53
  };
47
54
 
48
- export { saveFile, readFile, generateDownloadUrl };
55
+ export { saveFile, readFile, generateDownloadUrl, testWriteFileWithoutVolumeGrant };
@@ -65,6 +65,33 @@ function App() {
65
65
  }
66
66
  };
67
67
 
68
+ const handleRunTestWriteFileWithoutVolumeGrant = async () => {
69
+ try {
70
+ const data = await apiClient.run("testWriteFileWithoutVolumeGrant");
71
+ console.log("API Data:", data);
72
+ } catch (err) {
73
+ console.error("API Error:", err);
74
+ }
75
+ };
76
+
77
+ const handleGetSecret = async () => {
78
+ try {
79
+ const data = await apiClient.run("getSecret");
80
+ console.log("Secret Data:", data);
81
+ } catch (err) {
82
+ console.error("Secret Error:", err);
83
+ }
84
+ };
85
+
86
+ const handleGetSecretWithoutGrant = async () => {
87
+ try {
88
+ const data = await apiClient.run("getSecretWithoutGrant");
89
+ console.log("Secret Data:", data);
90
+ } catch (err) {
91
+ console.error("Secret Error:", err);
92
+ }
93
+ };
94
+
68
95
  return (
69
96
  <div className="app">
70
97
  <h1>Ketrics Test Application</h1>
@@ -88,6 +115,15 @@ function App() {
88
115
  <button onClick={handleRunGenerateDownloadUrl} className="button">
89
116
  Test Generate Download URL API
90
117
  </button>
118
+ <button onClick={handleRunTestWriteFileWithoutVolumeGrant} className="button">
119
+ Test Write File Without Volume Grant API
120
+ </button>
121
+ <button onClick={handleGetSecret} className="button">
122
+ Get Secret with Grant
123
+ </button>
124
+ <button onClick={handleGetSecretWithoutGrant} className="button">
125
+ Get Secret without Grant
126
+ </button>
91
127
  </div>
92
128
 
93
129
  {error && <p className="error">{error}</p>}
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "app3",
3
+ "version": "1.0.0",
4
+ "description": "My Ketrics application",
5
+ "runtime": "nodejs18",
6
+ "actions": [
7
+ "read",
8
+ "write"
9
+ ],
10
+ "entry": "dist/index.js",
11
+ "include": [
12
+ "dist/**/*"
13
+ ],
14
+ "exclude": [
15
+ "node_modules",
16
+ "*.test.js",
17
+ "*.spec.js"
18
+ ]
19
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "endpoint": "/tenants/{{tenantId}}/applications/{{applicationId}}/functions/echo2",
3
+ "method": "POST",
4
+ "headers": {
5
+ "Authorization": "Bearer {{token}}",
6
+ "Content-Type": "application/json"
7
+ },
8
+ "body": {
9
+ "data": {
10
+ "hello": "world"
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "endpoint": "/tenants/{{tenantId}}/applications/{{applicationId}}/functions/getSecret",
3
+ "method": "POST",
4
+ "headers": {
5
+ "Authorization": "Bearer {{token}}",
6
+ "Content-Type": "application/json"
7
+ },
8
+ "body": {}
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "endpoint": "/tenants/{{tenantId}}/applications/{{applicationId}}/functions/getSecretWithoutGrant",
3
+ "method": "POST",
4
+ "headers": {
5
+ "Authorization": "Bearer {{token}}",
6
+ "Content-Type": "application/json"
7
+ },
8
+ "body": {}
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "endpoint": "/tenants/{{tenantId}}/applications/{{applicationId}}/functions/testWriteFileWithoutVolumeGrant",
3
+ "method": "POST",
4
+ "headers": {
5
+ "Authorization": "Bearer {{token}}",
6
+ "Content-Type": "application/json"
7
+ },
8
+ "body": {}
9
+ }
@@ -1,17 +0,0 @@
1
- # Ketrics Deployment Configuration
2
- # Copy this file to .env and fill in your values
3
-
4
- # Deployment token from Ketrics dashboard
5
- KETRICS_TOKEN=ktd_your-token-id_your-secret-key
6
-
7
- # API URL (default for production)
8
- KETRICS_API_URL=https://api.ketrics.cl/api/v1
9
-
10
- # Your tenant ID
11
- KETRICS_TENANT_ID=your-tenant-uuid
12
-
13
- # Application ID for this backend
14
- KETRICS_APPLICATION_ID=your-application-uuid
15
-
16
- # Optional: Custom authentication token (JWT) for Ketrics API
17
- KETRICS_AUTH_TOKEN=your-jwt-auth-token