oc-codex-multi-auth 6.0.0 → 6.1.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/LICENSE +1 -1
- package/README.md +56 -18
- package/assets/readme-hero.svg +10 -10
- package/config/README.md +1 -1
- package/config/minimal-opencode.json +1 -1
- package/config/opencode-legacy.json +1 -1
- package/config/opencode-modern.json +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +112 -2525
- package/dist/index.js.map +1 -1
- package/dist/lib/accounts/persistence.d.ts +34 -0
- package/dist/lib/accounts/persistence.d.ts.map +1 -0
- package/dist/lib/accounts/persistence.js +153 -0
- package/dist/lib/accounts/persistence.js.map +1 -0
- package/dist/lib/accounts/recovery.d.ts +59 -0
- package/dist/lib/accounts/recovery.d.ts.map +1 -0
- package/dist/lib/accounts/recovery.js +229 -0
- package/dist/lib/accounts/recovery.js.map +1 -0
- package/dist/lib/accounts/rotation.d.ts +40 -0
- package/dist/lib/accounts/rotation.d.ts.map +1 -0
- package/dist/lib/accounts/rotation.js +204 -0
- package/dist/lib/accounts/rotation.js.map +1 -0
- package/dist/lib/accounts/state.d.ts +92 -0
- package/dist/lib/accounts/state.d.ts.map +1 -0
- package/dist/lib/accounts/state.js +366 -0
- package/dist/lib/accounts/state.js.map +1 -0
- package/dist/lib/accounts.d.ts +48 -91
- package/dist/lib/accounts.d.ts.map +1 -1
- package/dist/lib/accounts.js +121 -699
- package/dist/lib/accounts.js.map +1 -1
- package/dist/lib/auth/auth.d.ts +1 -1
- package/dist/lib/auth/auth.d.ts.map +1 -1
- package/dist/lib/auth/auth.js +5 -2
- package/dist/lib/auth/auth.js.map +1 -1
- package/dist/lib/auth/login-runner.d.ts +32 -0
- package/dist/lib/auth/login-runner.d.ts.map +1 -1
- package/dist/lib/auth/login-runner.js +79 -64
- package/dist/lib/auth/login-runner.js.map +1 -1
- package/dist/lib/auth/server.d.ts.map +1 -1
- package/dist/lib/auth/server.js +3 -8
- package/dist/lib/auth/server.js.map +1 -1
- package/dist/lib/circuit-breaker.d.ts +53 -2
- package/dist/lib/circuit-breaker.d.ts.map +1 -1
- package/dist/lib/circuit-breaker.js +65 -6
- package/dist/lib/circuit-breaker.js.map +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +77 -32
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/error-sentinels.d.ts +20 -0
- package/dist/lib/error-sentinels.d.ts.map +1 -0
- package/dist/lib/error-sentinels.js +28 -0
- package/dist/lib/error-sentinels.js.map +1 -0
- package/dist/lib/errors.d.ts +100 -1
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +116 -1
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/logger.d.ts +14 -1
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +65 -5
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/oauth-constants.d.ts +18 -0
- package/dist/lib/oauth-constants.d.ts.map +1 -0
- package/dist/lib/oauth-constants.js +18 -0
- package/dist/lib/oauth-constants.js.map +1 -0
- package/dist/lib/oauth-success.d.ts +2 -0
- package/dist/lib/oauth-success.d.ts.map +1 -0
- package/dist/lib/oauth-success.html +711 -711
- package/dist/lib/oauth-success.js +714 -0
- package/dist/lib/oauth-success.js.map +1 -0
- package/dist/lib/prompts/codex.d.ts.map +1 -1
- package/dist/lib/prompts/codex.js +12 -3
- package/dist/lib/prompts/codex.js.map +1 -1
- package/dist/lib/prompts/opencode-codex.d.ts.map +1 -1
- package/dist/lib/prompts/opencode-codex.js +3 -2
- package/dist/lib/prompts/opencode-codex.js.map +1 -1
- package/dist/lib/recovery/hook.d.ts +43 -0
- package/dist/lib/recovery/hook.d.ts.map +1 -0
- package/dist/lib/recovery/hook.js +325 -0
- package/dist/lib/recovery/hook.js.map +1 -0
- package/dist/lib/recovery/index.d.ts +1 -0
- package/dist/lib/recovery/index.d.ts.map +1 -1
- package/dist/lib/recovery/index.js +1 -0
- package/dist/lib/recovery/index.js.map +1 -1
- package/dist/lib/recovery/storage.d.ts.map +1 -1
- package/dist/lib/recovery/storage.js +5 -1
- package/dist/lib/recovery/storage.js.map +1 -1
- package/dist/lib/recovery.d.ts +15 -30
- package/dist/lib/recovery.d.ts.map +1 -1
- package/dist/lib/recovery.js +14 -312
- package/dist/lib/recovery.js.map +1 -1
- package/dist/lib/request/fetch-helpers.d.ts +1 -0
- package/dist/lib/request/fetch-helpers.d.ts.map +1 -1
- package/dist/lib/request/fetch-helpers.js +58 -10
- package/dist/lib/request/fetch-helpers.js.map +1 -1
- package/dist/lib/request/response-handler.d.ts.map +1 -1
- package/dist/lib/request/response-handler.js +8 -2
- package/dist/lib/request/response-handler.js.map +1 -1
- package/dist/lib/runtime.d.ts +101 -0
- package/dist/lib/runtime.d.ts.map +1 -0
- package/dist/lib/runtime.js +77 -0
- package/dist/lib/runtime.js.map +1 -0
- package/dist/lib/schemas.d.ts +164 -1
- package/dist/lib/schemas.d.ts.map +1 -1
- package/dist/lib/schemas.js +251 -0
- package/dist/lib/schemas.js.map +1 -1
- package/dist/lib/storage/atomic-write.d.ts +31 -0
- package/dist/lib/storage/atomic-write.d.ts.map +1 -0
- package/dist/lib/storage/atomic-write.js +75 -0
- package/dist/lib/storage/atomic-write.js.map +1 -0
- package/dist/lib/storage/backup.d.ts +13 -0
- package/dist/lib/storage/backup.d.ts.map +1 -0
- package/dist/lib/storage/backup.js +59 -0
- package/dist/lib/storage/backup.js.map +1 -0
- package/dist/lib/storage/errors.d.ts +17 -0
- package/dist/lib/storage/errors.d.ts.map +1 -0
- package/dist/lib/storage/errors.js +38 -0
- package/dist/lib/storage/errors.js.map +1 -0
- package/dist/lib/storage/export-import.d.ts +84 -0
- package/dist/lib/storage/export-import.d.ts.map +1 -0
- package/dist/lib/storage/export-import.js +222 -0
- package/dist/lib/storage/export-import.js.map +1 -0
- package/dist/lib/storage/flagged.d.ts +29 -0
- package/dist/lib/storage/flagged.d.ts.map +1 -0
- package/dist/lib/storage/flagged.js +207 -0
- package/dist/lib/storage/flagged.js.map +1 -0
- package/dist/lib/storage/identity.d.ts +72 -0
- package/dist/lib/storage/identity.d.ts.map +1 -0
- package/dist/lib/storage/identity.js +230 -0
- package/dist/lib/storage/identity.js.map +1 -0
- package/dist/lib/storage/keychain.d.ts +146 -0
- package/dist/lib/storage/keychain.d.ts.map +1 -0
- package/dist/lib/storage/keychain.js +278 -0
- package/dist/lib/storage/keychain.js.map +1 -0
- package/dist/lib/storage/load-save.d.ts +61 -0
- package/dist/lib/storage/load-save.d.ts.map +1 -0
- package/dist/lib/storage/load-save.js +606 -0
- package/dist/lib/storage/load-save.js.map +1 -0
- package/dist/lib/storage/migrations.d.ts +35 -0
- package/dist/lib/storage/migrations.d.ts.map +1 -1
- package/dist/lib/storage/migrations.js +37 -0
- package/dist/lib/storage/migrations.js.map +1 -1
- package/dist/lib/storage/normalize.d.ts +22 -0
- package/dist/lib/storage/normalize.d.ts.map +1 -0
- package/dist/lib/storage/normalize.js +114 -0
- package/dist/lib/storage/normalize.js.map +1 -0
- package/dist/lib/storage/paths.d.ts.map +1 -1
- package/dist/lib/storage/paths.js +2 -1
- package/dist/lib/storage/paths.js.map +1 -1
- package/dist/lib/storage/state.d.ts +46 -0
- package/dist/lib/storage/state.d.ts.map +1 -0
- package/dist/lib/storage/state.js +100 -0
- package/dist/lib/storage/state.js.map +1 -0
- package/dist/lib/storage/worktree-lock.d.ts +79 -0
- package/dist/lib/storage/worktree-lock.d.ts.map +1 -0
- package/dist/lib/storage/worktree-lock.js +265 -0
- package/dist/lib/storage/worktree-lock.js.map +1 -0
- package/dist/lib/storage.d.ts +21 -155
- package/dist/lib/storage.d.ts.map +1 -1
- package/dist/lib/storage.js +24 -1167
- package/dist/lib/storage.js.map +1 -1
- package/dist/lib/tools/_shared.d.ts +16 -0
- package/dist/lib/tools/_shared.d.ts.map +1 -0
- package/dist/lib/tools/_shared.js +21 -0
- package/dist/lib/tools/_shared.js.map +1 -0
- package/dist/lib/tools/codex-dashboard.d.ts +8 -0
- package/dist/lib/tools/codex-dashboard.d.ts.map +1 -0
- package/dist/lib/tools/codex-dashboard.js +176 -0
- package/dist/lib/tools/codex-dashboard.js.map +1 -0
- package/dist/lib/tools/codex-diag.d.ts +19 -0
- package/dist/lib/tools/codex-diag.d.ts.map +1 -0
- package/dist/lib/tools/codex-diag.js +139 -0
- package/dist/lib/tools/codex-diag.js.map +1 -0
- package/dist/lib/tools/codex-diff.d.ts +44 -0
- package/dist/lib/tools/codex-diff.d.ts.map +1 -0
- package/dist/lib/tools/codex-diff.js +284 -0
- package/dist/lib/tools/codex-diff.js.map +1 -0
- package/dist/lib/tools/codex-doctor.d.ts +8 -0
- package/dist/lib/tools/codex-doctor.d.ts.map +1 -0
- package/dist/lib/tools/codex-doctor.js +284 -0
- package/dist/lib/tools/codex-doctor.js.map +1 -0
- package/dist/lib/tools/codex-export.d.ts +8 -0
- package/dist/lib/tools/codex-export.d.ts.map +1 -0
- package/dist/lib/tools/codex-export.js +63 -0
- package/dist/lib/tools/codex-export.js.map +1 -0
- package/dist/lib/tools/codex-health.d.ts +8 -0
- package/dist/lib/tools/codex-health.d.ts.map +1 -0
- package/dist/lib/tools/codex-health.js +124 -0
- package/dist/lib/tools/codex-health.js.map +1 -0
- package/dist/lib/tools/codex-help.d.ts +8 -0
- package/dist/lib/tools/codex-help.d.ts.map +1 -0
- package/dist/lib/tools/codex-help.js +127 -0
- package/dist/lib/tools/codex-help.js.map +1 -0
- package/dist/lib/tools/codex-import.d.ts +8 -0
- package/dist/lib/tools/codex-import.d.ts.map +1 -0
- package/dist/lib/tools/codex-import.js +97 -0
- package/dist/lib/tools/codex-import.js.map +1 -0
- package/dist/lib/tools/codex-keychain.d.ts +36 -0
- package/dist/lib/tools/codex-keychain.d.ts.map +1 -0
- package/dist/lib/tools/codex-keychain.js +289 -0
- package/dist/lib/tools/codex-keychain.js.map +1 -0
- package/dist/lib/tools/codex-label.d.ts +8 -0
- package/dist/lib/tools/codex-label.d.ts.map +1 -0
- package/dist/lib/tools/codex-label.js +143 -0
- package/dist/lib/tools/codex-label.js.map +1 -0
- package/dist/lib/tools/codex-limits.d.ts +8 -0
- package/dist/lib/tools/codex-limits.d.ts.map +1 -0
- package/dist/lib/tools/codex-limits.js +497 -0
- package/dist/lib/tools/codex-limits.js.map +1 -0
- package/dist/lib/tools/codex-list.d.ts +8 -0
- package/dist/lib/tools/codex-list.d.ts.map +1 -0
- package/dist/lib/tools/codex-list.js +260 -0
- package/dist/lib/tools/codex-list.js.map +1 -0
- package/dist/lib/tools/codex-metrics.d.ts +8 -0
- package/dist/lib/tools/codex-metrics.d.ts.map +1 -0
- package/dist/lib/tools/codex-metrics.js +180 -0
- package/dist/lib/tools/codex-metrics.js.map +1 -0
- package/dist/lib/tools/codex-next.d.ts +8 -0
- package/dist/lib/tools/codex-next.d.ts.map +1 -0
- package/dist/lib/tools/codex-next.js +54 -0
- package/dist/lib/tools/codex-next.js.map +1 -0
- package/dist/lib/tools/codex-note.d.ts +8 -0
- package/dist/lib/tools/codex-note.d.ts.map +1 -0
- package/dist/lib/tools/codex-note.js +79 -0
- package/dist/lib/tools/codex-note.js.map +1 -0
- package/dist/lib/tools/codex-refresh.d.ts +8 -0
- package/dist/lib/tools/codex-refresh.d.ts.map +1 -0
- package/dist/lib/tools/codex-refresh.js +78 -0
- package/dist/lib/tools/codex-refresh.js.map +1 -0
- package/dist/lib/tools/codex-remove.d.ts +8 -0
- package/dist/lib/tools/codex-remove.d.ts.map +1 -0
- package/dist/lib/tools/codex-remove.js +184 -0
- package/dist/lib/tools/codex-remove.js.map +1 -0
- package/dist/lib/tools/codex-setup.d.ts +8 -0
- package/dist/lib/tools/codex-setup.d.ts.map +1 -0
- package/dist/lib/tools/codex-setup.js +26 -0
- package/dist/lib/tools/codex-setup.js.map +1 -0
- package/dist/lib/tools/codex-status.d.ts +8 -0
- package/dist/lib/tools/codex-status.d.ts.map +1 -0
- package/dist/lib/tools/codex-status.js +263 -0
- package/dist/lib/tools/codex-status.js.map +1 -0
- package/dist/lib/tools/codex-switch.d.ts +8 -0
- package/dist/lib/tools/codex-switch.d.ts.map +1 -0
- package/dist/lib/tools/codex-switch.js +122 -0
- package/dist/lib/tools/codex-switch.js.map +1 -0
- package/dist/lib/tools/codex-tag.d.ts +8 -0
- package/dist/lib/tools/codex-tag.d.ts.map +1 -0
- package/dist/lib/tools/codex-tag.js +101 -0
- package/dist/lib/tools/codex-tag.js.map +1 -0
- package/dist/lib/tools/index.d.ts +143 -0
- package/dist/lib/tools/index.d.ts.map +1 -0
- package/dist/lib/tools/index.js +67 -0
- package/dist/lib/tools/index.js.map +1 -0
- package/dist/lib/ui/format.d.ts.map +1 -1
- package/dist/lib/ui/format.js +5 -0
- package/dist/lib/ui/format.js.map +1 -1
- package/dist/lib/ui/runtime.d.ts +10 -0
- package/dist/lib/ui/runtime.d.ts.map +1 -1
- package/dist/lib/ui/runtime.js +16 -11
- package/dist/lib/ui/runtime.js.map +1 -1
- package/dist/lib/ui/select.d.ts.map +1 -1
- package/dist/lib/ui/select.js +12 -3
- package/dist/lib/ui/select.js.map +1 -1
- package/dist/lib/ui/theme.d.ts +19 -0
- package/dist/lib/ui/theme.d.ts.map +1 -1
- package/dist/lib/ui/theme.js +27 -0
- package/dist/lib/ui/theme.js.map +1 -1
- package/package.json +24 -16
- package/scripts/copy-oauth-success.js +16 -6
- package/scripts/install-oc-codex-multi-auth-core.js +462 -381
- package/scripts/install-oc-codex-multi-auth.js +15 -15
- package/scripts/test-all-models.sh +1 -1
- package/dist/lib/audit.d.ts +0 -45
- package/dist/lib/audit.d.ts.map +0 -1
- package/dist/lib/audit.js +0 -154
- package/dist/lib/audit.js.map +0 -1
- package/dist/lib/auth-rate-limit.d.ts +0 -20
- package/dist/lib/auth-rate-limit.d.ts.map +0 -1
- package/dist/lib/auth-rate-limit.js +0 -91
- package/dist/lib/auth-rate-limit.js.map +0 -1
- package/dist/lib/runtime-contracts.d.ts +0 -16
- package/dist/lib/runtime-contracts.d.ts.map +0 -1
- package/dist/lib/runtime-contracts.js +0 -24
- package/dist/lib/runtime-contracts.js.map +0 -1
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
import { resolve } from "node:path";
|
|
4
|
-
import { fileURLToPath } from "node:url";
|
|
5
|
-
import { runInstaller } from "./install-oc-codex-multi-auth-core.js";
|
|
6
|
-
|
|
7
|
-
export * from "./install-oc-codex-multi-auth-core.js";
|
|
8
|
-
|
|
9
|
-
if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
|
|
10
|
-
runInstaller().catch((error) => {
|
|
11
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
12
|
-
console.error(`Installer failed: ${message}`);
|
|
13
|
-
process.exit(1);
|
|
14
|
-
});
|
|
15
|
-
}
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { resolve } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { runInstaller } from "./install-oc-codex-multi-auth-core.js";
|
|
6
|
+
|
|
7
|
+
export * from "./install-oc-codex-multi-auth-core.js";
|
|
8
|
+
|
|
9
|
+
if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
|
|
10
|
+
runInstaller().catch((error) => {
|
|
11
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
12
|
+
console.error(`Installer failed: ${message}`);
|
|
13
|
+
process.exit(1);
|
|
14
|
+
});
|
|
15
|
+
}
|
|
@@ -149,7 +149,7 @@ update_config() {
|
|
|
149
149
|
esac
|
|
150
150
|
|
|
151
151
|
# Replace npm package with local dist for testing
|
|
152
|
-
sed -i.bak -E 's|"oc-codex-multi-auth(@[^"]*)?"|"file://'"${REPO_DIR}"'/dist"|' "${OPENCODE_JSON}"
|
|
152
|
+
sed -i.bak -E 's|"oc-codex-multi-auth(@[^"]*)?"|"file://'"${REPO_DIR}"'/dist"|' "${OPENCODE_JSON}"
|
|
153
153
|
|
|
154
154
|
rm -f "${OPENCODE_JSON}.bak"
|
|
155
155
|
echo "✓ Using local dist for plugin"
|
package/dist/lib/audit.d.ts
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
export declare enum AuditAction {
|
|
2
|
-
ACCOUNT_ADD = "account.add",
|
|
3
|
-
ACCOUNT_REMOVE = "account.remove",
|
|
4
|
-
ACCOUNT_SWITCH = "account.switch",
|
|
5
|
-
ACCOUNT_REFRESH = "account.refresh",
|
|
6
|
-
ACCOUNT_EXPORT = "account.export",
|
|
7
|
-
ACCOUNT_IMPORT = "account.import",
|
|
8
|
-
AUTH_LOGIN = "auth.login",
|
|
9
|
-
AUTH_LOGOUT = "auth.logout",
|
|
10
|
-
AUTH_REFRESH = "auth.refresh",
|
|
11
|
-
AUTH_FAILURE = "auth.failure",
|
|
12
|
-
CONFIG_LOAD = "config.load",
|
|
13
|
-
CONFIG_CHANGE = "config.change",
|
|
14
|
-
REQUEST_START = "request.start",
|
|
15
|
-
REQUEST_SUCCESS = "request.success",
|
|
16
|
-
REQUEST_FAILURE = "request.failure",
|
|
17
|
-
CIRCUIT_OPEN = "circuit.open",
|
|
18
|
-
CIRCUIT_CLOSE = "circuit.close"
|
|
19
|
-
}
|
|
20
|
-
export declare enum AuditOutcome {
|
|
21
|
-
SUCCESS = "success",
|
|
22
|
-
FAILURE = "failure",
|
|
23
|
-
PARTIAL = "partial"
|
|
24
|
-
}
|
|
25
|
-
export interface AuditEntry {
|
|
26
|
-
timestamp: string;
|
|
27
|
-
correlationId: string | null;
|
|
28
|
-
action: AuditAction;
|
|
29
|
-
actor: string;
|
|
30
|
-
resource: string;
|
|
31
|
-
outcome: AuditOutcome;
|
|
32
|
-
metadata?: Record<string, unknown>;
|
|
33
|
-
}
|
|
34
|
-
export interface AuditConfig {
|
|
35
|
-
enabled: boolean;
|
|
36
|
-
logDir: string;
|
|
37
|
-
maxFileSizeBytes: number;
|
|
38
|
-
maxFiles: number;
|
|
39
|
-
}
|
|
40
|
-
export declare function configureAudit(config: Partial<AuditConfig>): void;
|
|
41
|
-
export declare function getAuditConfig(): AuditConfig;
|
|
42
|
-
export declare function auditLog(action: AuditAction, actor: string, resource: string, outcome: AuditOutcome, metadata?: Record<string, unknown>): void;
|
|
43
|
-
export declare function getAuditLogPath(): string;
|
|
44
|
-
export declare function listAuditLogFiles(): string[];
|
|
45
|
-
//# sourceMappingURL=audit.d.ts.map
|
package/dist/lib/audit.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../lib/audit.ts"],"names":[],"mappings":"AA4BA,oBAAY,WAAW;IACtB,WAAW,gBAAgB;IAC3B,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;IACjC,eAAe,oBAAoB;IACnC,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;IACjC,UAAU,eAAe;IACzB,WAAW,gBAAgB;IAC3B,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAC7B,WAAW,gBAAgB;IAC3B,aAAa,kBAAkB;IAC/B,aAAa,kBAAkB;IAC/B,eAAe,oBAAoB;IACnC,eAAe,oBAAoB;IACnC,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;CAC/B;AAED,oBAAY,YAAY;IACvB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,OAAO,YAAY;CACnB;AAED,MAAM,WAAW,UAAU;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,WAAW;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAWD,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAEjE;AAED,wBAAgB,cAAc,IAAI,WAAW,CAE5C;AA0DD,wBAAgB,QAAQ,CACvB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,YAAY,EACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,IAAI,CAyBN;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAO5C"}
|
package/dist/lib/audit.js
DELETED
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
import { mkdirSync, existsSync, statSync, renameSync, readdirSync, unlinkSync, appendFileSync } from "node:fs";
|
|
2
|
-
// Simple in-memory queue to prevent EBUSY locks during highly concurrent writes
|
|
3
|
-
const logQueue = [];
|
|
4
|
-
let isFlushing = false;
|
|
5
|
-
function flushLogQueue(logPath) {
|
|
6
|
-
if (isFlushing || logQueue.length === 0)
|
|
7
|
-
return;
|
|
8
|
-
isFlushing = true;
|
|
9
|
-
const itemsToFlush = logQueue.splice(0, logQueue.length);
|
|
10
|
-
const payload = itemsToFlush.join("");
|
|
11
|
-
try {
|
|
12
|
-
appendFileSync(logPath, payload);
|
|
13
|
-
}
|
|
14
|
-
catch (error) {
|
|
15
|
-
// If the file is locked by an external process (e.g. antivirus),
|
|
16
|
-
// we unshift the items back to the front of the queue to try again later
|
|
17
|
-
logQueue.unshift(...itemsToFlush);
|
|
18
|
-
console.error("[AuditLog] Failed to flush queue, retaining items:", error);
|
|
19
|
-
}
|
|
20
|
-
finally {
|
|
21
|
-
isFlushing = false;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
import { join } from "node:path";
|
|
25
|
-
import { homedir } from "node:os";
|
|
26
|
-
import { getCorrelationId, maskEmail } from "./logger.js";
|
|
27
|
-
export var AuditAction;
|
|
28
|
-
(function (AuditAction) {
|
|
29
|
-
AuditAction["ACCOUNT_ADD"] = "account.add";
|
|
30
|
-
AuditAction["ACCOUNT_REMOVE"] = "account.remove";
|
|
31
|
-
AuditAction["ACCOUNT_SWITCH"] = "account.switch";
|
|
32
|
-
AuditAction["ACCOUNT_REFRESH"] = "account.refresh";
|
|
33
|
-
AuditAction["ACCOUNT_EXPORT"] = "account.export";
|
|
34
|
-
AuditAction["ACCOUNT_IMPORT"] = "account.import";
|
|
35
|
-
AuditAction["AUTH_LOGIN"] = "auth.login";
|
|
36
|
-
AuditAction["AUTH_LOGOUT"] = "auth.logout";
|
|
37
|
-
AuditAction["AUTH_REFRESH"] = "auth.refresh";
|
|
38
|
-
AuditAction["AUTH_FAILURE"] = "auth.failure";
|
|
39
|
-
AuditAction["CONFIG_LOAD"] = "config.load";
|
|
40
|
-
AuditAction["CONFIG_CHANGE"] = "config.change";
|
|
41
|
-
AuditAction["REQUEST_START"] = "request.start";
|
|
42
|
-
AuditAction["REQUEST_SUCCESS"] = "request.success";
|
|
43
|
-
AuditAction["REQUEST_FAILURE"] = "request.failure";
|
|
44
|
-
AuditAction["CIRCUIT_OPEN"] = "circuit.open";
|
|
45
|
-
AuditAction["CIRCUIT_CLOSE"] = "circuit.close";
|
|
46
|
-
})(AuditAction || (AuditAction = {}));
|
|
47
|
-
export var AuditOutcome;
|
|
48
|
-
(function (AuditOutcome) {
|
|
49
|
-
AuditOutcome["SUCCESS"] = "success";
|
|
50
|
-
AuditOutcome["FAILURE"] = "failure";
|
|
51
|
-
AuditOutcome["PARTIAL"] = "partial";
|
|
52
|
-
})(AuditOutcome || (AuditOutcome = {}));
|
|
53
|
-
const DEFAULT_CONFIG = {
|
|
54
|
-
enabled: true,
|
|
55
|
-
logDir: join(homedir(), ".opencode", "logs"),
|
|
56
|
-
maxFileSizeBytes: 10 * 1024 * 1024,
|
|
57
|
-
maxFiles: 5,
|
|
58
|
-
};
|
|
59
|
-
let auditConfig = { ...DEFAULT_CONFIG };
|
|
60
|
-
export function configureAudit(config) {
|
|
61
|
-
auditConfig = { ...auditConfig, ...config };
|
|
62
|
-
}
|
|
63
|
-
export function getAuditConfig() {
|
|
64
|
-
return { ...auditConfig };
|
|
65
|
-
}
|
|
66
|
-
function ensureLogDir() {
|
|
67
|
-
if (!existsSync(auditConfig.logDir)) {
|
|
68
|
-
mkdirSync(auditConfig.logDir, { recursive: true, mode: 0o700 });
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
function getLogFilePath() {
|
|
72
|
-
return join(auditConfig.logDir, "audit.log");
|
|
73
|
-
}
|
|
74
|
-
function rotateLogsIfNeeded() {
|
|
75
|
-
const logPath = getLogFilePath();
|
|
76
|
-
if (!existsSync(logPath))
|
|
77
|
-
return;
|
|
78
|
-
const stats = statSync(logPath);
|
|
79
|
-
if (stats.size < auditConfig.maxFileSizeBytes)
|
|
80
|
-
return;
|
|
81
|
-
for (let i = auditConfig.maxFiles - 1; i >= 1; i--) {
|
|
82
|
-
const older = join(auditConfig.logDir, `audit.${i}.log`);
|
|
83
|
-
const newer = i === 1 ? logPath : join(auditConfig.logDir, `audit.${i - 1}.log`);
|
|
84
|
-
if (i === auditConfig.maxFiles - 1 && existsSync(older)) {
|
|
85
|
-
unlinkSync(older);
|
|
86
|
-
}
|
|
87
|
-
if (existsSync(newer)) {
|
|
88
|
-
renameSync(newer, older);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
function sanitizeActor(actor) {
|
|
93
|
-
if (actor.includes("@")) {
|
|
94
|
-
return maskEmail(actor);
|
|
95
|
-
}
|
|
96
|
-
return actor;
|
|
97
|
-
}
|
|
98
|
-
function sanitizeMetadata(metadata) {
|
|
99
|
-
if (!metadata)
|
|
100
|
-
return undefined;
|
|
101
|
-
const sanitized = {};
|
|
102
|
-
for (const [key, value] of Object.entries(metadata)) {
|
|
103
|
-
const lowerKey = key.toLowerCase();
|
|
104
|
-
if (lowerKey.includes("token") || lowerKey.includes("secret") || lowerKey.includes("password")) {
|
|
105
|
-
sanitized[key] = "***REDACTED***";
|
|
106
|
-
}
|
|
107
|
-
else if (typeof value === "string" && value.includes("@")) {
|
|
108
|
-
sanitized[key] = maskEmail(value);
|
|
109
|
-
}
|
|
110
|
-
else if (typeof value === "object" && value !== null) {
|
|
111
|
-
sanitized[key] = sanitizeMetadata(value);
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
sanitized[key] = value;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
return sanitized;
|
|
118
|
-
}
|
|
119
|
-
export function auditLog(action, actor, resource, outcome, metadata) {
|
|
120
|
-
if (!auditConfig.enabled)
|
|
121
|
-
return;
|
|
122
|
-
try {
|
|
123
|
-
ensureLogDir();
|
|
124
|
-
rotateLogsIfNeeded();
|
|
125
|
-
const entry = {
|
|
126
|
-
timestamp: new Date().toISOString(),
|
|
127
|
-
correlationId: getCorrelationId(),
|
|
128
|
-
action,
|
|
129
|
-
actor: sanitizeActor(actor),
|
|
130
|
-
resource,
|
|
131
|
-
outcome,
|
|
132
|
-
metadata: sanitizeMetadata(metadata),
|
|
133
|
-
};
|
|
134
|
-
const logPath = getLogFilePath();
|
|
135
|
-
const line = JSON.stringify(entry) + "\n";
|
|
136
|
-
logQueue.push(line);
|
|
137
|
-
flushLogQueue(logPath);
|
|
138
|
-
}
|
|
139
|
-
catch {
|
|
140
|
-
// Audit logging should never break the application
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
export function getAuditLogPath() {
|
|
144
|
-
return getLogFilePath();
|
|
145
|
-
}
|
|
146
|
-
export function listAuditLogFiles() {
|
|
147
|
-
ensureLogDir();
|
|
148
|
-
const files = readdirSync(auditConfig.logDir);
|
|
149
|
-
return files
|
|
150
|
-
.filter((f) => f.startsWith("audit") && f.endsWith(".log"))
|
|
151
|
-
.map((f) => join(auditConfig.logDir, f))
|
|
152
|
-
.sort();
|
|
153
|
-
}
|
|
154
|
-
//# sourceMappingURL=audit.js.map
|
package/dist/lib/audit.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../lib/audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
export interface AuthRateLimitConfig {
|
|
2
|
-
maxAttempts: number;
|
|
3
|
-
windowMs: number;
|
|
4
|
-
}
|
|
5
|
-
export declare function configureAuthRateLimit(newConfig: Partial<AuthRateLimitConfig>): void;
|
|
6
|
-
export declare function getAuthRateLimitConfig(): AuthRateLimitConfig;
|
|
7
|
-
export declare function canAttemptAuth(accountId: string): boolean;
|
|
8
|
-
export declare function recordAuthAttempt(accountId: string): void;
|
|
9
|
-
export declare function getAttemptsRemaining(accountId: string): number;
|
|
10
|
-
export declare function getTimeUntilReset(accountId: string): number;
|
|
11
|
-
export declare function resetAuthRateLimit(accountId: string): void;
|
|
12
|
-
export declare function resetAllAuthRateLimits(): void;
|
|
13
|
-
export declare class AuthRateLimitError extends Error {
|
|
14
|
-
readonly accountId: string;
|
|
15
|
-
readonly attemptsRemaining: number;
|
|
16
|
-
readonly resetAfterMs: number;
|
|
17
|
-
constructor(accountId: string, attemptsRemaining: number, resetAfterMs: number);
|
|
18
|
-
}
|
|
19
|
-
export declare function checkAuthRateLimit(accountId: string): void;
|
|
20
|
-
//# sourceMappingURL=auth-rate-limit.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth-rate-limit.d.ts","sourceRoot":"","sources":["../../lib/auth-rate-limit.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAcD,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAEpF;AAED,wBAAgB,sBAAsB,IAAI,mBAAmB,CAE5D;AAWD,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAYzD;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAYzD;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAY9D;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAmB3D;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAG1D;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAED,qBAAa,kBAAmB,SAAQ,KAAK;aAE3B,SAAS,EAAE,MAAM;aACjB,iBAAiB,EAAE,MAAM;aACzB,YAAY,EAAE,MAAM;gBAFpB,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EACzB,YAAY,EAAE,MAAM;CAMrC;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAQ1D"}
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
const DEFAULT_CONFIG = {
|
|
2
|
-
maxAttempts: 5,
|
|
3
|
-
windowMs: 60_000,
|
|
4
|
-
};
|
|
5
|
-
const attemptsByAccount = new Map();
|
|
6
|
-
let config = { ...DEFAULT_CONFIG };
|
|
7
|
-
export function configureAuthRateLimit(newConfig) {
|
|
8
|
-
config = { ...config, ...newConfig };
|
|
9
|
-
}
|
|
10
|
-
export function getAuthRateLimitConfig() {
|
|
11
|
-
return { ...config };
|
|
12
|
-
}
|
|
13
|
-
function getAccountKey(accountId) {
|
|
14
|
-
return accountId.toLowerCase().trim();
|
|
15
|
-
}
|
|
16
|
-
function pruneOldAttempts(record, now) {
|
|
17
|
-
const cutoff = now - config.windowMs;
|
|
18
|
-
record.timestamps = record.timestamps.filter((ts) => ts > cutoff);
|
|
19
|
-
}
|
|
20
|
-
export function canAttemptAuth(accountId) {
|
|
21
|
-
const key = getAccountKey(accountId);
|
|
22
|
-
const record = attemptsByAccount.get(key);
|
|
23
|
-
if (!record) {
|
|
24
|
-
return true;
|
|
25
|
-
}
|
|
26
|
-
const now = Date.now();
|
|
27
|
-
pruneOldAttempts(record, now);
|
|
28
|
-
return record.timestamps.length < config.maxAttempts;
|
|
29
|
-
}
|
|
30
|
-
export function recordAuthAttempt(accountId) {
|
|
31
|
-
const key = getAccountKey(accountId);
|
|
32
|
-
const now = Date.now();
|
|
33
|
-
let record = attemptsByAccount.get(key);
|
|
34
|
-
if (!record) {
|
|
35
|
-
record = { timestamps: [] };
|
|
36
|
-
attemptsByAccount.set(key, record);
|
|
37
|
-
}
|
|
38
|
-
pruneOldAttempts(record, now);
|
|
39
|
-
record.timestamps.push(now);
|
|
40
|
-
}
|
|
41
|
-
export function getAttemptsRemaining(accountId) {
|
|
42
|
-
const key = getAccountKey(accountId);
|
|
43
|
-
const record = attemptsByAccount.get(key);
|
|
44
|
-
if (!record) {
|
|
45
|
-
return config.maxAttempts;
|
|
46
|
-
}
|
|
47
|
-
const now = Date.now();
|
|
48
|
-
pruneOldAttempts(record, now);
|
|
49
|
-
return Math.max(0, config.maxAttempts - record.timestamps.length);
|
|
50
|
-
}
|
|
51
|
-
export function getTimeUntilReset(accountId) {
|
|
52
|
-
const key = getAccountKey(accountId);
|
|
53
|
-
const record = attemptsByAccount.get(key);
|
|
54
|
-
if (!record || record.timestamps.length === 0) {
|
|
55
|
-
return 0;
|
|
56
|
-
}
|
|
57
|
-
const now = Date.now();
|
|
58
|
-
pruneOldAttempts(record, now);
|
|
59
|
-
if (record.timestamps.length === 0) {
|
|
60
|
-
return 0;
|
|
61
|
-
}
|
|
62
|
-
const oldestAttempt = Math.min(...record.timestamps);
|
|
63
|
-
const resetTime = oldestAttempt + config.windowMs;
|
|
64
|
-
return Math.max(0, resetTime - now);
|
|
65
|
-
}
|
|
66
|
-
export function resetAuthRateLimit(accountId) {
|
|
67
|
-
const key = getAccountKey(accountId);
|
|
68
|
-
attemptsByAccount.delete(key);
|
|
69
|
-
}
|
|
70
|
-
export function resetAllAuthRateLimits() {
|
|
71
|
-
attemptsByAccount.clear();
|
|
72
|
-
}
|
|
73
|
-
export class AuthRateLimitError extends Error {
|
|
74
|
-
accountId;
|
|
75
|
-
attemptsRemaining;
|
|
76
|
-
resetAfterMs;
|
|
77
|
-
constructor(accountId, attemptsRemaining, resetAfterMs) {
|
|
78
|
-
const resetSeconds = Math.ceil(resetAfterMs / 1000);
|
|
79
|
-
super(`Auth rate limit exceeded for account. Retry after ${resetSeconds}s`);
|
|
80
|
-
this.accountId = accountId;
|
|
81
|
-
this.attemptsRemaining = attemptsRemaining;
|
|
82
|
-
this.resetAfterMs = resetAfterMs;
|
|
83
|
-
this.name = "AuthRateLimitError";
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
export function checkAuthRateLimit(accountId) {
|
|
87
|
-
if (!canAttemptAuth(accountId)) {
|
|
88
|
-
throw new AuthRateLimitError(accountId, getAttemptsRemaining(accountId), getTimeUntilReset(accountId));
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
//# sourceMappingURL=auth-rate-limit.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth-rate-limit.js","sourceRoot":"","sources":["../../lib/auth-rate-limit.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared runtime constants and sentinel helpers only. This module is pure: it
|
|
3
|
-
* does not perform I/O, persistence, or logging, so centralizing these values
|
|
4
|
-
* does not introduce new Windows lock or token-redaction surfaces.
|
|
5
|
-
*/
|
|
6
|
-
export declare const OAUTH_CALLBACK_LOOPBACK_HOST = "127.0.0.1";
|
|
7
|
-
export declare const OAUTH_CALLBACK_PORT = 1455;
|
|
8
|
-
export declare const OAUTH_CALLBACK_PATH = "/auth/callback";
|
|
9
|
-
export declare const OAUTH_CALLBACK_BIND_URL = "http://127.0.0.1:1455";
|
|
10
|
-
export declare const DEACTIVATED_WORKSPACE_ERROR_CODE = "deactivated_workspace";
|
|
11
|
-
export declare const USAGE_REQUEST_TIMEOUT_MESSAGE = "Usage request timed out";
|
|
12
|
-
export declare function createDeactivatedWorkspaceError(): Error;
|
|
13
|
-
export declare function isDeactivatedWorkspaceErrorMessage(message: string | undefined): boolean;
|
|
14
|
-
export declare function createUsageRequestTimeoutError(): Error;
|
|
15
|
-
export declare function isUsageRequestTimeoutMessage(message: string | undefined): boolean;
|
|
16
|
-
//# sourceMappingURL=runtime-contracts.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-contracts.d.ts","sourceRoot":"","sources":["../../lib/runtime-contracts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,cAAc,CAAC;AACxD,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AACpD,eAAO,MAAM,uBAAuB,0BAAkE,CAAC;AAEvG,eAAO,MAAM,gCAAgC,0BAA0B,CAAC;AACxE,eAAO,MAAM,6BAA6B,4BAA4B,CAAC;AAEvE,wBAAgB,+BAA+B,IAAI,KAAK,CAEvD;AAED,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEvF;AAED,wBAAgB,8BAA8B,IAAI,KAAK,CAEtD;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEjF"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared runtime constants and sentinel helpers only. This module is pure: it
|
|
3
|
-
* does not perform I/O, persistence, or logging, so centralizing these values
|
|
4
|
-
* does not introduce new Windows lock or token-redaction surfaces.
|
|
5
|
-
*/
|
|
6
|
-
export const OAUTH_CALLBACK_LOOPBACK_HOST = "127.0.0.1";
|
|
7
|
-
export const OAUTH_CALLBACK_PORT = 1455;
|
|
8
|
-
export const OAUTH_CALLBACK_PATH = "/auth/callback";
|
|
9
|
-
export const OAUTH_CALLBACK_BIND_URL = `http://${OAUTH_CALLBACK_LOOPBACK_HOST}:${OAUTH_CALLBACK_PORT}`;
|
|
10
|
-
export const DEACTIVATED_WORKSPACE_ERROR_CODE = "deactivated_workspace";
|
|
11
|
-
export const USAGE_REQUEST_TIMEOUT_MESSAGE = "Usage request timed out";
|
|
12
|
-
export function createDeactivatedWorkspaceError() {
|
|
13
|
-
return new Error(DEACTIVATED_WORKSPACE_ERROR_CODE);
|
|
14
|
-
}
|
|
15
|
-
export function isDeactivatedWorkspaceErrorMessage(message) {
|
|
16
|
-
return message === DEACTIVATED_WORKSPACE_ERROR_CODE;
|
|
17
|
-
}
|
|
18
|
-
export function createUsageRequestTimeoutError() {
|
|
19
|
-
return new Error(USAGE_REQUEST_TIMEOUT_MESSAGE);
|
|
20
|
-
}
|
|
21
|
-
export function isUsageRequestTimeoutMessage(message) {
|
|
22
|
-
return message === USAGE_REQUEST_TIMEOUT_MESSAGE;
|
|
23
|
-
}
|
|
24
|
-
//# sourceMappingURL=runtime-contracts.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-contracts.js","sourceRoot":"","sources":["../../lib/runtime-contracts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,WAAW,CAAC;AACxD,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AACxC,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AACpD,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAU,4BAA4B,IAAI,mBAAmB,EAAE,CAAC;AAEvG,MAAM,CAAC,MAAM,gCAAgC,GAAG,uBAAuB,CAAC;AACxE,MAAM,CAAC,MAAM,6BAA6B,GAAG,yBAAyB,CAAC;AAEvE,MAAM,UAAU,+BAA+B;IAC9C,OAAO,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,kCAAkC,CAAC,OAA2B;IAC7E,OAAO,OAAO,KAAK,gCAAgC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,8BAA8B;IAC7C,OAAO,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,OAA2B;IACvE,OAAO,OAAO,KAAK,6BAA6B,CAAC;AAClD,CAAC"}
|