reposets 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/README.md +15 -14
- package/bin/reposets.js +25 -507
- package/cli/commands/credentials.js +74 -0
- package/cli/commands/doctor.js +154 -0
- package/cli/commands/init.js +147 -0
- package/cli/commands/list.js +49 -0
- package/cli/commands/sync.js +70 -0
- package/cli/commands/validate.js +53 -0
- package/errors.js +12 -0
- package/index.d.ts +1750 -1840
- package/index.js +19 -2
- package/lib/crypto.js +27 -0
- package/package.json +61 -73
- package/schemas/common.js +130 -0
- package/schemas/config.js +469 -0
- package/schemas/credentials.js +78 -0
- package/schemas/environment.js +70 -0
- package/schemas/ruleset.js +545 -0
- package/services/ConfigFiles.js +119 -0
- package/services/CredentialResolver.js +40 -0
- package/services/GitHubClient.js +875 -0
- package/services/OnePasswordClient.js +30 -0
- package/services/SyncEngine.js +580 -0
- package/services/SyncLogger.js +106 -0
- package/tsdoc-metadata.json +11 -11
- package/500.js +0 -3354
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { ResolveError } from "../errors.js";
|
|
2
|
+
import { OnePasswordClient } from "./OnePasswordClient.js";
|
|
3
|
+
import { Context, Effect, Layer } from "effect";
|
|
4
|
+
import { readFileSync } from "node:fs";
|
|
5
|
+
import { isAbsolute, resolve } from "node:path";
|
|
6
|
+
|
|
7
|
+
//#region src/services/CredentialResolver.ts
|
|
8
|
+
var CredentialResolver = class extends Context.Tag("CredentialResolver")() {};
|
|
9
|
+
const CredentialResolverLive = Layer.effect(CredentialResolver, Effect.gen(function* () {
|
|
10
|
+
const opClient = yield* OnePasswordClient;
|
|
11
|
+
return { resolveAll(profile, basePath) {
|
|
12
|
+
return Effect.gen(function* () {
|
|
13
|
+
const result = /* @__PURE__ */ new Map();
|
|
14
|
+
const resolveSection = profile.resolve;
|
|
15
|
+
if (!resolveSection) return result;
|
|
16
|
+
if (resolveSection.value) for (const [label, val] of Object.entries(resolveSection.value)) if (typeof val === "string") result.set(label, val);
|
|
17
|
+
else result.set(label, JSON.stringify(val));
|
|
18
|
+
if (resolveSection.file) for (const [label, filePath] of Object.entries(resolveSection.file)) {
|
|
19
|
+
const fullPath = isAbsolute(filePath) ? filePath : resolve(basePath, filePath);
|
|
20
|
+
const content = yield* Effect.try({
|
|
21
|
+
try: () => readFileSync(fullPath, "utf-8").trim(),
|
|
22
|
+
catch: (error) => new ResolveError({ message: `Failed to read file for label '${label}': ${error instanceof Error ? error.message : String(error)}` })
|
|
23
|
+
});
|
|
24
|
+
result.set(label, content);
|
|
25
|
+
}
|
|
26
|
+
if (resolveSection.op) {
|
|
27
|
+
const opToken = profile.op_service_account_token;
|
|
28
|
+
if (!opToken) return yield* Effect.fail(new ResolveError({ message: "No 1Password service account token provided but resolve.op entries are defined" }));
|
|
29
|
+
for (const [label, reference] of Object.entries(resolveSection.op)) {
|
|
30
|
+
const value = yield* opClient.resolve(reference, opToken).pipe(Effect.mapError((err) => new ResolveError({ message: `Failed to resolve label '${label}': ${err.message}` })));
|
|
31
|
+
result.set(label, value);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return result;
|
|
35
|
+
});
|
|
36
|
+
} };
|
|
37
|
+
}));
|
|
38
|
+
|
|
39
|
+
//#endregion
|
|
40
|
+
export { CredentialResolver, CredentialResolverLive };
|