@secr/cli 0.1.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.
- package/README.md +64 -0
- package/dist/commands/completion.d.ts +3 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +51 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +66 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/delete.d.ts +3 -0
- package/dist/commands/delete.d.ts.map +1 -0
- package/dist/commands/delete.js +58 -0
- package/dist/commands/delete.js.map +1 -0
- package/dist/commands/diff.d.ts +3 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +68 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/env.d.ts +3 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/env.js +59 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/guard.d.ts +3 -0
- package/dist/commands/guard.d.ts.map +1 -0
- package/dist/commands/guard.js +108 -0
- package/dist/commands/guard.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +107 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/link.d.ts +3 -0
- package/dist/commands/link.d.ts.map +1 -0
- package/dist/commands/link.js +34 -0
- package/dist/commands/link.js.map +1 -0
- package/dist/commands/log.d.ts +3 -0
- package/dist/commands/log.d.ts.map +1 -0
- package/dist/commands/log.js +42 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/login.d.ts +3 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +101 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +3 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +10 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/ls.d.ts +3 -0
- package/dist/commands/ls.d.ts.map +1 -0
- package/dist/commands/ls.js +43 -0
- package/dist/commands/ls.js.map +1 -0
- package/dist/commands/org.d.ts +3 -0
- package/dist/commands/org.d.ts.map +1 -0
- package/dist/commands/org.js +67 -0
- package/dist/commands/org.js.map +1 -0
- package/dist/commands/promote.d.ts +3 -0
- package/dist/commands/promote.d.ts.map +1 -0
- package/dist/commands/promote.js +75 -0
- package/dist/commands/promote.js.map +1 -0
- package/dist/commands/pull.d.ts +3 -0
- package/dist/commands/pull.d.ts.map +1 -0
- package/dist/commands/pull.js +48 -0
- package/dist/commands/pull.js.map +1 -0
- package/dist/commands/rotate-key.d.ts +3 -0
- package/dist/commands/rotate-key.d.ts.map +1 -0
- package/dist/commands/rotate-key.js +39 -0
- package/dist/commands/rotate-key.js.map +1 -0
- package/dist/commands/run.d.ts +3 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +47 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/scan.d.ts +3 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +83 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/set.d.ts +3 -0
- package/dist/commands/set.d.ts.map +1 -0
- package/dist/commands/set.js +54 -0
- package/dist/commands/set.js.map +1 -0
- package/dist/commands/template.d.ts +3 -0
- package/dist/commands/template.d.ts.map +1 -0
- package/dist/commands/template.js +109 -0
- package/dist/commands/template.js.map +1 -0
- package/dist/commands/whoami.d.ts +3 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +32 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/completions/bash.sh +49 -0
- package/dist/completions/fish.fish +62 -0
- package/dist/completions/zsh.sh +106 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +62 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +94 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +185 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/config.d.ts +18 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +81 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/scanner.d.ts +29 -0
- package/dist/lib/scanner.d.ts.map +1 -0
- package/dist/lib/scanner.js +211 -0
- package/dist/lib/scanner.js.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
#compdef secr
|
|
2
|
+
|
|
3
|
+
_secr() {
|
|
4
|
+
local -a commands
|
|
5
|
+
commands=(
|
|
6
|
+
'login:Authenticate with the secr platform'
|
|
7
|
+
'logout:Clear saved credentials'
|
|
8
|
+
'whoami:Show current user and linked project'
|
|
9
|
+
'init:Create a new project interactively'
|
|
10
|
+
'link:Link current directory to a project'
|
|
11
|
+
'pull:Pull decrypted secrets'
|
|
12
|
+
'run:Run a command with secrets injected'
|
|
13
|
+
'set:Set one or more secrets'
|
|
14
|
+
'delete:Delete a secret'
|
|
15
|
+
'ls:List secret keys'
|
|
16
|
+
'log:View audit log entries'
|
|
17
|
+
'diff:Compare secrets between environments'
|
|
18
|
+
'env:Manage environments'
|
|
19
|
+
'rotate-key:Rotate the project encryption key'
|
|
20
|
+
'promote:Promote secrets between environments'
|
|
21
|
+
'template:Manage secret templates'
|
|
22
|
+
'scan:Scan for leaked secrets'
|
|
23
|
+
'guard:Manage pre-commit hook'
|
|
24
|
+
'completion:Output shell completion script'
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
_arguments -C \
|
|
28
|
+
'--help[Show help]' \
|
|
29
|
+
'--version[Show version]' \
|
|
30
|
+
'1: :->command' \
|
|
31
|
+
'*:: :->args'
|
|
32
|
+
|
|
33
|
+
case $state in
|
|
34
|
+
command)
|
|
35
|
+
_describe -t commands 'secr command' commands
|
|
36
|
+
;;
|
|
37
|
+
args)
|
|
38
|
+
case $words[1] in
|
|
39
|
+
env)
|
|
40
|
+
local -a subcommands
|
|
41
|
+
subcommands=('list:List environments' 'create:Create an environment')
|
|
42
|
+
_describe -t subcommands 'env subcommand' subcommands
|
|
43
|
+
;;
|
|
44
|
+
template)
|
|
45
|
+
local -a subcommands
|
|
46
|
+
subcommands=('list:List template keys' 'add:Add a template key' 'remove:Remove a template key' 'validate:Validate env against template')
|
|
47
|
+
_describe -t subcommands 'template subcommand' subcommands
|
|
48
|
+
;;
|
|
49
|
+
guard)
|
|
50
|
+
local -a subcommands
|
|
51
|
+
subcommands=('install:Install pre-commit hook' 'uninstall:Remove pre-commit hook' 'status:Check hook status')
|
|
52
|
+
_describe -t subcommands 'guard subcommand' subcommands
|
|
53
|
+
;;
|
|
54
|
+
completion)
|
|
55
|
+
local -a shells
|
|
56
|
+
shells=('bash:Bash completion' 'zsh:Zsh completion' 'fish:Fish completion')
|
|
57
|
+
_describe -t shells 'shell' shells
|
|
58
|
+
;;
|
|
59
|
+
pull)
|
|
60
|
+
_arguments \
|
|
61
|
+
'--env[Environment]:env:(development staging production)' \
|
|
62
|
+
'--format[Output format]:format:(dotenv json table)'
|
|
63
|
+
;;
|
|
64
|
+
set)
|
|
65
|
+
_arguments \
|
|
66
|
+
'--env[Environment]:env:(development staging production)' \
|
|
67
|
+
'--from-env[Import from .env file]:file:_files'
|
|
68
|
+
;;
|
|
69
|
+
delete)
|
|
70
|
+
_arguments \
|
|
71
|
+
'--env[Environment]:env:(development staging production)' \
|
|
72
|
+
'--force[Skip confirmation]'
|
|
73
|
+
;;
|
|
74
|
+
run|ls|log)
|
|
75
|
+
_arguments \
|
|
76
|
+
'--env[Environment]:env:(development staging production)'
|
|
77
|
+
;;
|
|
78
|
+
diff)
|
|
79
|
+
_arguments \
|
|
80
|
+
'--env[Environments to compare]' \
|
|
81
|
+
'--reveal[Show actual values]'
|
|
82
|
+
;;
|
|
83
|
+
promote)
|
|
84
|
+
_arguments \
|
|
85
|
+
'--from[Source environment]:env:(development staging production)' \
|
|
86
|
+
'--to[Target environment]:env:(development staging production)' \
|
|
87
|
+
'--dry-run[Preview without changes]' \
|
|
88
|
+
'--overwrite[Overwrite existing]' \
|
|
89
|
+
'--keys[Specific keys]'
|
|
90
|
+
;;
|
|
91
|
+
scan)
|
|
92
|
+
_arguments \
|
|
93
|
+
'--pre-commit[Scan staged files only]' \
|
|
94
|
+
'--json[JSON output]' \
|
|
95
|
+
'--list-patterns[Show detection patterns]'
|
|
96
|
+
;;
|
|
97
|
+
login)
|
|
98
|
+
_arguments \
|
|
99
|
+
'--token[Token for CI/headless login]'
|
|
100
|
+
;;
|
|
101
|
+
esac
|
|
102
|
+
;;
|
|
103
|
+
esac
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
_secr "$@"
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import { loginCommand } from "./commands/login.js";
|
|
5
|
+
import { linkCommand } from "./commands/link.js";
|
|
6
|
+
import { initCommand } from "./commands/init.js";
|
|
7
|
+
import { pullCommand } from "./commands/pull.js";
|
|
8
|
+
import { runCommand } from "./commands/run.js";
|
|
9
|
+
import { setCommand } from "./commands/set.js";
|
|
10
|
+
import { deleteCommand } from "./commands/delete.js";
|
|
11
|
+
import { lsCommand } from "./commands/ls.js";
|
|
12
|
+
import { logCommand } from "./commands/log.js";
|
|
13
|
+
import { whoamiCommand } from "./commands/whoami.js";
|
|
14
|
+
import { logoutCommand } from "./commands/logout.js";
|
|
15
|
+
import { diffCommand } from "./commands/diff.js";
|
|
16
|
+
import { envCommand } from "./commands/env.js";
|
|
17
|
+
import { rotateKeyCommand } from "./commands/rotate-key.js";
|
|
18
|
+
import { promoteCommand } from "./commands/promote.js";
|
|
19
|
+
import { templateCommand } from "./commands/template.js";
|
|
20
|
+
import { scanCommand } from "./commands/scan.js";
|
|
21
|
+
import { guardCommand } from "./commands/guard.js";
|
|
22
|
+
import { completionCommand } from "./commands/completion.js";
|
|
23
|
+
import { orgCommand } from "./commands/org.js";
|
|
24
|
+
import { configCommand } from "./commands/config.js";
|
|
25
|
+
const program = new Command();
|
|
26
|
+
program
|
|
27
|
+
.name("secr")
|
|
28
|
+
.description("Secrets management for teams. Replace .env files with something better.")
|
|
29
|
+
.version("0.1.0");
|
|
30
|
+
program.addCommand(loginCommand);
|
|
31
|
+
program.addCommand(linkCommand);
|
|
32
|
+
program.addCommand(initCommand);
|
|
33
|
+
program.addCommand(pullCommand);
|
|
34
|
+
program.addCommand(runCommand);
|
|
35
|
+
program.addCommand(setCommand);
|
|
36
|
+
program.addCommand(deleteCommand);
|
|
37
|
+
program.addCommand(lsCommand);
|
|
38
|
+
program.addCommand(logCommand);
|
|
39
|
+
program.addCommand(envCommand);
|
|
40
|
+
program.addCommand(rotateKeyCommand);
|
|
41
|
+
program.addCommand(whoamiCommand);
|
|
42
|
+
program.addCommand(logoutCommand);
|
|
43
|
+
program.addCommand(diffCommand);
|
|
44
|
+
program.addCommand(promoteCommand);
|
|
45
|
+
program.addCommand(templateCommand);
|
|
46
|
+
program.addCommand(scanCommand);
|
|
47
|
+
program.addCommand(guardCommand);
|
|
48
|
+
program.addCommand(completionCommand);
|
|
49
|
+
program.addCommand(orgCommand);
|
|
50
|
+
program.addCommand(configCommand);
|
|
51
|
+
// Global error handling
|
|
52
|
+
program.hook("preAction", () => { });
|
|
53
|
+
program.parseAsync(process.argv).catch((err) => {
|
|
54
|
+
if (err.code === "unauthorized" || err.statusCode === 401) {
|
|
55
|
+
console.error(chalk.red("\n✗ Authentication failed. Run `secr login` to re-authenticate.\n"));
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
console.error(chalk.red(`\n✗ ${err.message}\n`));
|
|
59
|
+
}
|
|
60
|
+
process.exit(1);
|
|
61
|
+
});
|
|
62
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import type { ApiProject, ApiSecret, ApiUser, ApiAuditEntry, ApiSecretMeta, ApiPromoteResult, ApiBulkDeleteResult, ApiTemplate, ApiTemplateValidation, PaginationInfo, ProjectConfig, ApiProjectConfigImportResult } from "@secr/shared";
|
|
2
|
+
export declare function apiGetMe(): Promise<ApiUser & {
|
|
3
|
+
orgs: any[];
|
|
4
|
+
}>;
|
|
5
|
+
export declare function apiCreateToken(name: string): Promise<{
|
|
6
|
+
token: string;
|
|
7
|
+
lastFour: string;
|
|
8
|
+
}>;
|
|
9
|
+
export declare function apiListProjects(orgId: string): Promise<{
|
|
10
|
+
projects: ApiProject[];
|
|
11
|
+
}>;
|
|
12
|
+
export declare function apiGetProject(orgId: string, slug: string): Promise<ApiProject>;
|
|
13
|
+
export declare function apiPullSecrets(orgSlug: string, projectSlug: string, envSlug: string): Promise<{
|
|
14
|
+
secrets: ApiSecret[];
|
|
15
|
+
}>;
|
|
16
|
+
export declare function apiListKeys(orgSlug: string, projectSlug: string, envSlug: string, options?: {
|
|
17
|
+
limit?: number;
|
|
18
|
+
offset?: number;
|
|
19
|
+
search?: string;
|
|
20
|
+
}): Promise<{
|
|
21
|
+
keys: ApiSecretMeta[];
|
|
22
|
+
pagination?: PaginationInfo;
|
|
23
|
+
}>;
|
|
24
|
+
export declare function apiSetSecret(orgSlug: string, projectSlug: string, envSlug: string, key: string, value: string): Promise<{
|
|
25
|
+
key: string;
|
|
26
|
+
version: number;
|
|
27
|
+
}>;
|
|
28
|
+
export declare function apiBulkSetSecrets(orgSlug: string, projectSlug: string, envSlug: string, secrets: {
|
|
29
|
+
key: string;
|
|
30
|
+
value: string;
|
|
31
|
+
}[]): Promise<{
|
|
32
|
+
created: number;
|
|
33
|
+
updated: number;
|
|
34
|
+
total: number;
|
|
35
|
+
}>;
|
|
36
|
+
export declare function apiDeleteSecret(orgSlug: string, projectSlug: string, envSlug: string, key: string): Promise<void>;
|
|
37
|
+
export declare function apiBulkDeleteSecrets(orgSlug: string, projectSlug: string, envSlug: string, keys: string[]): Promise<ApiBulkDeleteResult>;
|
|
38
|
+
export declare function apiCreateOrg(data: {
|
|
39
|
+
name: string;
|
|
40
|
+
slug: string;
|
|
41
|
+
}): Promise<{
|
|
42
|
+
id: string;
|
|
43
|
+
name: string;
|
|
44
|
+
slug: string;
|
|
45
|
+
plan: string;
|
|
46
|
+
}>;
|
|
47
|
+
export declare function apiDeleteOrg(orgId: string): Promise<{
|
|
48
|
+
deleted: boolean;
|
|
49
|
+
slug: string;
|
|
50
|
+
}>;
|
|
51
|
+
export declare function apiGetAuditLog(orgId: string, options?: {
|
|
52
|
+
limit?: number;
|
|
53
|
+
projectId?: string;
|
|
54
|
+
}): Promise<{
|
|
55
|
+
entries: ApiAuditEntry[];
|
|
56
|
+
}>;
|
|
57
|
+
export declare function apiCreateProject(orgId: string, data: {
|
|
58
|
+
name: string;
|
|
59
|
+
slug: string;
|
|
60
|
+
}): Promise<ApiProject>;
|
|
61
|
+
export declare function apiCreateEnvironment(orgId: string, projectSlug: string, data: {
|
|
62
|
+
name: string;
|
|
63
|
+
slug: string;
|
|
64
|
+
}): Promise<{
|
|
65
|
+
id: string;
|
|
66
|
+
name: string;
|
|
67
|
+
slug: string;
|
|
68
|
+
}>;
|
|
69
|
+
export declare function apiRotateKey(orgId: string, projectSlug: string): Promise<{
|
|
70
|
+
keyVersion: number;
|
|
71
|
+
secretsReEncrypted: number;
|
|
72
|
+
}>;
|
|
73
|
+
export declare function apiPromoteSecrets(orgSlug: string, projectSlug: string, body: {
|
|
74
|
+
fromEnv: string;
|
|
75
|
+
toEnv: string;
|
|
76
|
+
keys?: string[];
|
|
77
|
+
overwrite?: boolean;
|
|
78
|
+
}): Promise<ApiPromoteResult>;
|
|
79
|
+
export declare function apiListTemplates(orgSlug: string, projectSlug: string): Promise<{
|
|
80
|
+
templates: ApiTemplate[];
|
|
81
|
+
}>;
|
|
82
|
+
export declare function apiAddTemplate(orgSlug: string, projectSlug: string, body: {
|
|
83
|
+
key: string;
|
|
84
|
+
description?: string;
|
|
85
|
+
required?: boolean;
|
|
86
|
+
}): Promise<{
|
|
87
|
+
template: ApiTemplate;
|
|
88
|
+
}>;
|
|
89
|
+
export declare function apiRemoveTemplate(orgSlug: string, projectSlug: string, key: string): Promise<void>;
|
|
90
|
+
export declare function apiValidateTemplate(orgSlug: string, projectSlug: string, envSlug: string): Promise<ApiTemplateValidation>;
|
|
91
|
+
export declare function apiExportProjectConfig(orgId: string, projectSlug: string): Promise<ProjectConfig>;
|
|
92
|
+
export declare function apiImportProjectConfig(orgId: string, projectSlug: string, config: ProjectConfig): Promise<ApiProjectConfigImportResult>;
|
|
93
|
+
export declare function resolveOrgId(slug: string): Promise<string>;
|
|
94
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAC5D,gBAAgB,EAAE,mBAAmB,EAAE,WAAW,EAAE,qBAAqB,EAAE,cAAc,EACzF,aAAa,EAAE,4BAA4B,EAC5C,MAAM,cAAc,CAAC;AA0DtB,wBAAsB,QAAQ,IAAI,OAAO,CAAC,OAAO,GAAG;IAAE,IAAI,EAAE,GAAG,EAAE,CAAA;CAAE,CAAC,CAEnE;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAK/F;AAID,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,UAAU,EAAE,CAAA;CAAE,CAAC,CAExF;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAEpF;AAID,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,SAAS,EAAE,CAAA;CAAE,CAAC,CAEnC;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7D,OAAO,CAAC;IAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,cAAc,CAAA;CAAE,CAAC,CAOjE;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAK3C;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,GACxC,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAK9D;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,GACb,OAAO,CAAC,mBAAmB,CAAC,CAK9B;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnC,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAKnE;AAED,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAI7C;AAID,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/C,OAAO,CAAC;IAAE,OAAO,EAAE,aAAa,EAAE,CAAA;CAAE,CAAC,CAMvC;AAID,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnC,OAAO,CAAC,UAAU,CAAC,CAKrB;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnC,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAKrD;AAED,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,CAAC,CAI7D;AAID,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7E,OAAO,CAAC,gBAAgB,CAAC,CAK3B;AAID,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,SAAS,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC,CAEvC;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAC9D,OAAO,CAAC;IAAE,QAAQ,EAAE,WAAW,CAAA;CAAE,CAAC,CAKpC;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,qBAAqB,CAAC,CAEhC;AAID,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,CAAC,CAExB;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,4BAA4B,CAAC,CAKvC;AAID,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOhE"}
|
package/dist/lib/api.js
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { loadCredentials } from "./config.js";
|
|
2
|
+
const DEFAULT_API_URL = "https://api.secr.dev";
|
|
3
|
+
function getApiUrl() {
|
|
4
|
+
return process.env.SECR_API_URL || DEFAULT_API_URL;
|
|
5
|
+
}
|
|
6
|
+
async function request(path, options = {}) {
|
|
7
|
+
const creds = loadCredentials();
|
|
8
|
+
if (!creds?.token) {
|
|
9
|
+
throw new Error("Not authenticated. Run `secr login` first.");
|
|
10
|
+
}
|
|
11
|
+
const url = `${getApiUrl()}/v1${path}`;
|
|
12
|
+
let res;
|
|
13
|
+
try {
|
|
14
|
+
res = await fetch(url, {
|
|
15
|
+
...options,
|
|
16
|
+
signal: AbortSignal.timeout(30_000),
|
|
17
|
+
headers: {
|
|
18
|
+
"Content-Type": "application/json",
|
|
19
|
+
Authorization: `Bearer ${creds.token}`,
|
|
20
|
+
...options.headers,
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
if (err.name === "TimeoutError") {
|
|
26
|
+
throw new Error(`Request timed out after 30s. Is the API at ${getApiUrl()} responding?`);
|
|
27
|
+
}
|
|
28
|
+
if (err.cause?.code === "ECONNREFUSED" || err.message?.includes("fetch failed")) {
|
|
29
|
+
throw new Error(`Cannot connect to API at ${getApiUrl()}. Is the server running?`);
|
|
30
|
+
}
|
|
31
|
+
throw new Error(`Network error: ${err.message}`);
|
|
32
|
+
}
|
|
33
|
+
if (!res.ok) {
|
|
34
|
+
const body = await res.json().catch(() => ({}));
|
|
35
|
+
let message = body.message || `API error: ${res.status} ${res.statusText}`;
|
|
36
|
+
if (body.details?.length) {
|
|
37
|
+
const fieldErrors = body.details.map((d) => `${d.field}: ${d.message}`).join(", ");
|
|
38
|
+
message += ` (${fieldErrors})`;
|
|
39
|
+
}
|
|
40
|
+
const err = new Error(message);
|
|
41
|
+
err.statusCode = res.status;
|
|
42
|
+
err.code = body.error || "api_error";
|
|
43
|
+
throw err;
|
|
44
|
+
}
|
|
45
|
+
return res.json();
|
|
46
|
+
}
|
|
47
|
+
// ─── Auth ───────────────────────────────────────────────────────────────────
|
|
48
|
+
export async function apiGetMe() {
|
|
49
|
+
return request("/auth/me");
|
|
50
|
+
}
|
|
51
|
+
export async function apiCreateToken(name) {
|
|
52
|
+
return request("/auth/token", {
|
|
53
|
+
method: "POST",
|
|
54
|
+
body: JSON.stringify({ name }),
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
// ─── Projects ───────────────────────────────────────────────────────────────
|
|
58
|
+
export async function apiListProjects(orgId) {
|
|
59
|
+
return request(`/projects/${orgId}`);
|
|
60
|
+
}
|
|
61
|
+
export async function apiGetProject(orgId, slug) {
|
|
62
|
+
return request(`/projects/${orgId}/${slug}`);
|
|
63
|
+
}
|
|
64
|
+
// ─── Secrets ────────────────────────────────────────────────────────────────
|
|
65
|
+
export async function apiPullSecrets(orgSlug, projectSlug, envSlug) {
|
|
66
|
+
return request(`/secrets/${orgSlug}/${projectSlug}/${envSlug}`);
|
|
67
|
+
}
|
|
68
|
+
export async function apiListKeys(orgSlug, projectSlug, envSlug, options) {
|
|
69
|
+
const params = new URLSearchParams();
|
|
70
|
+
if (options?.limit)
|
|
71
|
+
params.set("limit", options.limit.toString());
|
|
72
|
+
if (options?.offset)
|
|
73
|
+
params.set("offset", options.offset.toString());
|
|
74
|
+
if (options?.search)
|
|
75
|
+
params.set("search", options.search);
|
|
76
|
+
const qs = params.toString() ? `?${params}` : "";
|
|
77
|
+
return request(`/secrets/${orgSlug}/${projectSlug}/${envSlug}/keys${qs}`);
|
|
78
|
+
}
|
|
79
|
+
export async function apiSetSecret(orgSlug, projectSlug, envSlug, key, value) {
|
|
80
|
+
return request(`/secrets/${orgSlug}/${projectSlug}/${envSlug}`, {
|
|
81
|
+
method: "PUT",
|
|
82
|
+
body: JSON.stringify({ key, value }),
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
export async function apiBulkSetSecrets(orgSlug, projectSlug, envSlug, secrets) {
|
|
86
|
+
return request(`/secrets/${orgSlug}/${projectSlug}/${envSlug}/bulk`, {
|
|
87
|
+
method: "POST",
|
|
88
|
+
body: JSON.stringify({ secrets }),
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
export async function apiDeleteSecret(orgSlug, projectSlug, envSlug, key) {
|
|
92
|
+
await request(`/secrets/${orgSlug}/${projectSlug}/${envSlug}/${key}`, {
|
|
93
|
+
method: "DELETE",
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
export async function apiBulkDeleteSecrets(orgSlug, projectSlug, envSlug, keys) {
|
|
97
|
+
return request(`/secrets/${orgSlug}/${projectSlug}/${envSlug}/bulk-delete`, {
|
|
98
|
+
method: "POST",
|
|
99
|
+
body: JSON.stringify({ keys }),
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
export async function apiCreateOrg(data) {
|
|
103
|
+
return request("/orgs", {
|
|
104
|
+
method: "POST",
|
|
105
|
+
body: JSON.stringify(data),
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
export async function apiDeleteOrg(orgId) {
|
|
109
|
+
return request(`/orgs/${orgId}`, {
|
|
110
|
+
method: "DELETE",
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
// ─── Audit ──────────────────────────────────────────────────────────────────
|
|
114
|
+
export async function apiGetAuditLog(orgId, options) {
|
|
115
|
+
const params = new URLSearchParams();
|
|
116
|
+
if (options?.limit)
|
|
117
|
+
params.set("limit", options.limit.toString());
|
|
118
|
+
if (options?.projectId)
|
|
119
|
+
params.set("projectId", options.projectId);
|
|
120
|
+
const qs = params.toString() ? `?${params}` : "";
|
|
121
|
+
return request(`/audit/${orgId}${qs}`);
|
|
122
|
+
}
|
|
123
|
+
// ─── Projects (additional) ──────────────────────────────────────────────────
|
|
124
|
+
export async function apiCreateProject(orgId, data) {
|
|
125
|
+
return request(`/projects/${orgId}`, {
|
|
126
|
+
method: "POST",
|
|
127
|
+
body: JSON.stringify(data),
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
export async function apiCreateEnvironment(orgId, projectSlug, data) {
|
|
131
|
+
return request(`/projects/${orgId}/${projectSlug}/environments`, {
|
|
132
|
+
method: "POST",
|
|
133
|
+
body: JSON.stringify(data),
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
export async function apiRotateKey(orgId, projectSlug) {
|
|
137
|
+
return request(`/projects/${orgId}/${projectSlug}/rotate-key`, {
|
|
138
|
+
method: "POST",
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
// ─── Promote ─────────────────────────────────────────────────────────────────
|
|
142
|
+
export async function apiPromoteSecrets(orgSlug, projectSlug, body) {
|
|
143
|
+
return request(`/secrets/${orgSlug}/${projectSlug}/promote`, {
|
|
144
|
+
method: "POST",
|
|
145
|
+
body: JSON.stringify(body),
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
// ─── Templates ──────────────────────────────────────────────────────────────
|
|
149
|
+
export async function apiListTemplates(orgSlug, projectSlug) {
|
|
150
|
+
return request(`/templates/${orgSlug}/${projectSlug}`);
|
|
151
|
+
}
|
|
152
|
+
export async function apiAddTemplate(orgSlug, projectSlug, body) {
|
|
153
|
+
return request(`/templates/${orgSlug}/${projectSlug}`, {
|
|
154
|
+
method: "POST",
|
|
155
|
+
body: JSON.stringify(body),
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
export async function apiRemoveTemplate(orgSlug, projectSlug, key) {
|
|
159
|
+
await request(`/templates/${orgSlug}/${projectSlug}/${key}`, {
|
|
160
|
+
method: "DELETE",
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
export async function apiValidateTemplate(orgSlug, projectSlug, envSlug) {
|
|
164
|
+
return request(`/templates/${orgSlug}/${projectSlug}/validate/${envSlug}`);
|
|
165
|
+
}
|
|
166
|
+
// ─── Project Config ─────────────────────────────────────────────────────────
|
|
167
|
+
export async function apiExportProjectConfig(orgId, projectSlug) {
|
|
168
|
+
return request(`/projects/${orgId}/${projectSlug}/export`);
|
|
169
|
+
}
|
|
170
|
+
export async function apiImportProjectConfig(orgId, projectSlug, config) {
|
|
171
|
+
return request(`/projects/${orgId}/${projectSlug}/import`, {
|
|
172
|
+
method: "POST",
|
|
173
|
+
body: JSON.stringify(config),
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
// ─── Helpers ────────────────────────────────────────────────────────────────
|
|
177
|
+
export async function resolveOrgId(slug) {
|
|
178
|
+
const me = await apiGetMe();
|
|
179
|
+
const org = me.orgs.find((o) => o.slug === slug);
|
|
180
|
+
if (!org) {
|
|
181
|
+
throw new Error(`Organization "${slug}" not found. Run \`secr whoami\` to see your organizations.`);
|
|
182
|
+
}
|
|
183
|
+
return org.id;
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type SecrConfig } from "@secr/shared";
|
|
2
|
+
interface Credentials {
|
|
3
|
+
token: string;
|
|
4
|
+
email: string;
|
|
5
|
+
apiUrl?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function saveCredentials(creds: Credentials): void;
|
|
8
|
+
export declare function loadCredentials(): Credentials | null;
|
|
9
|
+
export declare function clearCredentials(): void;
|
|
10
|
+
export declare function loadProjectConfig(dir?: string): SecrConfig | null;
|
|
11
|
+
export declare function saveProjectConfig(config: SecrConfig, dir?: string): void;
|
|
12
|
+
export declare function requireProjectConfig(): SecrConfig;
|
|
13
|
+
export declare function parseEnvFile(filePath: string): {
|
|
14
|
+
key: string;
|
|
15
|
+
value: string;
|
|
16
|
+
}[];
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAIjE,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAKD,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAGxD;AAED,wBAAgB,eAAe,IAAI,WAAW,GAAG,IAAI,CAOpD;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAMvC;AAID,wBAAgB,iBAAiB,CAAC,GAAG,SAAgB,GAAG,UAAU,GAAG,IAAI,CAcxE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,SAAgB,GAAG,IAAI,CAG/E;AAED,wBAAgB,oBAAoB,IAAI,UAAU,CAQjD;AAID,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CA6B/E"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { ZodError } from "zod";
|
|
5
|
+
import { SecrConfigSchema } from "@secr/shared";
|
|
6
|
+
const SECR_DIR = join(homedir(), ".secr");
|
|
7
|
+
const CREDENTIALS_FILE = join(SECR_DIR, "credentials.json");
|
|
8
|
+
export function saveCredentials(creds) {
|
|
9
|
+
mkdirSync(SECR_DIR, { recursive: true });
|
|
10
|
+
writeFileSync(CREDENTIALS_FILE, JSON.stringify(creds, null, 2), { mode: 0o600 });
|
|
11
|
+
}
|
|
12
|
+
export function loadCredentials() {
|
|
13
|
+
try {
|
|
14
|
+
const raw = readFileSync(CREDENTIALS_FILE, "utf8");
|
|
15
|
+
return JSON.parse(raw);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export function clearCredentials() {
|
|
22
|
+
try {
|
|
23
|
+
writeFileSync(CREDENTIALS_FILE, "{}", { mode: 0o600 });
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// Ignore
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// ─── Project Config (.secr.json in project root) ────────────────────────────
|
|
30
|
+
export function loadProjectConfig(dir = process.cwd()) {
|
|
31
|
+
const configPath = join(dir, ".secr.json");
|
|
32
|
+
try {
|
|
33
|
+
const raw = readFileSync(configPath, "utf8");
|
|
34
|
+
return SecrConfigSchema.parse(JSON.parse(raw));
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
if (err instanceof ZodError) {
|
|
38
|
+
const issue = err.issues[0];
|
|
39
|
+
throw new Error(`.secr.json is invalid: ${issue.path.join(".")} — ${issue.message}. Run \`secr link\` to recreate it.`);
|
|
40
|
+
}
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export function saveProjectConfig(config, dir = process.cwd()) {
|
|
45
|
+
const configPath = join(dir, ".secr.json");
|
|
46
|
+
writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
|
|
47
|
+
}
|
|
48
|
+
export function requireProjectConfig() {
|
|
49
|
+
const config = loadProjectConfig();
|
|
50
|
+
if (!config) {
|
|
51
|
+
throw new Error("No .secr.json found in this directory. Run `secr init` or `secr link` first.");
|
|
52
|
+
}
|
|
53
|
+
return config;
|
|
54
|
+
}
|
|
55
|
+
// ─── .env File Parser ───────────────────────────────────────────────────────
|
|
56
|
+
export function parseEnvFile(filePath) {
|
|
57
|
+
if (!existsSync(filePath)) {
|
|
58
|
+
throw new Error(`File not found: ${filePath}`);
|
|
59
|
+
}
|
|
60
|
+
const content = readFileSync(filePath, "utf8");
|
|
61
|
+
const secrets = [];
|
|
62
|
+
for (const line of content.split("\n")) {
|
|
63
|
+
const trimmed = line.trim();
|
|
64
|
+
if (!trimmed || trimmed.startsWith("#"))
|
|
65
|
+
continue;
|
|
66
|
+
const eqIndex = trimmed.indexOf("=");
|
|
67
|
+
if (eqIndex === -1)
|
|
68
|
+
continue;
|
|
69
|
+
const key = trimmed.slice(0, eqIndex).trim();
|
|
70
|
+
let value = trimmed.slice(eqIndex + 1).trim();
|
|
71
|
+
// Remove surrounding quotes
|
|
72
|
+
if ((value.startsWith('"') && value.endsWith('"')) || (value.startsWith("'") && value.endsWith("'"))) {
|
|
73
|
+
value = value.slice(1, -1);
|
|
74
|
+
}
|
|
75
|
+
if (key && value) {
|
|
76
|
+
secrets.push({ key, value });
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return secrets;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface SecretPattern {
|
|
2
|
+
name: string;
|
|
3
|
+
regex: RegExp;
|
|
4
|
+
description: string;
|
|
5
|
+
severity: "high" | "medium" | "low";
|
|
6
|
+
}
|
|
7
|
+
export interface ScanFinding {
|
|
8
|
+
file: string;
|
|
9
|
+
line: number;
|
|
10
|
+
column: number;
|
|
11
|
+
patternName: string;
|
|
12
|
+
redactedMatch: string;
|
|
13
|
+
severity: "high" | "medium" | "low";
|
|
14
|
+
}
|
|
15
|
+
export interface ScanResult {
|
|
16
|
+
findings: ScanFinding[];
|
|
17
|
+
filesScanned: number;
|
|
18
|
+
duration: number;
|
|
19
|
+
}
|
|
20
|
+
export declare const SECRET_PATTERNS: SecretPattern[];
|
|
21
|
+
export declare function redactMatch(match: string): string;
|
|
22
|
+
export interface ScanOptions {
|
|
23
|
+
directory?: string;
|
|
24
|
+
exclude?: string[];
|
|
25
|
+
}
|
|
26
|
+
export declare function scanDirectory(opts?: ScanOptions): ScanResult;
|
|
27
|
+
export declare function scanStagedFiles(): ScanResult;
|
|
28
|
+
export declare function checkGitignoreForEnv(dir?: string): ScanFinding[];
|
|
29
|
+
//# sourceMappingURL=scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/lib/scanner.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACrC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACrC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID,eAAO,MAAM,eAAe,EAAE,aAAa,EAiD1C,CAAC;AAqCF,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKjD;AA8BD,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,UAAU,CA+C5D;AAED,wBAAgB,eAAe,IAAI,UAAU,CAoC5C;AAED,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,MAAY,GAAG,WAAW,EAAE,CAmCrE"}
|