@ankhorage/repository 0.4.1 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/connection/adapters/createLocalProjectSnapshotReader.d.ts.map +1 -1
- package/dist/connection/adapters/createLocalProjectSnapshotReader.js +22 -6
- package/dist/connection/adapters/createLocalProjectSnapshotReader.js.map +1 -1
- package/dist/connection/adapters/createLocalProjectSnapshotReader.test.d.ts +2 -0
- package/dist/connection/adapters/createLocalProjectSnapshotReader.test.d.ts.map +1 -0
- package/dist/connection/adapters/createLocalProjectSnapshotReader.test.js +79 -0
- package/dist/connection/adapters/createLocalProjectSnapshotReader.test.js.map +1 -0
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @ankhorage/repository
|
|
2
2
|
|
|
3
|
+
## 0.4.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 068fb15: Allow source files with secret-like names while retaining credential artifact validation.
|
|
8
|
+
|
|
9
|
+
## 0.4.2
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- f5858b8: Honor project ignore rules before rejecting secret-like snapshot candidates while retaining strict validation for non-ignored secret files.
|
|
14
|
+
- 993e453: Update Ankhorage dependencies: `@ankhorage/contracts`.
|
|
15
|
+
- c3848e1: Update Ankhorage dependencies: `@ankhorage/contracts`.
|
|
16
|
+
|
|
3
17
|
## 0.4.1
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createLocalProjectSnapshotReader.d.ts","sourceRoot":"","sources":["../../../src/connection/adapters/createLocalProjectSnapshotReader.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"createLocalProjectSnapshotReader.d.ts","sourceRoot":"","sources":["../../../src/connection/adapters/createLocalProjectSnapshotReader.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAiC/E,oFAAoF;AACpF,wBAAgB,gCAAgC,IAAI,qBAAqB,CAExE"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { lstat, readdir, readFile } from 'node:fs/promises';
|
|
2
|
-
import { join, relative, resolve, sep } from 'node:path';
|
|
2
|
+
import { extname, join, relative, resolve, sep } from 'node:path';
|
|
3
3
|
import ignore, {} from 'ignore';
|
|
4
4
|
const REPOSITORY_MANIFEST_PATH = '.ankhorage/repository.json';
|
|
5
5
|
const HARD_EXCLUDED_DIRECTORIES = new Set([
|
|
@@ -15,8 +15,22 @@ const HARD_EXCLUDED_DIRECTORIES = new Set([
|
|
|
15
15
|
const SECRET_FILE_PATTERNS = [
|
|
16
16
|
/^\.env(?:\..+)?$/u,
|
|
17
17
|
/(?:^|\.)(?:pem|key|p12|pfx|keystore|mobileprovision)$/iu,
|
|
18
|
-
/(?:credentials?|secrets?|service-account)/iu,
|
|
19
18
|
];
|
|
19
|
+
const SECRET_DATA_FILE_EXTENSIONS = new Set([
|
|
20
|
+
'',
|
|
21
|
+
'.conf',
|
|
22
|
+
'.config',
|
|
23
|
+
'.ini',
|
|
24
|
+
'.json',
|
|
25
|
+
'.plist',
|
|
26
|
+
'.properties',
|
|
27
|
+
'.toml',
|
|
28
|
+
'.txt',
|
|
29
|
+
'.xml',
|
|
30
|
+
'.yaml',
|
|
31
|
+
'.yml',
|
|
32
|
+
]);
|
|
33
|
+
const SECRET_DATA_FILE_NAME_PATTERN = /(?:credentials?|secrets?|service-account)/iu;
|
|
20
34
|
/** Create a deterministic, ignore-aware reader for standalone project snapshots. */
|
|
21
35
|
export function createLocalProjectSnapshotReader() {
|
|
22
36
|
return { readAsync };
|
|
@@ -74,9 +88,6 @@ async function visitDirectory(root, directory, matcher, entries) {
|
|
|
74
88
|
if (!stats.isDirectory() && !stats.isFile()) {
|
|
75
89
|
throw new Error(`Unsupported filesystem entry in project snapshot: ${path}`);
|
|
76
90
|
}
|
|
77
|
-
if (stats.isFile() && isSecretPath(path) && path !== '.env.example') {
|
|
78
|
-
throw new Error(`Secret-like file is not allowed in project snapshots: ${path}`);
|
|
79
|
-
}
|
|
80
91
|
if (isHardExcluded(path, child.isDirectory()))
|
|
81
92
|
continue;
|
|
82
93
|
if (matcher.ignores(path) || matcher.ignores(`${path}/`))
|
|
@@ -86,6 +97,9 @@ async function visitDirectory(root, directory, matcher, entries) {
|
|
|
86
97
|
continue;
|
|
87
98
|
}
|
|
88
99
|
if (isSecretPath(path)) {
|
|
100
|
+
if (path !== '.env.example') {
|
|
101
|
+
throw new Error(`Secret-like file is not allowed in project snapshots: ${path}`);
|
|
102
|
+
}
|
|
89
103
|
continue;
|
|
90
104
|
}
|
|
91
105
|
const bytes = await readFile(absolutePath);
|
|
@@ -100,7 +114,9 @@ function isHardExcluded(path, directory) {
|
|
|
100
114
|
/** Identify credentials and private signing material by filename. */
|
|
101
115
|
function isSecretPath(path) {
|
|
102
116
|
const name = path.split('/').at(-1) ?? path;
|
|
103
|
-
return SECRET_FILE_PATTERNS.some((pattern) => pattern.test(name))
|
|
117
|
+
return (SECRET_FILE_PATTERNS.some((pattern) => pattern.test(name)) ||
|
|
118
|
+
(SECRET_DATA_FILE_EXTENSIONS.has(extname(name).toLowerCase()) &&
|
|
119
|
+
SECRET_DATA_FILE_NAME_PATTERN.test(name)));
|
|
104
120
|
}
|
|
105
121
|
/** Encode text and binary files in the representation required by Git blobs. */
|
|
106
122
|
function createEntry(path, bytes, mode) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createLocalProjectSnapshotReader.js","sourceRoot":"","sources":["../../../src/connection/adapters/createLocalProjectSnapshotReader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"createLocalProjectSnapshotReader.js","sourceRoot":"","sources":["../../../src/connection/adapters/createLocalProjectSnapshotReader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createLocalProjectSnapshotReader.test.d.ts","sourceRoot":"","sources":["../../../src/connection/adapters/createLocalProjectSnapshotReader.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { tmpdir } from 'node:os';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { expect, test } from 'bun:test';
|
|
5
|
+
import { createLocalProjectSnapshotReader } from './createLocalProjectSnapshotReader.js';
|
|
6
|
+
const REPOSITORY = {
|
|
7
|
+
provider: 'github',
|
|
8
|
+
owner: 'ankhorage',
|
|
9
|
+
name: 'demo',
|
|
10
|
+
url: 'https://github.com/ankhorage/demo',
|
|
11
|
+
defaultBranch: 'main',
|
|
12
|
+
};
|
|
13
|
+
test('excludes an ignored secret-like file before validating snapshot candidates', async () => {
|
|
14
|
+
const projectPath = await mkdtemp(join(tmpdir(), 'repository-snapshot-reader-'));
|
|
15
|
+
try {
|
|
16
|
+
await Promise.all([
|
|
17
|
+
writeFile(join(projectPath, '.gitignore'), '.env*.local\n', 'utf8'),
|
|
18
|
+
writeFile(join(projectPath, '.env.local'), 'ignored fixture\n', { mode: 0o600 }),
|
|
19
|
+
writeFile(join(projectPath, 'index.ts'), 'export {};\n', 'utf8'),
|
|
20
|
+
]);
|
|
21
|
+
const snapshot = await createLocalProjectSnapshotReader().readAsync(projectPath, REPOSITORY);
|
|
22
|
+
expect(snapshot.entries.map((entry) => entry.path)).toEqual([
|
|
23
|
+
'.ankhorage/repository.json',
|
|
24
|
+
'.gitignore',
|
|
25
|
+
'index.ts',
|
|
26
|
+
]);
|
|
27
|
+
}
|
|
28
|
+
finally {
|
|
29
|
+
await rm(projectPath, { recursive: true, force: true });
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
test('includes application source whose filename describes secret administration', async () => {
|
|
33
|
+
const projectPath = await mkdtemp(join(tmpdir(), 'repository-snapshot-reader-'));
|
|
34
|
+
const sourceDirectory = join(projectPath, 'src', 'app', 'ankh');
|
|
35
|
+
try {
|
|
36
|
+
await mkdir(sourceDirectory, { recursive: true });
|
|
37
|
+
await writeFile(join(sourceDirectory, 'secrets.tsx'), 'export default function SecretsScreen() { return null; }\n', 'utf8');
|
|
38
|
+
const snapshot = await createLocalProjectSnapshotReader().readAsync(projectPath, REPOSITORY);
|
|
39
|
+
expect(snapshot.entries.map((entry) => entry.path)).toEqual([
|
|
40
|
+
'.ankhorage/repository.json',
|
|
41
|
+
'src/app/ankh/secrets.tsx',
|
|
42
|
+
]);
|
|
43
|
+
}
|
|
44
|
+
finally {
|
|
45
|
+
await rm(projectPath, { recursive: true, force: true });
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
test('rejects a non-ignored secret-like snapshot candidate', async () => {
|
|
49
|
+
const projectPath = await mkdtemp(join(tmpdir(), 'repository-snapshot-reader-'));
|
|
50
|
+
try {
|
|
51
|
+
await writeFile(join(projectPath, '.env.local'), 'blocked fixture\n', { mode: 0o600 });
|
|
52
|
+
let rejection;
|
|
53
|
+
try {
|
|
54
|
+
await createLocalProjectSnapshotReader().readAsync(projectPath, REPOSITORY);
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
rejection = error;
|
|
58
|
+
}
|
|
59
|
+
expect(rejection).toBeInstanceOf(Error);
|
|
60
|
+
if (!(rejection instanceof Error)) {
|
|
61
|
+
throw new Error('Expected the snapshot reader to reject a non-ignored secret-like file.');
|
|
62
|
+
}
|
|
63
|
+
expect(rejection.message).toBe('Secret-like file is not allowed in project snapshots: .env.local');
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
await rm(projectPath, { recursive: true, force: true });
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
test.each(['secrets.json', 'credentials.yaml', 'google-service-account.json'])('rejects a non-ignored credential data file named %s', async (filename) => {
|
|
70
|
+
const projectPath = await mkdtemp(join(tmpdir(), 'repository-snapshot-reader-'));
|
|
71
|
+
try {
|
|
72
|
+
await writeFile(join(projectPath, filename), 'blocked fixture\n', { mode: 0o600 });
|
|
73
|
+
expect(createLocalProjectSnapshotReader().readAsync(projectPath, REPOSITORY)).rejects.toThrow(`Secret-like file is not allowed in project snapshots: ${filename}`);
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
await rm(projectPath, { recursive: true, force: true });
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
//# sourceMappingURL=createLocalProjectSnapshotReader.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createLocalProjectSnapshotReader.test.js","sourceRoot":"","sources":["../../../src/connection/adapters/createLocalProjectSnapshotReader.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ankhorage/repository",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.3",
|
|
4
4
|
"description": "Standalone repository capability for connecting and managing an app project's source repository.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -75,15 +75,15 @@
|
|
|
75
75
|
"knip:check": "ankhorage-knip"
|
|
76
76
|
},
|
|
77
77
|
"devDependencies": {
|
|
78
|
-
"@ankhorage/devtools": "^1.
|
|
78
|
+
"@ankhorage/devtools": "^1.13.0",
|
|
79
79
|
"@ankhorage/paradox": "^0.1.24",
|
|
80
80
|
"@types/bun": "^1.4.1",
|
|
81
81
|
"@types/node": "^24.13.3",
|
|
82
82
|
"typescript": "~6.0.3"
|
|
83
83
|
},
|
|
84
|
-
"packageManager": "bun@1.4.
|
|
84
|
+
"packageManager": "bun@1.4.2",
|
|
85
85
|
"dependencies": {
|
|
86
|
-
"@ankhorage/contracts": "^
|
|
86
|
+
"@ankhorage/contracts": "^12.0.1",
|
|
87
87
|
"ignore": "^7.0.8"
|
|
88
88
|
}
|
|
89
89
|
}
|