@access-tokens/cli 1.0.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/LICENSE +15 -0
- package/README.md +412 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +141 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/generate.d.ts +9 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +33 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/issue.d.ts +16 -0
- package/dist/commands/issue.d.ts.map +1 -0
- package/dist/commands/issue.js +36 -0
- package/dist/commands/issue.js.map +1 -0
- package/dist/commands/list.d.ts +16 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +53 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/register.d.ts +18 -0
- package/dist/commands/register.d.ts.map +1 -0
- package/dist/commands/register.js +33 -0
- package/dist/commands/register.js.map +1 -0
- package/dist/commands/restore.d.ts +13 -0
- package/dist/commands/restore.d.ts.map +1 -0
- package/dist/commands/restore.js +16 -0
- package/dist/commands/restore.js.map +1 -0
- package/dist/commands/revoke.d.ts +14 -0
- package/dist/commands/revoke.d.ts.map +1 -0
- package/dist/commands/revoke.js +20 -0
- package/dist/commands/revoke.js.map +1 -0
- package/dist/commands/sync.d.ts +14 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +197 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/update.d.ts +17 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +33 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/config/loader.d.ts +17 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +138 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schemas.d.ts +52 -0
- package/dist/config/schemas.d.ts.map +1 -0
- package/dist/config/schemas.js +67 -0
- package/dist/config/schemas.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +18 -0
- package/dist/main.js.map +1 -0
- package/dist/utils/client-factory.d.ts +4 -0
- package/dist/utils/client-factory.d.ts.map +1 -0
- package/dist/utils/client-factory.js +13 -0
- package/dist/utils/client-factory.js.map +1 -0
- package/dist/utils/date-parser.d.ts +3 -0
- package/dist/utils/date-parser.d.ts.map +1 -0
- package/dist/utils/date-parser.js +21 -0
- package/dist/utils/date-parser.js.map +1 -0
- package/dist/utils/diff.d.ts +17 -0
- package/dist/utils/diff.d.ts.map +1 -0
- package/dist/utils/diff.js +66 -0
- package/dist/utils/diff.js.map +1 -0
- package/dist/utils/logger.d.ts +17 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +62 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/permissions.d.ts +2 -0
- package/dist/utils/permissions.d.ts.map +1 -0
- package/dist/utils/permissions.js +55 -0
- package/dist/utils/permissions.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.ConfigLoader = void 0;
|
|
37
|
+
const os = __importStar(require("os"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const fs = __importStar(require("fs-extra"));
|
|
40
|
+
const YAML = __importStar(require("yaml"));
|
|
41
|
+
const schemas_1 = require("./schemas");
|
|
42
|
+
class ConfigLoader {
|
|
43
|
+
userConfigPath;
|
|
44
|
+
constructor(userConfigPath) {
|
|
45
|
+
this.userConfigPath =
|
|
46
|
+
userConfigPath ||
|
|
47
|
+
path.join(os.homedir(), ".access-tokens-cli", "config.yaml");
|
|
48
|
+
}
|
|
49
|
+
async loadUserConfig() {
|
|
50
|
+
const { userConfigPath } = this;
|
|
51
|
+
if (!(await fs.pathExists(userConfigPath))) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
return await this.loadConfig(userConfigPath);
|
|
55
|
+
}
|
|
56
|
+
async loadSyncConfig(syncConfigPath) {
|
|
57
|
+
if (!(await fs.pathExists(syncConfigPath))) {
|
|
58
|
+
throw new Error(`Sync config file not found: ${syncConfigPath}`);
|
|
59
|
+
}
|
|
60
|
+
return await this.loadConfig(syncConfigPath);
|
|
61
|
+
}
|
|
62
|
+
async loadConfig(configPath) {
|
|
63
|
+
const content = await fs.readFile(configPath, "utf-8");
|
|
64
|
+
const parsed = YAML.parse(content);
|
|
65
|
+
const result = schemas_1.configSchema.safeParse(parsed);
|
|
66
|
+
if (!result.success) {
|
|
67
|
+
throw new Error(`Invalid config at ${configPath}: ${result.error.message}`);
|
|
68
|
+
}
|
|
69
|
+
return result.data;
|
|
70
|
+
}
|
|
71
|
+
mergeConfigs(userConfig, syncConfig) {
|
|
72
|
+
const defaults = {
|
|
73
|
+
...userConfig?.defaults,
|
|
74
|
+
...syncConfig.defaults,
|
|
75
|
+
};
|
|
76
|
+
const mergedEndpoints = {};
|
|
77
|
+
const allEndpointNames = new Set([
|
|
78
|
+
...Object.keys(userConfig?.endpoints || {}),
|
|
79
|
+
...Object.keys(syncConfig.endpoints || {}),
|
|
80
|
+
]);
|
|
81
|
+
for (const name of allEndpointNames) {
|
|
82
|
+
mergedEndpoints[name] = {
|
|
83
|
+
...userConfig?.endpoints?.[name],
|
|
84
|
+
...syncConfig.endpoints?.[name],
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
defaults,
|
|
89
|
+
endpoints: mergedEndpoints,
|
|
90
|
+
tokens: syncConfig.tokens || [],
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
resolveEndpointConfig(endpointName, config) {
|
|
94
|
+
const endpointConfig = config.endpoints?.[endpointName];
|
|
95
|
+
if (!endpointConfig) {
|
|
96
|
+
throw new Error(`Endpoint '${endpointName}' not found in configuration`);
|
|
97
|
+
}
|
|
98
|
+
const { url } = endpointConfig;
|
|
99
|
+
if (!url) {
|
|
100
|
+
throw new Error(`Endpoint '${endpointName}' missing URL`);
|
|
101
|
+
}
|
|
102
|
+
const { defaults = {} } = config;
|
|
103
|
+
const adminToken = endpointConfig.adminToken || defaults.adminToken;
|
|
104
|
+
if (!adminToken) {
|
|
105
|
+
throw new Error(`No adminToken for endpoint '${endpointName}'`);
|
|
106
|
+
}
|
|
107
|
+
const authPath = endpointConfig.authPath || defaults.authPath || "/auth";
|
|
108
|
+
const adminPath = endpointConfig.adminPath || defaults.adminPath || "/admin";
|
|
109
|
+
return { url, adminToken, authPath, adminPath };
|
|
110
|
+
}
|
|
111
|
+
resolveDirectEndpointConfig(config, defaults) {
|
|
112
|
+
const { url, adminToken, authPath, adminPath } = config;
|
|
113
|
+
if (!adminToken) {
|
|
114
|
+
throw new Error("--admin-token is required when using --url");
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
url,
|
|
118
|
+
adminToken,
|
|
119
|
+
authPath: authPath || defaults?.authPath || "/auth",
|
|
120
|
+
adminPath: adminPath || defaults?.adminPath || "/admin",
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
async resolveEndpointFromOptions(options) {
|
|
124
|
+
const userConfig = await this.loadUserConfig();
|
|
125
|
+
if (options.url) {
|
|
126
|
+
const optionsWithUrl = { ...options, url: options.url };
|
|
127
|
+
return this.resolveDirectEndpointConfig(optionsWithUrl, userConfig?.defaults);
|
|
128
|
+
}
|
|
129
|
+
else if (options.endpoint) {
|
|
130
|
+
return this.resolveEndpointConfig(options.endpoint, userConfig || {});
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
throw new Error("Either --endpoint or --url must be specified");
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
exports.ConfigLoader = ConfigLoader;
|
|
138
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import * as z from "zod";
|
|
2
|
+
export declare const endpointConfigSchema: z.ZodObject<{
|
|
3
|
+
url: z.ZodOptional<z.ZodURL>;
|
|
4
|
+
adminToken: z.ZodOptional<z.ZodString>;
|
|
5
|
+
authPath: z.ZodOptional<z.ZodString>;
|
|
6
|
+
adminPath: z.ZodOptional<z.ZodString>;
|
|
7
|
+
}, z.core.$strip>;
|
|
8
|
+
export type EndpointConfig = z.infer<typeof endpointConfigSchema>;
|
|
9
|
+
export declare const defaultsSchema: z.ZodObject<{
|
|
10
|
+
authPath: z.ZodOptional<z.ZodString>;
|
|
11
|
+
adminPath: z.ZodOptional<z.ZodString>;
|
|
12
|
+
adminToken: z.ZodOptional<z.ZodString>;
|
|
13
|
+
}, z.core.$strip>;
|
|
14
|
+
export type Defaults = z.infer<typeof defaultsSchema>;
|
|
15
|
+
export declare const tokenDefinitionSchema: z.ZodObject<{
|
|
16
|
+
tokenId: z.ZodString;
|
|
17
|
+
secretPhc: z.ZodOptional<z.ZodString>;
|
|
18
|
+
owner: z.ZodString;
|
|
19
|
+
isAdmin: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
20
|
+
revoked: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
21
|
+
expiresAt: z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodISODateTime, z.ZodTransform<number, string>>, z.ZodNumber, z.ZodNull]>>;
|
|
22
|
+
}, z.core.$strip>;
|
|
23
|
+
export type TokenDefinition = z.infer<typeof tokenDefinitionSchema>;
|
|
24
|
+
export declare const configSchema: z.ZodObject<{
|
|
25
|
+
defaults: z.ZodOptional<z.ZodObject<{
|
|
26
|
+
authPath: z.ZodOptional<z.ZodString>;
|
|
27
|
+
adminPath: z.ZodOptional<z.ZodString>;
|
|
28
|
+
adminToken: z.ZodOptional<z.ZodString>;
|
|
29
|
+
}, z.core.$strip>>;
|
|
30
|
+
endpoints: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
31
|
+
url: z.ZodOptional<z.ZodURL>;
|
|
32
|
+
adminToken: z.ZodOptional<z.ZodString>;
|
|
33
|
+
authPath: z.ZodOptional<z.ZodString>;
|
|
34
|
+
adminPath: z.ZodOptional<z.ZodString>;
|
|
35
|
+
}, z.core.$strip>>>;
|
|
36
|
+
tokens: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
37
|
+
tokenId: z.ZodString;
|
|
38
|
+
secretPhc: z.ZodOptional<z.ZodString>;
|
|
39
|
+
owner: z.ZodString;
|
|
40
|
+
isAdmin: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
41
|
+
revoked: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
42
|
+
expiresAt: z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodISODateTime, z.ZodTransform<number, string>>, z.ZodNumber, z.ZodNull]>>;
|
|
43
|
+
}, z.core.$strip>>>;
|
|
44
|
+
}, z.core.$strip>;
|
|
45
|
+
export type Config = z.infer<typeof configSchema>;
|
|
46
|
+
export type MergedEndpointConfig = {
|
|
47
|
+
url: string;
|
|
48
|
+
adminToken: string;
|
|
49
|
+
authPath: string;
|
|
50
|
+
adminPath: string;
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/config/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAQzB,eAAO,MAAM,oBAAoB;;;;;iBAK/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,cAAc;;;;iBAIzB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,eAAO,MAAM,qBAAqB;;;;;;;iBAOhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;iBAIvB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,MAAM,MAAM,oBAAoB,GAAG;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.configSchema = exports.tokenDefinitionSchema = exports.defaultsSchema = exports.endpointConfigSchema = void 0;
|
|
37
|
+
const z = __importStar(require("zod"));
|
|
38
|
+
const dateSchema = z.union([
|
|
39
|
+
z.iso.datetime().transform((s) => Math.floor(new Date(s).getTime() / 1000)),
|
|
40
|
+
z.number().int().positive(),
|
|
41
|
+
z.null(),
|
|
42
|
+
]);
|
|
43
|
+
exports.endpointConfigSchema = z.object({
|
|
44
|
+
url: z.url().optional(),
|
|
45
|
+
adminToken: z.string().optional(),
|
|
46
|
+
authPath: z.string().optional(),
|
|
47
|
+
adminPath: z.string().optional(),
|
|
48
|
+
});
|
|
49
|
+
exports.defaultsSchema = z.object({
|
|
50
|
+
authPath: z.string().optional(),
|
|
51
|
+
adminPath: z.string().optional(),
|
|
52
|
+
adminToken: z.string().optional(),
|
|
53
|
+
});
|
|
54
|
+
exports.tokenDefinitionSchema = z.object({
|
|
55
|
+
tokenId: z.string(),
|
|
56
|
+
secretPhc: z.string().optional(),
|
|
57
|
+
owner: z.string(),
|
|
58
|
+
isAdmin: z.boolean().optional().default(false),
|
|
59
|
+
revoked: z.boolean().optional().default(false),
|
|
60
|
+
expiresAt: dateSchema.optional(),
|
|
61
|
+
});
|
|
62
|
+
exports.configSchema = z.object({
|
|
63
|
+
defaults: exports.defaultsSchema.optional(),
|
|
64
|
+
endpoints: z.record(z.string(), exports.endpointConfigSchema).optional(),
|
|
65
|
+
tokens: z.array(exports.tokenDefinitionSchema).optional(),
|
|
66
|
+
});
|
|
67
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/config/schemas.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AAEzB,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC;IACzB,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAC3E,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC3B,CAAC,CAAC,IAAI,EAAE;CACT,CAAC,CAAC;AAEU,QAAA,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACvB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAIU,QAAA,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAC;AAIU,QAAA,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC9C,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC9C,SAAS,EAAE,UAAU,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAIU,QAAA,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,QAAQ,EAAE,sBAAc,CAAC,QAAQ,EAAE;IACnC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,4BAAoB,CAAC,CAAC,QAAQ,EAAE;IAChE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,6BAAqB,CAAC,CAAC,QAAQ,EAAE;CAClD,CAAC,CAAC"}
|
package/dist/main.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":""}
|
package/dist/main.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const cli_1 = require("./cli");
|
|
5
|
+
(async () => {
|
|
6
|
+
const code = await (0, cli_1.run)({
|
|
7
|
+
argv: process.argv.slice(2),
|
|
8
|
+
env: process.env,
|
|
9
|
+
stdin: process.stdin,
|
|
10
|
+
stdout: process.stdout,
|
|
11
|
+
stderr: process.stderr,
|
|
12
|
+
});
|
|
13
|
+
process.exit(code);
|
|
14
|
+
})().catch((err) => {
|
|
15
|
+
console.error("Fatal error:", err);
|
|
16
|
+
process.exit(1);
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;;AACA,+BAA4B;AAE5B,CAAC,KAAK,IAAI,EAAE;IACV,MAAM,IAAI,GAAG,MAAM,IAAA,SAAG,EAAC;QACrB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3B,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-factory.d.ts","sourceRoot":"","sources":["../../src/utils/client-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,wBAAgB,YAAY,CAAC,MAAM,EAAE,oBAAoB,GAAG,kBAAkB,CAO7E"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createClient = createClient;
|
|
4
|
+
const client_1 = require("@access-tokens/client");
|
|
5
|
+
function createClient(config) {
|
|
6
|
+
return new client_1.AccessTokensClient({
|
|
7
|
+
endpoint: config.url,
|
|
8
|
+
apiKey: config.adminToken,
|
|
9
|
+
authPath: config.authPath,
|
|
10
|
+
adminPath: config.adminPath,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=client-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-factory.js","sourceRoot":"","sources":["../../src/utils/client-factory.ts"],"names":[],"mappings":";;AAIA,oCAOC;AAXD,kDAA2D;AAI3D,SAAgB,YAAY,CAAC,MAA4B;IACvD,OAAO,IAAI,2BAAkB,CAAC;QAC5B,QAAQ,EAAE,MAAM,CAAC,GAAG;QACpB,MAAM,EAAE,MAAM,CAAC,UAAU;QACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-parser.d.ts","sourceRoot":"","sources":["../../src/utils/date-parser.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgBtD;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpD"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseDate = parseDate;
|
|
4
|
+
exports.formatDate = formatDate;
|
|
5
|
+
function parseDate(input) {
|
|
6
|
+
if (input === "null") {
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
9
|
+
if (/^\d+$/.test(input)) {
|
|
10
|
+
return parseInt(input);
|
|
11
|
+
}
|
|
12
|
+
const timestamp = Date.parse(input);
|
|
13
|
+
if (Number.isNaN(timestamp)) {
|
|
14
|
+
throw new Error(`Invalid date format: ${input}. Expected ISO 8601 date or Unix timestamp in seconds`);
|
|
15
|
+
}
|
|
16
|
+
return Math.floor(timestamp / 1000);
|
|
17
|
+
}
|
|
18
|
+
function formatDate(timestamp) {
|
|
19
|
+
return new Date(timestamp * 1000).toISOString();
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=date-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-parser.js","sourceRoot":"","sources":["../../src/utils/date-parser.ts"],"names":[],"mappings":";;AAAA,8BAgBC;AAED,gCAEC;AApBD,SAAgB,SAAS,CAAC,KAAa;IACrC,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,wBAAwB,KAAK,uDAAuD,CACrF,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;AACtC,CAAC;AAED,SAAgB,UAAU,CAAC,SAAiB;IAC1C,OAAO,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { TokenRecord } from "@access-tokens/client";
|
|
2
|
+
import type { TokenDefinition } from "../config/schemas";
|
|
3
|
+
export type TokenChange = {
|
|
4
|
+
field: string;
|
|
5
|
+
oldValue: unknown;
|
|
6
|
+
newValue: unknown;
|
|
7
|
+
};
|
|
8
|
+
export type TokenDiff = {
|
|
9
|
+
tokenId: string;
|
|
10
|
+
exists: boolean;
|
|
11
|
+
changes: TokenChange[];
|
|
12
|
+
needsRevoke: boolean;
|
|
13
|
+
needsRestore: boolean;
|
|
14
|
+
needsUpdate: boolean;
|
|
15
|
+
};
|
|
16
|
+
export declare function compareTokens(definition: TokenDefinition, remote: TokenRecord | undefined): TokenDiff;
|
|
17
|
+
//# sourceMappingURL=diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/utils/diff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,wBAAgB,aAAa,CAC3B,UAAU,EAAE,eAAe,EAC3B,MAAM,EAAE,WAAW,GAAG,SAAS,GAC9B,SAAS,CAyEX"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.compareTokens = compareTokens;
|
|
4
|
+
function compareTokens(definition, remote) {
|
|
5
|
+
const changes = [];
|
|
6
|
+
let needsRevoke = false;
|
|
7
|
+
let needsRestore = false;
|
|
8
|
+
if (!remote) {
|
|
9
|
+
return {
|
|
10
|
+
tokenId: definition.tokenId,
|
|
11
|
+
exists: false,
|
|
12
|
+
changes: [],
|
|
13
|
+
needsRevoke: false,
|
|
14
|
+
needsRestore: false,
|
|
15
|
+
needsUpdate: false,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
const isRemoteRevoked = remote.revokedAt != null;
|
|
19
|
+
const shouldBeRevoked = definition.revoked || false;
|
|
20
|
+
if (shouldBeRevoked && !isRemoteRevoked) {
|
|
21
|
+
needsRevoke = true;
|
|
22
|
+
}
|
|
23
|
+
else if (!shouldBeRevoked && isRemoteRevoked) {
|
|
24
|
+
needsRestore = true;
|
|
25
|
+
}
|
|
26
|
+
if (definition.owner !== remote.owner) {
|
|
27
|
+
changes.push({
|
|
28
|
+
field: "owner",
|
|
29
|
+
oldValue: remote.owner,
|
|
30
|
+
newValue: definition.owner,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
if (definition.isAdmin !== undefined &&
|
|
34
|
+
definition.isAdmin !== remote.isAdmin) {
|
|
35
|
+
changes.push({
|
|
36
|
+
field: "isAdmin",
|
|
37
|
+
oldValue: remote.isAdmin,
|
|
38
|
+
newValue: definition.isAdmin,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
if (definition.secretPhc && definition.secretPhc !== remote.secretPhc) {
|
|
42
|
+
changes.push({
|
|
43
|
+
field: "secretPhc",
|
|
44
|
+
oldValue: "[hidden]",
|
|
45
|
+
newValue: "[updated]",
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
if (definition.expiresAt !== undefined &&
|
|
49
|
+
definition.expiresAt !== remote.expiresAt) {
|
|
50
|
+
changes.push({
|
|
51
|
+
field: "expiresAt",
|
|
52
|
+
oldValue: remote.expiresAt,
|
|
53
|
+
newValue: definition.expiresAt,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
const needsUpdate = changes.length > 0;
|
|
57
|
+
return {
|
|
58
|
+
tokenId: definition.tokenId,
|
|
59
|
+
exists: true,
|
|
60
|
+
changes,
|
|
61
|
+
needsRevoke,
|
|
62
|
+
needsRestore,
|
|
63
|
+
needsUpdate,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/utils/diff.ts"],"names":[],"mappings":";;AAmBA,sCA4EC;AA5ED,SAAgB,aAAa,CAC3B,UAA2B,EAC3B,MAA+B;IAE/B,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,YAAY,GAAG,KAAK,CAAC;IAEzB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,KAAK;YAClB,YAAY,EAAE,KAAK;YACnB,WAAW,EAAE,KAAK;SACnB,CAAC;IACJ,CAAC;IAED,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC;IACjD,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,IAAI,KAAK,CAAC;IAEpD,IAAI,eAAe,IAAI,CAAC,eAAe,EAAE,CAAC;QACxC,WAAW,GAAG,IAAI,CAAC;IACrB,CAAC;SAAM,IAAI,CAAC,eAAe,IAAI,eAAe,EAAE,CAAC;QAC/C,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,IAAI,UAAU,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC;YACX,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,MAAM,CAAC,KAAK;YACtB,QAAQ,EAAE,UAAU,CAAC,KAAK;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,IACE,UAAU,CAAC,OAAO,KAAK,SAAS;QAChC,UAAU,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,EACrC,CAAC;QACD,OAAO,CAAC,IAAI,CAAC;YACX,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,MAAM,CAAC,OAAO;YACxB,QAAQ,EAAE,UAAU,CAAC,OAAO;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,IAAI,UAAU,CAAC,SAAS,IAAI,UAAU,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC;YACX,KAAK,EAAE,WAAW;YAClB,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,WAAW;SACtB,CAAC,CAAC;IACL,CAAC;IAED,IACE,UAAU,CAAC,SAAS,KAAK,SAAS;QAClC,UAAU,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS,EACzC,CAAC;QACD,OAAO,CAAC,IAAI,CAAC;YACX,KAAK,EAAE,WAAW;YAClB,QAAQ,EAAE,MAAM,CAAC,SAAS;YAC1B,QAAQ,EAAE,UAAU,CAAC,SAAS;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAEvC,OAAO;QACL,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,MAAM,EAAE,IAAI;QACZ,OAAO;QACP,WAAW;QACX,YAAY;QACZ,WAAW;KACZ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type LogLevel = "quiet" | "normal" | "verbose";
|
|
2
|
+
export type LogOptions = {
|
|
3
|
+
verbose?: boolean;
|
|
4
|
+
quiet?: boolean;
|
|
5
|
+
};
|
|
6
|
+
export declare class Logger {
|
|
7
|
+
private readonly level;
|
|
8
|
+
constructor(level?: LogLevel | LogOptions);
|
|
9
|
+
error(message: string, ...args: unknown[]): void;
|
|
10
|
+
warn(message: string, ...args: unknown[]): void;
|
|
11
|
+
info(message: string, ...args: unknown[]): void;
|
|
12
|
+
success(message: string, ...args: unknown[]): void;
|
|
13
|
+
verbose(message: string, ...args: unknown[]): void;
|
|
14
|
+
dryRun(message: string, ...args: unknown[]): void;
|
|
15
|
+
json(data: unknown): void;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEtD,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;gBAErB,KAAK,GAAE,QAAQ,GAAG,UAAqB;IAYnD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAIhD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAM/C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAO/C,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAOlD,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAOlD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAOjD,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;CAI1B"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Logger = void 0;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
class Logger {
|
|
9
|
+
level;
|
|
10
|
+
constructor(level = "normal") {
|
|
11
|
+
if (typeof level === "string") {
|
|
12
|
+
this.level = level;
|
|
13
|
+
}
|
|
14
|
+
else if (level.quiet) {
|
|
15
|
+
this.level = "quiet";
|
|
16
|
+
}
|
|
17
|
+
else if (level.verbose) {
|
|
18
|
+
this.level = "verbose";
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
this.level = "normal";
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
error(message, ...args) {
|
|
25
|
+
console.error(chalk_1.default.red(message), ...args);
|
|
26
|
+
}
|
|
27
|
+
warn(message, ...args) {
|
|
28
|
+
if (this.level !== "quiet") {
|
|
29
|
+
console.warn(chalk_1.default.yellow(message), ...args);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
info(message, ...args) {
|
|
33
|
+
if (this.level !== "quiet") {
|
|
34
|
+
// eslint-disable-next-line no-console
|
|
35
|
+
console.log(message, ...args);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
success(message, ...args) {
|
|
39
|
+
if (this.level !== "quiet") {
|
|
40
|
+
// eslint-disable-next-line no-console
|
|
41
|
+
console.log(chalk_1.default.green(message), ...args);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
verbose(message, ...args) {
|
|
45
|
+
if (this.level === "verbose") {
|
|
46
|
+
// eslint-disable-next-line no-console
|
|
47
|
+
console.log(chalk_1.default.gray(message), ...args);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
dryRun(message, ...args) {
|
|
51
|
+
if (this.level !== "quiet") {
|
|
52
|
+
// eslint-disable-next-line no-console
|
|
53
|
+
console.log(chalk_1.default.cyan("[DRY RUN]"), message, ...args);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
json(data) {
|
|
57
|
+
// eslint-disable-next-line no-console
|
|
58
|
+
console.log(JSON.stringify(data, null, 2));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
exports.Logger = Logger;
|
|
62
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAS1B,MAAa,MAAM;IACA,KAAK,CAAW;IAEjC,YAAY,QAA+B,QAAQ;QACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,CAAC;aAAM,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;QACvB,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QACxB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;QACvC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;QACtC,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;QACtC,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;YAC3B,sCAAsC;YACtC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO,CAAC,OAAe,EAAE,GAAG,IAAe;QACzC,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;YAC3B,sCAAsC;YACtC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,OAAO,CAAC,OAAe,EAAE,GAAG,IAAe;QACzC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,sCAAsC;YACtC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,MAAM,CAAC,OAAe,EAAE,GAAG,IAAe;QACxC,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;YAC3B,sCAAsC;YACtC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAa;QAChB,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;CACF;AAzDD,wBAyDC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/utils/permissions.ts"],"names":[],"mappings":"AAEA,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,kBAAkB,EAAE,OAAO,GAC1B,OAAO,CAAC,IAAI,CAAC,CAkBf"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.checkFilePermissions = checkFilePermissions;
|
|
37
|
+
const fs = __importStar(require("fs-extra"));
|
|
38
|
+
async function checkFilePermissions(filePath, containsAdminToken) {
|
|
39
|
+
if (!containsAdminToken) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
const stats = await fs.stat(filePath);
|
|
44
|
+
const mode = stats.mode & parseInt("777", 8);
|
|
45
|
+
const worldReadable = (mode & parseInt("004", 8)) !== 0;
|
|
46
|
+
if (worldReadable) {
|
|
47
|
+
console.warn(`Warning: Config file ${filePath} is world-readable and contains adminToken. ` +
|
|
48
|
+
`Consider running: chmod 600 ${filePath}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Ignore permission check errors
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/utils/permissions.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,oDAqBC;AAvBD,6CAA+B;AAExB,KAAK,UAAU,oBAAoB,CACxC,QAAgB,EAChB,kBAA2B;IAE3B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC7C,MAAM,aAAa,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACxD,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CACV,wBAAwB,QAAQ,8CAA8C;gBAC5E,+BAA+B,QAAQ,EAAE,CAC5C,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;AACH,CAAC"}
|