@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.
Files changed (71) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +412 -0
  3. package/dist/cli.d.ts +9 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +141 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/generate.d.ts +9 -0
  8. package/dist/commands/generate.d.ts.map +1 -0
  9. package/dist/commands/generate.js +33 -0
  10. package/dist/commands/generate.js.map +1 -0
  11. package/dist/commands/issue.d.ts +16 -0
  12. package/dist/commands/issue.d.ts.map +1 -0
  13. package/dist/commands/issue.js +36 -0
  14. package/dist/commands/issue.js.map +1 -0
  15. package/dist/commands/list.d.ts +16 -0
  16. package/dist/commands/list.d.ts.map +1 -0
  17. package/dist/commands/list.js +53 -0
  18. package/dist/commands/list.js.map +1 -0
  19. package/dist/commands/register.d.ts +18 -0
  20. package/dist/commands/register.d.ts.map +1 -0
  21. package/dist/commands/register.js +33 -0
  22. package/dist/commands/register.js.map +1 -0
  23. package/dist/commands/restore.d.ts +13 -0
  24. package/dist/commands/restore.d.ts.map +1 -0
  25. package/dist/commands/restore.js +16 -0
  26. package/dist/commands/restore.js.map +1 -0
  27. package/dist/commands/revoke.d.ts +14 -0
  28. package/dist/commands/revoke.d.ts.map +1 -0
  29. package/dist/commands/revoke.js +20 -0
  30. package/dist/commands/revoke.js.map +1 -0
  31. package/dist/commands/sync.d.ts +14 -0
  32. package/dist/commands/sync.d.ts.map +1 -0
  33. package/dist/commands/sync.js +197 -0
  34. package/dist/commands/sync.js.map +1 -0
  35. package/dist/commands/update.d.ts +17 -0
  36. package/dist/commands/update.d.ts.map +1 -0
  37. package/dist/commands/update.js +33 -0
  38. package/dist/commands/update.js.map +1 -0
  39. package/dist/config/loader.d.ts +17 -0
  40. package/dist/config/loader.d.ts.map +1 -0
  41. package/dist/config/loader.js +138 -0
  42. package/dist/config/loader.js.map +1 -0
  43. package/dist/config/schemas.d.ts +52 -0
  44. package/dist/config/schemas.d.ts.map +1 -0
  45. package/dist/config/schemas.js +67 -0
  46. package/dist/config/schemas.js.map +1 -0
  47. package/dist/main.d.ts +3 -0
  48. package/dist/main.d.ts.map +1 -0
  49. package/dist/main.js +18 -0
  50. package/dist/main.js.map +1 -0
  51. package/dist/utils/client-factory.d.ts +4 -0
  52. package/dist/utils/client-factory.d.ts.map +1 -0
  53. package/dist/utils/client-factory.js +13 -0
  54. package/dist/utils/client-factory.js.map +1 -0
  55. package/dist/utils/date-parser.d.ts +3 -0
  56. package/dist/utils/date-parser.d.ts.map +1 -0
  57. package/dist/utils/date-parser.js +21 -0
  58. package/dist/utils/date-parser.js.map +1 -0
  59. package/dist/utils/diff.d.ts +17 -0
  60. package/dist/utils/diff.d.ts.map +1 -0
  61. package/dist/utils/diff.js +66 -0
  62. package/dist/utils/diff.js.map +1 -0
  63. package/dist/utils/logger.d.ts +17 -0
  64. package/dist/utils/logger.d.ts.map +1 -0
  65. package/dist/utils/logger.js +62 -0
  66. package/dist/utils/logger.js.map +1 -0
  67. package/dist/utils/permissions.d.ts +2 -0
  68. package/dist/utils/permissions.d.ts.map +1 -0
  69. package/dist/utils/permissions.js +55 -0
  70. package/dist/utils/permissions.js.map +1 -0
  71. package/package.json +61 -0
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.issueCommand = issueCommand;
4
+ const loader_1 = require("../config/loader");
5
+ const client_factory_1 = require("../utils/client-factory");
6
+ const date_parser_1 = require("../utils/date-parser");
7
+ const logger_1 = require("../utils/logger");
8
+ async function issueCommand(options) {
9
+ const logger = new logger_1.Logger(options);
10
+ const loader = new loader_1.ConfigLoader(options.configDir);
11
+ const endpointConfig = await loader.resolveEndpointFromOptions(options);
12
+ const client = (0, client_factory_1.createClient)(endpointConfig);
13
+ const expiresAt = options.expiresAt
14
+ ? (0, date_parser_1.parseDate)(options.expiresAt)
15
+ : undefined;
16
+ logger.verbose(`Issuing token for ${options.owner}...`);
17
+ const result = await client.issue({
18
+ owner: options.owner,
19
+ isAdmin: options.admin,
20
+ expiresAt: expiresAt || undefined,
21
+ });
22
+ if (options.json) {
23
+ logger.json(result);
24
+ }
25
+ else {
26
+ logger.success("Token issued successfully!");
27
+ logger.info("");
28
+ logger.info("TOKEN (save this securely, it won't be shown again):");
29
+ logger.info(result.token);
30
+ logger.info("");
31
+ logger.info(`Token ID: ${result.record.tokenId}`);
32
+ logger.info(`Owner: ${result.record.owner}`);
33
+ logger.info(`Admin: ${result.record.isAdmin}`);
34
+ }
35
+ }
36
+ //# sourceMappingURL=issue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue.js","sourceRoot":"","sources":["../../src/commands/issue.ts"],"names":[],"mappings":";;AAoBA,oCAgCC;AApDD,6CAAgD;AAChD,4DAAuD;AACvD,sDAAiD;AACjD,4CAAyC;AAiBlC,KAAK,UAAU,YAAY,CAAC,OAAqB;IACtD,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,IAAI,qBAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEnD,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAExE,MAAM,MAAM,GAAG,IAAA,6BAAY,EAAC,cAAc,CAAC,CAAC;IAE5C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS;QACjC,CAAC,CAAC,IAAA,uBAAS,EAAC,OAAO,CAAC,SAAS,CAAC;QAC9B,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,CAAC,OAAO,CAAC,qBAAqB,OAAO,CAAC,KAAK,KAAK,CAAC,CAAC;IAExD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,OAAO,EAAE,OAAO,CAAC,KAAK;QACtB,SAAS,EAAE,SAAS,IAAI,SAAS;KAClC,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QACpE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ export type ListOptions = {
2
+ endpoint?: string;
3
+ url?: string;
4
+ adminToken?: string;
5
+ authPath?: string;
6
+ adminPath?: string;
7
+ includeRevoked?: boolean;
8
+ includeExpired?: boolean;
9
+ includeSecretPhc?: boolean;
10
+ configDir?: string;
11
+ json?: boolean;
12
+ verbose?: boolean;
13
+ quiet?: boolean;
14
+ };
15
+ export declare function listCommand(options: ListOptions): Promise<void>;
16
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BrE"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listCommand = listCommand;
4
+ const loader_1 = require("../config/loader");
5
+ const client_factory_1 = require("../utils/client-factory");
6
+ const date_parser_1 = require("../utils/date-parser");
7
+ const logger_1 = require("../utils/logger");
8
+ async function listCommand(options) {
9
+ const logger = new logger_1.Logger(options);
10
+ const loader = new loader_1.ConfigLoader(options.configDir);
11
+ const endpointConfig = await loader.resolveEndpointFromOptions(options);
12
+ const client = (0, client_factory_1.createClient)(endpointConfig);
13
+ logger.verbose(`Fetching tokens from ${endpointConfig.url}...`);
14
+ const tokens = await client.list({
15
+ includeRevoked: options.includeRevoked,
16
+ includeExpired: options.includeExpired,
17
+ includeSecretPhc: options.includeSecretPhc,
18
+ });
19
+ if (options.json) {
20
+ logger.json(tokens);
21
+ }
22
+ else {
23
+ if (tokens.length === 0) {
24
+ logger.info("No tokens found");
25
+ }
26
+ else {
27
+ logger.info(`Found ${tokens.length} token(s):\n`);
28
+ for (const token of tokens) {
29
+ displayToken(token, logger);
30
+ }
31
+ }
32
+ }
33
+ }
34
+ function displayToken(token, logger) {
35
+ logger.info(`Token ID: ${token.tokenId}`);
36
+ logger.info(` Owner: ${token.owner}`);
37
+ logger.info(` Admin: ${token.isAdmin}`);
38
+ logger.info(` Created: ${(0, date_parser_1.formatDate)(token.createdAt)}`);
39
+ if (token.lastUsedAt) {
40
+ logger.info(` Last Used: ${(0, date_parser_1.formatDate)(token.lastUsedAt)}`);
41
+ }
42
+ if (token.expiresAt) {
43
+ logger.info(` Expires: ${(0, date_parser_1.formatDate)(token.expiresAt)}`);
44
+ }
45
+ if (token.revokedAt) {
46
+ logger.info(` Revoked: ${(0, date_parser_1.formatDate)(token.revokedAt)}`);
47
+ }
48
+ if (token.secretPhc) {
49
+ logger.info(` Secret PHC: ${token.secretPhc}`);
50
+ }
51
+ logger.info("");
52
+ }
53
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":";;AAsBA,kCA4BC;AAhDD,6CAAgD;AAChD,4DAAuD;AACvD,sDAAkD;AAClD,4CAAyC;AAiBlC,KAAK,UAAU,WAAW,CAAC,OAAoB;IACpD,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,IAAI,qBAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEnD,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAExE,MAAM,MAAM,GAAG,IAAA,6BAAY,EAAC,cAAc,CAAC,CAAC;IAE5C,MAAM,CAAC,OAAO,CAAC,wBAAwB,cAAc,CAAC,GAAG,KAAK,CAAC,CAAC;IAEhE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;QAC/B,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;KAC3C,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,MAAM,cAAc,CAAC,CAAC;YAClD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAkB,EAAE,MAAc;IACtD,MAAM,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1C,MAAM,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,IAAI,CAAC,cAAc,IAAA,wBAAU,EAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACzD,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,gBAAgB,IAAA,wBAAU,EAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,cAAc,IAAA,wBAAU,EAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,cAAc,IAAA,wBAAU,EAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,18 @@
1
+ export type RegisterOptions = {
2
+ endpoint?: string;
3
+ url?: string;
4
+ adminToken?: string;
5
+ authPath?: string;
6
+ adminPath?: string;
7
+ tokenId: string;
8
+ secretPhc: string;
9
+ owner: string;
10
+ admin?: boolean;
11
+ expiresAt?: string;
12
+ configDir?: string;
13
+ json?: boolean;
14
+ verbose?: boolean;
15
+ quiet?: boolean;
16
+ };
17
+ export declare function registerCommand(options: RegisterOptions): Promise<void>;
18
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B7E"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerCommand = registerCommand;
4
+ const loader_1 = require("../config/loader");
5
+ const client_factory_1 = require("../utils/client-factory");
6
+ const date_parser_1 = require("../utils/date-parser");
7
+ const logger_1 = require("../utils/logger");
8
+ async function registerCommand(options) {
9
+ const logger = new logger_1.Logger(options);
10
+ const loader = new loader_1.ConfigLoader(options.configDir);
11
+ const endpointConfig = await loader.resolveEndpointFromOptions(options);
12
+ const client = (0, client_factory_1.createClient)(endpointConfig);
13
+ const expiresAt = options.expiresAt
14
+ ? (0, date_parser_1.parseDate)(options.expiresAt)
15
+ : undefined;
16
+ logger.verbose(`Registering token ${options.tokenId}...`);
17
+ const record = await client.register({
18
+ tokenId: options.tokenId,
19
+ secretPhc: options.secretPhc,
20
+ owner: options.owner,
21
+ isAdmin: options.admin,
22
+ expiresAt: expiresAt || undefined,
23
+ });
24
+ if (options.json) {
25
+ logger.json(record);
26
+ }
27
+ else {
28
+ logger.success(`Token ${options.tokenId} registered successfully!`);
29
+ logger.info(`Owner: ${record.owner}`);
30
+ logger.info(`Admin: ${record.isAdmin}`);
31
+ }
32
+ }
33
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":";;AAsBA,0CA6BC;AAnDD,6CAAgD;AAChD,4DAAuD;AACvD,sDAAiD;AACjD,4CAAyC;AAmBlC,KAAK,UAAU,eAAe,CAAC,OAAwB;IAC5D,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,IAAI,qBAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEnD,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAExE,MAAM,MAAM,GAAG,IAAA,6BAAY,EAAC,cAAc,CAAC,CAAC;IAE5C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS;QACjC,CAAC,CAAC,IAAA,uBAAS,EAAC,OAAO,CAAC,SAAS,CAAC;QAC9B,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,CAAC,OAAO,CAAC,qBAAqB,OAAO,CAAC,OAAO,KAAK,CAAC,CAAC;IAE1D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;QACnC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,OAAO,EAAE,OAAO,CAAC,KAAK;QACtB,SAAS,EAAE,SAAS,IAAI,SAAS;KAClC,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,OAAO,CAAC,SAAS,OAAO,CAAC,OAAO,2BAA2B,CAAC,CAAC;QACpE,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ export type RestoreOptions = {
2
+ endpoint?: string;
3
+ url?: string;
4
+ adminToken?: string;
5
+ authPath?: string;
6
+ adminPath?: string;
7
+ tokenId: string;
8
+ configDir?: string;
9
+ verbose?: boolean;
10
+ quiet?: boolean;
11
+ };
12
+ export declare function restoreCommand(options: RestoreOptions): Promise<void>;
13
+ //# sourceMappingURL=restore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restore.d.ts","sourceRoot":"","sources":["../../src/commands/restore.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAa3E"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.restoreCommand = restoreCommand;
4
+ const loader_1 = require("../config/loader");
5
+ const client_factory_1 = require("../utils/client-factory");
6
+ const logger_1 = require("../utils/logger");
7
+ async function restoreCommand(options) {
8
+ const logger = new logger_1.Logger(options);
9
+ const loader = new loader_1.ConfigLoader(options.configDir);
10
+ const endpointConfig = await loader.resolveEndpointFromOptions(options);
11
+ const client = (0, client_factory_1.createClient)(endpointConfig);
12
+ logger.verbose(`Restoring token ${options.tokenId}...`);
13
+ await client.restore(options.tokenId);
14
+ logger.success(`Token ${options.tokenId} restored successfully`);
15
+ }
16
+ //# sourceMappingURL=restore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restore.js","sourceRoot":"","sources":["../../src/commands/restore.ts"],"names":[],"mappings":";;AAgBA,wCAaC;AA7BD,6CAAgD;AAChD,4DAAuD;AACvD,4CAAyC;AAclC,KAAK,UAAU,cAAc,CAAC,OAAuB;IAC1D,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,IAAI,qBAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEnD,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAExE,MAAM,MAAM,GAAG,IAAA,6BAAY,EAAC,cAAc,CAAC,CAAC;IAE5C,MAAM,CAAC,OAAO,CAAC,mBAAmB,OAAO,CAAC,OAAO,KAAK,CAAC,CAAC;IAExD,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtC,MAAM,CAAC,OAAO,CAAC,SAAS,OAAO,CAAC,OAAO,wBAAwB,CAAC,CAAC;AACnE,CAAC"}
@@ -0,0 +1,14 @@
1
+ export type RevokeOptions = {
2
+ endpoint?: string;
3
+ url?: string;
4
+ adminToken?: string;
5
+ authPath?: string;
6
+ adminPath?: string;
7
+ tokenId: string;
8
+ expiresAt?: string;
9
+ configDir?: string;
10
+ verbose?: boolean;
11
+ quiet?: boolean;
12
+ };
13
+ export declare function revokeCommand(options: RevokeOptions): Promise<void>;
14
+ //# sourceMappingURL=revoke.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revoke.d.ts","sourceRoot":"","sources":["../../src/commands/revoke.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBzE"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.revokeCommand = revokeCommand;
4
+ const loader_1 = require("../config/loader");
5
+ const client_factory_1 = require("../utils/client-factory");
6
+ const date_parser_1 = require("../utils/date-parser");
7
+ const logger_1 = require("../utils/logger");
8
+ async function revokeCommand(options) {
9
+ const logger = new logger_1.Logger(options);
10
+ const loader = new loader_1.ConfigLoader(options.configDir);
11
+ const endpointConfig = await loader.resolveEndpointFromOptions(options);
12
+ const client = (0, client_factory_1.createClient)(endpointConfig);
13
+ const expiresAt = options.expiresAt
14
+ ? (0, date_parser_1.parseDate)(options.expiresAt)
15
+ : undefined;
16
+ logger.verbose(`Revoking token ${options.tokenId}...`);
17
+ await client.revoke(options.tokenId, { expiresAt: expiresAt || undefined });
18
+ logger.success(`Token ${options.tokenId} revoked successfully`);
19
+ }
20
+ //# sourceMappingURL=revoke.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revoke.js","sourceRoot":"","sources":["../../src/commands/revoke.ts"],"names":[],"mappings":";;AAkBA,sCAiBC;AAnCD,6CAAgD;AAChD,4DAAuD;AACvD,sDAAiD;AACjD,4CAAyC;AAelC,KAAK,UAAU,aAAa,CAAC,OAAsB;IACxD,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,IAAI,qBAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEnD,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAExE,MAAM,MAAM,GAAG,IAAA,6BAAY,EAAC,cAAc,CAAC,CAAC;IAE5C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS;QACjC,CAAC,CAAC,IAAA,uBAAS,EAAC,OAAO,CAAC,SAAS,CAAC;QAC9B,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,CAAC,OAAO,CAAC,kBAAkB,OAAO,CAAC,OAAO,KAAK,CAAC,CAAC;IAEvD,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,IAAI,SAAS,EAAE,CAAC,CAAC;IAE5E,MAAM,CAAC,OAAO,CAAC,SAAS,OAAO,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAClE,CAAC"}
@@ -0,0 +1,14 @@
1
+ export type SyncOptions = {
2
+ config: string;
3
+ endpoint?: string;
4
+ url?: string;
5
+ adminToken?: string;
6
+ authPath?: string;
7
+ adminPath?: string;
8
+ dryRun?: boolean;
9
+ configDir?: string;
10
+ verbose?: boolean;
11
+ quiet?: boolean;
12
+ };
13
+ export declare function syncCommand(options: SyncOptions): Promise<void>;
14
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAcA,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAiDrE"}
@@ -0,0 +1,197 @@
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.syncCommand = syncCommand;
7
+ const assert_1 = __importDefault(require("assert"));
8
+ const loader_1 = require("../config/loader");
9
+ const client_factory_1 = require("../utils/client-factory");
10
+ const date_parser_1 = require("../utils/date-parser");
11
+ const diff_1 = require("../utils/diff");
12
+ const logger_1 = require("../utils/logger");
13
+ const permissions_1 = require("../utils/permissions");
14
+ async function syncCommand(options) {
15
+ const logger = new logger_1.Logger(options);
16
+ const loader = new loader_1.ConfigLoader(options.configDir);
17
+ const userConfig = await loader.loadUserConfig();
18
+ const syncConfig = await loader.loadSyncConfig(options.config);
19
+ await (0, permissions_1.checkFilePermissions)(options.config, !!syncConfig.defaults?.adminToken ||
20
+ Object.values(syncConfig.endpoints || {}).some((e) => !!e.adminToken));
21
+ if (!syncConfig.tokens || syncConfig.tokens.length === 0) {
22
+ logger.warn("No tokens defined in sync config");
23
+ return;
24
+ }
25
+ const targetEndpoints = resolveTargetEndpoints({
26
+ options,
27
+ userConfig,
28
+ syncConfig,
29
+ loader,
30
+ logger,
31
+ });
32
+ logger.info(`Syncing ${syncConfig.tokens.length} token(s) to ${targetEndpoints.length} endpoint(s)...`);
33
+ logger.info("");
34
+ for (const { name, config: endpointConfig } of targetEndpoints) {
35
+ logger.info(`=== Endpoint: ${name || endpointConfig.url} ===`);
36
+ await syncToEndpoint({
37
+ endpointConfig,
38
+ tokens: syncConfig.tokens,
39
+ dryRun: options.dryRun || false,
40
+ logger,
41
+ });
42
+ logger.info("");
43
+ }
44
+ if (options.dryRun) {
45
+ logger.info("Dry run completed - no changes were made");
46
+ }
47
+ else {
48
+ logger.success("Sync completed successfully!");
49
+ }
50
+ }
51
+ function resolveTargetEndpoints({ options, userConfig, syncConfig, loader, logger, }) {
52
+ const targetEndpoints = [];
53
+ if (options.url) {
54
+ const optionsWithUrl = { ...options, url: options.url };
55
+ const config = loader.resolveDirectEndpointConfig(optionsWithUrl, userConfig?.defaults);
56
+ targetEndpoints.push({ name: null, config });
57
+ }
58
+ else if (options.endpoint) {
59
+ const endpointNames = options.endpoint.split(",").map((e) => e.trim());
60
+ const mergedConfig = loader.mergeConfigs(userConfig, syncConfig);
61
+ for (const name of endpointNames) {
62
+ const config = loader.resolveEndpointConfig(name, mergedConfig);
63
+ targetEndpoints.push({ name, config });
64
+ }
65
+ }
66
+ else {
67
+ if (!syncConfig.endpoints ||
68
+ Object.keys(syncConfig.endpoints).length === 0) {
69
+ throw new Error("No endpoints specified. Either provide --endpoint, --url, or define endpoints in sync config");
70
+ }
71
+ const mergedConfig = loader.mergeConfigs(userConfig, syncConfig);
72
+ for (const name of Object.keys(syncConfig.endpoints)) {
73
+ try {
74
+ const config = loader.resolveEndpointConfig(name, mergedConfig);
75
+ targetEndpoints.push({ name, config });
76
+ }
77
+ catch (error) {
78
+ logger.warn(`Skipping endpoint '${name}': ${error instanceof Error ? error.message : String(error)}`);
79
+ }
80
+ }
81
+ }
82
+ if (targetEndpoints.length === 0) {
83
+ throw new Error("No valid endpoints found to sync to");
84
+ }
85
+ return targetEndpoints;
86
+ }
87
+ async function syncToEndpoint({ endpointConfig, tokens, dryRun, logger, }) {
88
+ const client = (0, client_factory_1.createClient)(endpointConfig);
89
+ const tokenIds = tokens.map((t) => t.tokenId);
90
+ logger.verbose(`Fetching ${tokenIds.length} token(s)...`);
91
+ const { found } = await client.batchLoad(new Set(tokenIds), {
92
+ includeSecretPhc: true,
93
+ });
94
+ const remoteTokens = new Map(found.map((t) => [t.tokenId, t]));
95
+ const now = Math.floor(Date.now() / 1000);
96
+ for (const definition of tokens) {
97
+ const isExpired = definition.expiresAt != null && definition.expiresAt < now;
98
+ if (isExpired) {
99
+ logger.verbose(`Token ${definition.tokenId} is expired, skipping`);
100
+ continue;
101
+ }
102
+ const remote = remoteTokens.get(definition.tokenId);
103
+ const diff = (0, diff_1.compareTokens)(definition, remote);
104
+ if (!diff.exists) {
105
+ if (definition.secretPhc) {
106
+ if (dryRun) {
107
+ logger.dryRun(`Would register token ${definition.tokenId} for ${definition.owner}`);
108
+ }
109
+ else {
110
+ logger.verbose(`Registering token ${definition.tokenId}...`);
111
+ await client.register({
112
+ tokenId: definition.tokenId,
113
+ secretPhc: definition.secretPhc,
114
+ owner: definition.owner,
115
+ isAdmin: definition.isAdmin,
116
+ expiresAt: definition.expiresAt || undefined,
117
+ });
118
+ logger.success(`Registered token ${definition.tokenId} for ${definition.owner}`);
119
+ }
120
+ }
121
+ else {
122
+ logger.warn(`Token ${definition.tokenId} not found and no secretPhc provided - skipping`);
123
+ }
124
+ continue;
125
+ }
126
+ if (diff.needsRevoke) {
127
+ if (dryRun) {
128
+ logger.dryRun(`Would revoke token ${definition.tokenId}`);
129
+ }
130
+ else {
131
+ logger.verbose(`Revoking token ${definition.tokenId}...`);
132
+ await client.revoke(definition.tokenId, {
133
+ expiresAt: definition.expiresAt || undefined,
134
+ });
135
+ logger.info(`Revoked token ${definition.tokenId}`);
136
+ }
137
+ }
138
+ else if (diff.needsRestore) {
139
+ if (dryRun) {
140
+ logger.dryRun(`Would restore token ${definition.tokenId}`);
141
+ }
142
+ else {
143
+ logger.verbose(`Restoring token ${definition.tokenId}...`);
144
+ await client.restore(definition.tokenId);
145
+ logger.info(`Restored token ${definition.tokenId}`);
146
+ }
147
+ }
148
+ if (diff.needsUpdate) {
149
+ const updates = {};
150
+ for (const change of diff.changes) {
151
+ if (change.field === "owner") {
152
+ (0, assert_1.default)(typeof change.newValue === "string", "owner must be a string");
153
+ updates.owner = change.newValue;
154
+ }
155
+ else if (change.field === "isAdmin") {
156
+ (0, assert_1.default)(typeof change.newValue === "boolean", "isAdmin must be a boolean");
157
+ updates.isAdmin = change.newValue;
158
+ }
159
+ else if (change.field === "secretPhc") {
160
+ updates.secretPhc = definition.secretPhc;
161
+ }
162
+ else if (change.field === "expiresAt") {
163
+ (0, assert_1.default)(typeof change.newValue === "number" || change.newValue === null, "expiresAt must be a number or null");
164
+ updates.expiresAt = change.newValue;
165
+ }
166
+ }
167
+ if (dryRun) {
168
+ const changeList = diff.changes
169
+ .map((c) => {
170
+ if (c.field === "expiresAt") {
171
+ let oldVal = "null";
172
+ if (c.oldValue != null) {
173
+ (0, assert_1.default)(typeof c.oldValue === "number", "expiresAt oldValue must be a number");
174
+ oldVal = (0, date_parser_1.formatDate)(c.oldValue);
175
+ }
176
+ let newVal = "null";
177
+ if (c.newValue != null) {
178
+ (0, assert_1.default)(typeof c.newValue === "number", "expiresAt newValue must be a number");
179
+ newVal = (0, date_parser_1.formatDate)(c.newValue);
180
+ }
181
+ return `${c.field}: ${oldVal} → ${newVal}`;
182
+ }
183
+ return `${c.field}: ${String(c.oldValue)} → ${String(c.newValue)}`;
184
+ })
185
+ .join(", ");
186
+ logger.dryRun(`Would update token ${definition.tokenId}: ${changeList}`);
187
+ }
188
+ else {
189
+ logger.verbose(`Updating token ${definition.tokenId}...`);
190
+ await client.update(definition.tokenId, updates);
191
+ const changeList = diff.changes.map((c) => c.field).join(", ");
192
+ logger.info(`Updated token ${definition.tokenId}: ${changeList}`);
193
+ }
194
+ }
195
+ }
196
+ }
197
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export type UpdateOptions = {
2
+ endpoint?: string;
3
+ url?: string;
4
+ adminToken?: string;
5
+ authPath?: string;
6
+ adminPath?: string;
7
+ tokenId: string;
8
+ owner?: string;
9
+ admin?: boolean;
10
+ secretPhc?: string;
11
+ expiresAt?: string;
12
+ configDir?: string;
13
+ verbose?: boolean;
14
+ quiet?: boolean;
15
+ };
16
+ export declare function updateCommand(options: UpdateOptions): Promise<void>;
17
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCzE"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateCommand = updateCommand;
4
+ const loader_1 = require("../config/loader");
5
+ const client_factory_1 = require("../utils/client-factory");
6
+ const date_parser_1 = require("../utils/date-parser");
7
+ const logger_1 = require("../utils/logger");
8
+ async function updateCommand(options) {
9
+ const logger = new logger_1.Logger(options);
10
+ const loader = new loader_1.ConfigLoader(options.configDir);
11
+ const endpointConfig = await loader.resolveEndpointFromOptions(options);
12
+ const client = (0, client_factory_1.createClient)(endpointConfig);
13
+ const updates = {};
14
+ if (options.owner !== undefined) {
15
+ updates.owner = options.owner;
16
+ }
17
+ if (options.admin !== undefined) {
18
+ updates.isAdmin = options.admin;
19
+ }
20
+ if (options.secretPhc !== undefined) {
21
+ updates.secretPhc = options.secretPhc;
22
+ }
23
+ if (options.expiresAt !== undefined) {
24
+ updates.expiresAt = (0, date_parser_1.parseDate)(options.expiresAt);
25
+ }
26
+ if (Object.keys(updates).length === 0) {
27
+ throw new Error("No updates specified. Use --owner, --admin, --secret-phc, or --expires-at");
28
+ }
29
+ logger.verbose(`Updating token ${options.tokenId}...`);
30
+ await client.update(options.tokenId, updates);
31
+ logger.success(`Token ${options.tokenId} updated successfully`);
32
+ }
33
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":";;AAqBA,sCAuCC;AA5DD,6CAAgD;AAChD,4DAAuD;AACvD,sDAAiD;AACjD,4CAAyC;AAkBlC,KAAK,UAAU,aAAa,CAAC,OAAsB;IACxD,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,IAAI,qBAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEnD,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAExE,MAAM,MAAM,GAAG,IAAA,6BAAY,EAAC,cAAc,CAAC,CAAC;IAE5C,MAAM,OAAO,GAKT,EAAE,CAAC;IAEP,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAChC,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;IAClC,CAAC;IACD,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACpC,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACxC,CAAC;IACD,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACpC,OAAO,CAAC,SAAS,GAAG,IAAA,uBAAS,EAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CACb,2EAA2E,CAC5E,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,kBAAkB,OAAO,CAAC,OAAO,KAAK,CAAC,CAAC;IAEvD,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAE9C,MAAM,CAAC,OAAO,CAAC,SAAS,OAAO,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAClE,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { Config, EndpointConfig, MergedEndpointConfig } from "./schemas";
2
+ export declare class ConfigLoader {
3
+ private readonly userConfigPath;
4
+ constructor(userConfigPath?: string);
5
+ loadUserConfig(): Promise<Config | null>;
6
+ loadSyncConfig(syncConfigPath: string): Promise<Config>;
7
+ private loadConfig;
8
+ mergeConfigs(userConfig: Config | null, syncConfig: Config): Config;
9
+ resolveEndpointConfig(endpointName: string, config: Config): MergedEndpointConfig;
10
+ resolveDirectEndpointConfig(config: EndpointConfig & {
11
+ url: string;
12
+ }, defaults?: Config["defaults"]): MergedEndpointConfig;
13
+ resolveEndpointFromOptions(options: EndpointConfig & {
14
+ endpoint?: string;
15
+ }): Promise<MergedEndpointConfig>;
16
+ }
17
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,MAAM,EAEN,cAAc,EACd,oBAAoB,EACrB,MAAM,WAAW,CAAC;AAEnB,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;gBAE5B,cAAc,CAAC,EAAE,MAAM;IAM7B,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IASxC,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAQ/C,UAAU;IAcxB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IA2BnE,qBAAqB,CACnB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GACb,oBAAoB;IAwBvB,2BAA2B,CACzB,MAAM,EAAE,cAAc,GAAG;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,EACxC,QAAQ,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,GAC5B,oBAAoB;IAejB,0BAA0B,CAC9B,OAAO,EAAE,cAAc,GAAG;QACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GACA,OAAO,CAAC,oBAAoB,CAAC;CAejC"}