@breadstone-infrastructure/nx-tasks 0.0.231 → 0.0.232

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 (141) hide show
  1. package/executors/doppler-config-sync/executor.task.d.ts.map +1 -1
  2. package/executors/doppler-config-sync/executor.task.js +37 -18
  3. package/executors/doppler-config-sync/executor.task.js.map +1 -1
  4. package/executors/doppler-vercel-sync/executor.d.ts +11 -0
  5. package/executors/doppler-vercel-sync/executor.d.ts.map +1 -0
  6. package/executors/doppler-vercel-sync/executor.js +71 -0
  7. package/executors/doppler-vercel-sync/executor.js.map +1 -0
  8. package/executors/doppler-vercel-sync/executor.options.d.ts +8 -0
  9. package/executors/doppler-vercel-sync/executor.options.d.ts.map +1 -0
  10. package/executors/doppler-vercel-sync/executor.options.js +4 -0
  11. package/executors/doppler-vercel-sync/executor.options.js.map +1 -0
  12. package/executors/doppler-vercel-sync/executor.task.d.ts +30 -0
  13. package/executors/doppler-vercel-sync/executor.task.d.ts.map +1 -0
  14. package/executors/doppler-vercel-sync/executor.task.js +522 -0
  15. package/executors/doppler-vercel-sync/executor.task.js.map +1 -0
  16. package/executors/doppler-vercel-sync/schema.json +95 -0
  17. package/executors/generate-package-docs/executor.d.ts +6 -0
  18. package/executors/generate-package-docs/executor.d.ts.map +1 -0
  19. package/executors/generate-package-docs/executor.js +72 -0
  20. package/executors/generate-package-docs/executor.js.map +1 -0
  21. package/executors/generate-package-docs/executor.options.d.ts +6 -0
  22. package/executors/generate-package-docs/executor.options.d.ts.map +1 -0
  23. package/executors/generate-package-docs/executor.options.js +4 -0
  24. package/executors/generate-package-docs/executor.options.js.map +1 -0
  25. package/executors/generate-package-docs/executor.task.d.ts +103 -0
  26. package/executors/generate-package-docs/executor.task.d.ts.map +1 -0
  27. package/executors/generate-package-docs/executor.task.js +259 -0
  28. package/executors/generate-package-docs/executor.task.js.map +1 -0
  29. package/executors/generate-package-docs/schema.json +258 -0
  30. package/executors/icon-collection-builder/executor.d.ts.map +1 -1
  31. package/executors/icon-collection-builder/executor.js +3 -2
  32. package/executors/icon-collection-builder/executor.js.map +1 -1
  33. package/executors/icon-collection-builder/executor.task.d.ts +1 -0
  34. package/executors/icon-collection-builder/executor.task.d.ts.map +1 -1
  35. package/executors/icon-collection-builder/executor.task.js +73 -11
  36. package/executors/icon-collection-builder/executor.task.js.map +1 -1
  37. package/executors/icon-collection-builder/svg.d.ts +19 -0
  38. package/executors/icon-collection-builder/svg.d.ts.map +1 -1
  39. package/executors/icon-collection-builder/svg.js +106 -0
  40. package/executors/icon-collection-builder/svg.js.map +1 -1
  41. package/executors/icon-collection-downloader/executor.d.ts.map +1 -1
  42. package/executors/icon-collection-downloader/executor.js +3 -2
  43. package/executors/icon-collection-downloader/executor.js.map +1 -1
  44. package/executors/icon-collection-downloader/executor.task.d.ts +2 -0
  45. package/executors/icon-collection-downloader/executor.task.d.ts.map +1 -1
  46. package/executors/icon-collection-downloader/executor.task.js +130 -15
  47. package/executors/icon-collection-downloader/executor.task.js.map +1 -1
  48. package/executors/lit-docs/ComponentDocFixer.d.ts +176 -0
  49. package/executors/lit-docs/ComponentDocFixer.d.ts.map +1 -0
  50. package/executors/lit-docs/ComponentDocFixer.js +424 -0
  51. package/executors/lit-docs/ComponentDocFixer.js.map +1 -0
  52. package/executors/lit-docs/JSDocFixer.d.ts +97 -0
  53. package/executors/lit-docs/JSDocFixer.d.ts.map +1 -0
  54. package/executors/lit-docs/JSDocFixer.js +200 -0
  55. package/executors/lit-docs/JSDocFixer.js.map +1 -0
  56. package/executors/lit-docs/executor.d.ts.map +1 -1
  57. package/executors/lit-docs/executor.js +2 -1
  58. package/executors/lit-docs/executor.js.map +1 -1
  59. package/executors/lit-docs/executor.task.d.ts +1 -0
  60. package/executors/lit-docs/executor.task.d.ts.map +1 -1
  61. package/executors/lit-docs/executor.task.js +71 -24
  62. package/executors/lit-docs/executor.task.js.map +1 -1
  63. package/executors/lit-style-transform/executor.js +1 -1
  64. package/executors/lit-style-transform/executor.js.map +1 -1
  65. package/executors/prisma-seeds/executor.options.d.ts +1 -1
  66. package/executors/prisma-seeds/executor.task.d.ts +1 -1
  67. package/executors/secrets-config-sync/executor.d.ts +11 -0
  68. package/executors/secrets-config-sync/executor.d.ts.map +1 -0
  69. package/executors/secrets-config-sync/executor.js +64 -0
  70. package/executors/secrets-config-sync/executor.js.map +1 -0
  71. package/executors/secrets-config-sync/executor.options.d.ts +6 -0
  72. package/executors/secrets-config-sync/executor.options.d.ts.map +1 -0
  73. package/executors/secrets-config-sync/executor.options.js +4 -0
  74. package/executors/secrets-config-sync/executor.options.js.map +1 -0
  75. package/executors/secrets-config-sync/executor.task.d.ts +14 -0
  76. package/executors/secrets-config-sync/executor.task.d.ts.map +1 -0
  77. package/executors/secrets-config-sync/executor.task.js +157 -0
  78. package/executors/secrets-config-sync/executor.task.js.map +1 -0
  79. package/executors/secrets-config-sync/providers/azure-keyvault.provider.d.ts +42 -0
  80. package/executors/secrets-config-sync/providers/azure-keyvault.provider.d.ts.map +1 -0
  81. package/executors/secrets-config-sync/providers/azure-keyvault.provider.js +120 -0
  82. package/executors/secrets-config-sync/providers/azure-keyvault.provider.js.map +1 -0
  83. package/executors/secrets-config-sync/providers/doppler.provider.d.ts +18 -0
  84. package/executors/secrets-config-sync/providers/doppler.provider.d.ts.map +1 -0
  85. package/executors/secrets-config-sync/providers/doppler.provider.js +53 -0
  86. package/executors/secrets-config-sync/providers/doppler.provider.js.map +1 -0
  87. package/executors/secrets-config-sync/providers/secrets-provider.factory.d.ts +17 -0
  88. package/executors/secrets-config-sync/providers/secrets-provider.factory.d.ts.map +1 -0
  89. package/executors/secrets-config-sync/providers/secrets-provider.factory.js +25 -0
  90. package/executors/secrets-config-sync/providers/secrets-provider.factory.js.map +1 -0
  91. package/executors/secrets-config-sync/providers/secrets-provider.interface.d.ts +28 -0
  92. package/executors/secrets-config-sync/providers/secrets-provider.interface.d.ts.map +1 -0
  93. package/executors/secrets-config-sync/providers/secrets-provider.interface.js +4 -0
  94. package/executors/secrets-config-sync/providers/secrets-provider.interface.js.map +1 -0
  95. package/executors/secrets-config-sync/schema.json +44 -0
  96. package/executors/secrets-vercel-sync/executor.d.ts +11 -0
  97. package/executors/secrets-vercel-sync/executor.d.ts.map +1 -0
  98. package/executors/secrets-vercel-sync/executor.js +74 -0
  99. package/executors/secrets-vercel-sync/executor.js.map +1 -0
  100. package/executors/secrets-vercel-sync/executor.options.d.ts +8 -0
  101. package/executors/secrets-vercel-sync/executor.options.d.ts.map +1 -0
  102. package/executors/secrets-vercel-sync/executor.options.js +4 -0
  103. package/executors/secrets-vercel-sync/executor.options.js.map +1 -0
  104. package/executors/secrets-vercel-sync/executor.task.d.ts +34 -0
  105. package/executors/secrets-vercel-sync/executor.task.d.ts.map +1 -0
  106. package/executors/secrets-vercel-sync/executor.task.js +492 -0
  107. package/executors/secrets-vercel-sync/executor.task.js.map +1 -0
  108. package/executors/secrets-vercel-sync/providers/azure-keyvault.provider.d.ts +42 -0
  109. package/executors/secrets-vercel-sync/providers/azure-keyvault.provider.d.ts.map +1 -0
  110. package/executors/secrets-vercel-sync/providers/azure-keyvault.provider.js +118 -0
  111. package/executors/secrets-vercel-sync/providers/azure-keyvault.provider.js.map +1 -0
  112. package/executors/secrets-vercel-sync/providers/doppler.provider.d.ts +18 -0
  113. package/executors/secrets-vercel-sync/providers/doppler.provider.d.ts.map +1 -0
  114. package/executors/secrets-vercel-sync/providers/doppler.provider.js +61 -0
  115. package/executors/secrets-vercel-sync/providers/doppler.provider.js.map +1 -0
  116. package/executors/secrets-vercel-sync/providers/secrets-provider.factory.d.ts +17 -0
  117. package/executors/secrets-vercel-sync/providers/secrets-provider.factory.d.ts.map +1 -0
  118. package/executors/secrets-vercel-sync/providers/secrets-provider.factory.js +25 -0
  119. package/executors/secrets-vercel-sync/providers/secrets-provider.factory.js.map +1 -0
  120. package/executors/secrets-vercel-sync/providers/secrets-provider.interface.d.ts +28 -0
  121. package/executors/secrets-vercel-sync/providers/secrets-provider.interface.d.ts.map +1 -0
  122. package/executors/secrets-vercel-sync/providers/secrets-provider.interface.js +4 -0
  123. package/executors/secrets-vercel-sync/providers/secrets-provider.interface.js.map +1 -0
  124. package/executors/secrets-vercel-sync/schema.json +112 -0
  125. package/executors/token-linter/executor.options.d.ts +1 -1
  126. package/executors/token-linter/executor.task.d.ts +1 -1
  127. package/executors/token-linter/schema.json +1 -1
  128. package/executors.json +40 -30
  129. package/index.d.ts +4 -3
  130. package/index.d.ts.map +1 -1
  131. package/index.js +41 -39
  132. package/index.js.map +1 -1
  133. package/package.json +21 -19
  134. package/utils/markdown-processing.d.ts +43 -0
  135. package/utils/markdown-processing.d.ts.map +1 -0
  136. package/utils/markdown-processing.js +186 -0
  137. package/utils/markdown-processing.js.map +1 -0
  138. package/utils/valid-html-tags.d.ts +6 -0
  139. package/utils/valid-html-tags.d.ts.map +1 -0
  140. package/utils/valid-html-tags.js +83 -0
  141. package/utils/valid-html-tags.js.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/executors/secrets-vercel-sync/executor.ts"],"names":[],"mappings":";AAAA,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAalB,8BA8BC;AAxCD,+DAA4D;AAG5D,aAAa;AAEb;;;;GAIG;AACY,KAAK,UAAU,WAAW,CAAC,OAAyC,EAAE,OAAwB;IACzG,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,wDAAa,iBAAiB,GAAC,CAAC,CAAC,qBAAqB,CAAC;QAErE,MAAM,IAAI,CAAC,GAAG,CAAC;YACX,GAAG,EAAE,IAAA,+BAAc,EAAC,OAAO,CAAC;YAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;YAC9C,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;SACnC,CAAC,CAAC;QAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAErB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;AACL,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { SecretsVercelSyncTask } from './executor.task';
2
+ /**
3
+ * Executor options for the secrets-vercel-sync executor.
4
+ *
5
+ * @public
6
+ */
7
+ export type SecretsVercelSyncExecutorOptions = Omit<SecretsVercelSyncTask.ISecretsVercelSyncTaskOptions, 'cwd'>;
8
+ //# sourceMappingURL=executor.options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.options.d.ts","sourceRoot":"","sources":["../../../src/executors/secrets-vercel-sync/executor.options.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAI7D;;;;GAIG;AACH,MAAM,MAAM,gCAAgC,GAAG,IAAI,CAAC,qBAAqB,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ // #region Imports
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ //# sourceMappingURL=executor.options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.options.js","sourceRoot":"","sources":["../../../src/executors/secrets-vercel-sync/executor.options.ts"],"names":[],"mappings":";AAAA,kBAAkB"}
@@ -0,0 +1,34 @@
1
+ import type { SecretsProviderType } from './providers/secrets-provider.factory';
2
+ export declare namespace SecretsVercelSyncTask {
3
+ const VALID_VERCEL_ENVIRONMENTS: readonly ["development", "preview", "production"];
4
+ const VALID_VERCEL_VARIABLE_TYPES: readonly ["encrypted", "sensitive"];
5
+ const VALID_CONFLICT_STRATEGIES: readonly ["none", "prefer-source", "prefer-vercel"];
6
+ type VercelEnvironment = typeof VALID_VERCEL_ENVIRONMENTS[number];
7
+ type VercelVariableType = typeof VALID_VERCEL_VARIABLE_TYPES[number];
8
+ type ConflictStrategy = typeof VALID_CONFLICT_STRATEGIES[number];
9
+ export interface ISecretsVercelSyncTaskOptions {
10
+ cwd: string;
11
+ provider: SecretsProviderType;
12
+ secretsProject: string;
13
+ secretsConfig: string;
14
+ vaultUrl?: string;
15
+ apiKey?: string;
16
+ vercelTeam: string;
17
+ vercelProject: string;
18
+ vercelEnvironment: VercelEnvironment;
19
+ vercelVariableType?: VercelVariableType;
20
+ conflictStrategy?: ConflictStrategy;
21
+ dryRun?: boolean;
22
+ deleteMissing?: boolean;
23
+ includeKeys?: Array<string>;
24
+ excludeKeys?: Array<string>;
25
+ redeploy?: boolean;
26
+ interactive?: boolean;
27
+ }
28
+ /**
29
+ * Executes the Secrets Provider -> Vercel sync.
30
+ */
31
+ export function run(options: ISecretsVercelSyncTaskOptions): Promise<void>;
32
+ export {};
33
+ }
34
+ //# sourceMappingURL=executor.task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.task.d.ts","sourceRoot":"","sources":["../../../src/executors/secrets-vercel-sync/executor.task.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAKhF,yBAAiB,qBAAqB,CAAC;IAMnC,MAAM,yBAAyB,mDAAoD,CAAC;IAEpF,MAAM,2BAA2B,qCAAsC,CAAC;IAExE,MAAM,yBAAyB,qDAAsD,CAAC;IAgBtF,KAAK,iBAAiB,GAAG,OAAO,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAElE,KAAK,kBAAkB,GAAG,OAAO,2BAA2B,CAAC,MAAM,CAAC,CAAC;IAErE,KAAK,gBAAgB,GAAG,OAAO,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAQjE,MAAM,WAAW,6BAA6B;QAC1C,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,mBAAmB,CAAC;QAC9B,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,iBAAiB,CAAC;QACrC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;QACxC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;QACpC,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5B,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,WAAW,CAAC,EAAE,OAAO,CAAC;KACzB;IAqhBD;;OAEG;IACH,gBAAsB,GAAG,CAAC,OAAO,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC,CA2F/E;;CAIJ"}
@@ -0,0 +1,492 @@
1
+ "use strict";
2
+ // #region Imports
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.SecretsVercelSyncTask = void 0;
5
+ const utilities_1 = require("@breadstone-infrastructure/utilities");
6
+ const enquirer_1 = require("enquirer");
7
+ const secrets_provider_factory_1 = require("./providers/secrets-provider.factory");
8
+ // #endregion
9
+ var SecretsVercelSyncTask;
10
+ (function (SecretsVercelSyncTask) {
11
+ // #region Constants
12
+ const VERCEL_API_BASE = 'https://api.vercel.com';
13
+ const VALID_VERCEL_ENVIRONMENTS = ['development', 'preview', 'production'];
14
+ const VALID_VERCEL_VARIABLE_TYPES = ['encrypted', 'sensitive'];
15
+ const VALID_CONFLICT_STRATEGIES = ['none', 'prefer-source', 'prefer-vercel'];
16
+ /**
17
+ * Expected semantic mapping: secrets config -> Vercel environment.
18
+ */
19
+ const STAGE_MAPPING = {
20
+ dev: 'development',
21
+ prev: 'preview',
22
+ stage: 'preview',
23
+ prod: 'production'
24
+ };
25
+ // #endregion
26
+ // #region Validation
27
+ /**
28
+ * Validates all options before execution.
29
+ */
30
+ function validate(options) {
31
+ const variableType = options.vercelVariableType ?? 'encrypted';
32
+ const conflictStrategy = options.conflictStrategy ?? 'prefer-source';
33
+ if (!VALID_VERCEL_ENVIRONMENTS.includes(options.vercelEnvironment)) {
34
+ throw new Error(`Invalid vercelEnvironment "${options.vercelEnvironment}". Allowed: ${VALID_VERCEL_ENVIRONMENTS.join(', ')}`);
35
+ }
36
+ if (!VALID_VERCEL_VARIABLE_TYPES.includes(variableType)) {
37
+ throw new Error(`Invalid vercelVariableType "${variableType}". Allowed: ${VALID_VERCEL_VARIABLE_TYPES.join(', ')}`);
38
+ }
39
+ if (!VALID_CONFLICT_STRATEGIES.includes(conflictStrategy)) {
40
+ throw new Error(`Invalid conflictStrategy "${conflictStrategy}". Allowed: ${VALID_CONFLICT_STRATEGIES.join(', ')}`);
41
+ }
42
+ if (variableType === 'sensitive' && options.vercelEnvironment === 'development') {
43
+ throw new Error('vercelVariableType "sensitive" is not allowed for vercelEnvironment "development". Vercel does not support sensitive variables in development.');
44
+ }
45
+ validateStageMapping(options.secretsConfig, options.vercelEnvironment);
46
+ if (options.includeKeys && options.excludeKeys) {
47
+ const overlap = options.includeKeys.filter(key => options.excludeKeys.includes(key));
48
+ if (overlap.length > 0) {
49
+ throw new Error(`includeKeys and excludeKeys overlap on: ${overlap.join(', ')}. Remove duplicates.`);
50
+ }
51
+ }
52
+ if (options.provider === 'azure-keyvault' && !options.vaultUrl) {
53
+ throw new Error('vaultUrl is required when provider is azure-keyvault.');
54
+ }
55
+ }
56
+ /**
57
+ * Validates that the secrets config and Vercel environment follow the expected semantic mapping.
58
+ */
59
+ function validateStageMapping(secretsConfig, vercelEnvironment) {
60
+ const expectedEnvironment = STAGE_MAPPING[secretsConfig];
61
+ if (expectedEnvironment && expectedEnvironment !== vercelEnvironment) {
62
+ throw new Error(`Semantic stage mismatch: secrets config "${secretsConfig}" is expected to map to Vercel environment "${expectedEnvironment}", but "${vercelEnvironment}" was configured. ` +
63
+ `If this is intentional, review the configuration carefully.`);
64
+ }
65
+ }
66
+ // #endregion
67
+ // #region Vercel API
68
+ /**
69
+ * Prompts the user for a token via interactive terminal input.
70
+ */
71
+ async function promptForToken(label, hint) {
72
+ const credentials = await (0, enquirer_1.prompt)([
73
+ {
74
+ type: 'input',
75
+ name: 'token',
76
+ message: `Enter your ${label}:\n${hint}`
77
+ }
78
+ ]);
79
+ if (!credentials.token) {
80
+ throw new Error(`No ${label} provided. Aborting.`);
81
+ }
82
+ return credentials.token;
83
+ }
84
+ /**
85
+ * Resolves the Vercel API token from the VERCEL_TOKEN environment variable.
86
+ * Falls back to interactive prompt if interactive mode is enabled.
87
+ */
88
+ async function resolveVercelToken(interactive) {
89
+ const token = process.env['VERCEL_TOKEN'];
90
+ if (token) {
91
+ return token;
92
+ }
93
+ if (interactive) {
94
+ return promptForToken('Vercel API token', 'You can create one at https://vercel.com/account/tokens.');
95
+ }
96
+ throw new Error('VERCEL_TOKEN environment variable is not set. Set it to a Vercel API token, or enable interactive mode.');
97
+ }
98
+ /**
99
+ * Builds the query string for Vercel team scoping.
100
+ */
101
+ function buildVercelTeamQuery(team) {
102
+ return team.startsWith('team_')
103
+ ? `teamId=${encodeURIComponent(team)}`
104
+ : `slug=${encodeURIComponent(team)}`;
105
+ }
106
+ /**
107
+ * Heuristically detects whether the values returned by Vercel are still ciphertext despite a
108
+ * successful `?decrypt=true` request. Vercel silently returns ciphertext when the calling token
109
+ * lacks decryption permission (no error). Ciphertext is invariably long (>=100 chars) and limited
110
+ * to base64url charset. If most encrypted-typed values match this profile, we treat the fetch as
111
+ * non-decrypted.
112
+ */
113
+ function detectCiphertext(envs) {
114
+ const candidates = envs.filter(e => e.type === 'encrypted' && typeof e.value === 'string' && e.value.length > 0);
115
+ if (candidates.length === 0) {
116
+ return false;
117
+ }
118
+ const base64UrlOnly = /^[A-Za-z0-9+/=_-]+$/;
119
+ let suspicious = 0;
120
+ for (const env of candidates) {
121
+ if (env.value.length >= 100 && base64UrlOnly.test(env.value)) {
122
+ suspicious++;
123
+ }
124
+ }
125
+ // If a clear majority looks like ciphertext, assume decryption did not happen.
126
+ return suspicious / candidates.length >= 0.5;
127
+ }
128
+ /**
129
+ * Fetches existing environment variables from a Vercel project.
130
+ *
131
+ * Attempts to retrieve decrypted values when `requestDecrypt` is true. If Vercel rejects the
132
+ * decrypt request (e.g. token lacks scope, or the variable type does not support decryption),
133
+ * the request is retried without `decrypt=true` and `decrypted` is reported as `false`.
134
+ *
135
+ * Note: Vercel may also silently return ciphertext when `?decrypt=true` is sent with a token
136
+ * that lacks decryption scope (no HTTP error). In that case `decrypted` is also reported as
137
+ * `false` based on a content heuristic ({@link detectCiphertext}).
138
+ */
139
+ async function fetchVercelEnvVars(token, project, team, requestDecrypt, logger) {
140
+ const teamQuery = buildVercelTeamQuery(team);
141
+ const baseUrl = `${VERCEL_API_BASE}/v9/projects/${encodeURIComponent(project)}/env?${teamQuery}`;
142
+ if (requestDecrypt) {
143
+ try {
144
+ const envs = await fetchAllVercelEnvPages(token, `${baseUrl}&decrypt=true`);
145
+ const stillCiphertext = detectCiphertext(envs);
146
+ if (stillCiphertext) {
147
+ logger.warn(' Vercel returned ciphertext despite decrypt=true (token likely lacks decryption scope).');
148
+ return { envs, decrypted: false };
149
+ }
150
+ logger.log(` Fetched ${envs.length} env vars from Vercel [${project}] (decrypted).`);
151
+ return { envs, decrypted: true };
152
+ }
153
+ catch (error) {
154
+ const message = error instanceof Error ? error.message : String(error);
155
+ logger.warn(` Decrypted fetch failed (${message}). Falling back to non-decrypted fetch.`);
156
+ }
157
+ }
158
+ const envs = await fetchAllVercelEnvPages(token, baseUrl);
159
+ logger.log(` Fetched ${envs.length} env vars from Vercel [${project}] (values not comparable).`);
160
+ return { envs, decrypted: false };
161
+ }
162
+ /**
163
+ * Pages through all Vercel env vars for the given list URL.
164
+ */
165
+ async function fetchAllVercelEnvPages(token, listUrl) {
166
+ const allEnvVars = [];
167
+ let nextUrl = listUrl;
168
+ while (nextUrl) {
169
+ const response = await fetch(nextUrl, {
170
+ headers: { Authorization: `Bearer ${token}` }
171
+ });
172
+ if (!response.ok) {
173
+ throw new Error(`Failed to fetch Vercel env vars (HTTP ${response.status}): ${response.statusText}`);
174
+ }
175
+ const data = await response.json();
176
+ allEnvVars.push(...data.envs);
177
+ if (data.pagination?.next) {
178
+ nextUrl = `${listUrl}&until=${data.pagination.next}`;
179
+ }
180
+ else {
181
+ nextUrl = undefined;
182
+ }
183
+ }
184
+ return allEnvVars;
185
+ }
186
+ /**
187
+ * Creates a new environment variable in Vercel.
188
+ */
189
+ async function createVercelEnvVar(token, project, team, key, value, target, type) {
190
+ const teamQuery = buildVercelTeamQuery(team);
191
+ const url = `${VERCEL_API_BASE}/v10/projects/${encodeURIComponent(project)}/env?${teamQuery}`;
192
+ const response = await fetch(url, {
193
+ method: 'POST',
194
+ headers: {
195
+ Authorization: `Bearer ${token}`,
196
+ 'Content-Type': 'application/json'
197
+ },
198
+ body: JSON.stringify({
199
+ key,
200
+ value,
201
+ target: [target],
202
+ type
203
+ })
204
+ });
205
+ if (!response.ok) {
206
+ const body = await response.text();
207
+ throw new Error(`Failed to create Vercel env var "${key}" (HTTP ${response.status}): ${body}`);
208
+ }
209
+ }
210
+ /**
211
+ * Updates an existing environment variable in Vercel.
212
+ */
213
+ async function updateVercelEnvVar(token, project, team, envVarId, key, value, target, type) {
214
+ const teamQuery = buildVercelTeamQuery(team);
215
+ const url = `${VERCEL_API_BASE}/v9/projects/${encodeURIComponent(project)}/env/${encodeURIComponent(envVarId)}?${teamQuery}`;
216
+ const response = await fetch(url, {
217
+ method: 'PATCH',
218
+ headers: {
219
+ Authorization: `Bearer ${token}`,
220
+ 'Content-Type': 'application/json'
221
+ },
222
+ body: JSON.stringify({
223
+ value,
224
+ target: [target],
225
+ type
226
+ })
227
+ });
228
+ if (!response.ok) {
229
+ const body = await response.text();
230
+ throw new Error(`Failed to update Vercel env var "${key}" (HTTP ${response.status}): ${body}`);
231
+ }
232
+ }
233
+ /**
234
+ * Deletes an environment variable from Vercel.
235
+ */
236
+ async function deleteVercelEnvVar(token, project, team, envVarId, key) {
237
+ const teamQuery = buildVercelTeamQuery(team);
238
+ const url = `${VERCEL_API_BASE}/v9/projects/${encodeURIComponent(project)}/env/${encodeURIComponent(envVarId)}?${teamQuery}`;
239
+ const response = await fetch(url, {
240
+ method: 'DELETE',
241
+ headers: { Authorization: `Bearer ${token}` }
242
+ });
243
+ if (!response.ok) {
244
+ const body = await response.text();
245
+ throw new Error(`Failed to delete Vercel env var "${key}" (HTTP ${response.status}): ${body}`);
246
+ }
247
+ }
248
+ /**
249
+ * Triggers a redeployment of the latest deployment in the given Vercel project and environment.
250
+ */
251
+ async function triggerRedeploy(token, project, team, target, logger) {
252
+ const teamQuery = buildVercelTeamQuery(team);
253
+ const listUrl = `${VERCEL_API_BASE}/v6/deployments?projectId=${encodeURIComponent(project)}&${teamQuery}&target=${encodeURIComponent(target)}&limit=1`;
254
+ const listResponse = await fetch(listUrl, {
255
+ headers: { Authorization: `Bearer ${token}` }
256
+ });
257
+ if (!listResponse.ok) {
258
+ logger.warn(` Could not list deployments for redeploy (HTTP ${listResponse.status}). Skipping redeploy.`);
259
+ return;
260
+ }
261
+ const listData = await listResponse.json();
262
+ if (!listData.deployments || listData.deployments.length === 0) {
263
+ logger.warn(` No deployment found for target "${target}". Skipping redeploy.`);
264
+ return;
265
+ }
266
+ const deploymentId = listData.deployments[0].uid;
267
+ const redeployUrl = `${VERCEL_API_BASE}/v13/deployments?${teamQuery}&forceNew=1`;
268
+ const redeployResponse = await fetch(redeployUrl, {
269
+ method: 'POST',
270
+ headers: {
271
+ Authorization: `Bearer ${token}`,
272
+ 'Content-Type': 'application/json'
273
+ },
274
+ body: JSON.stringify({
275
+ name: project,
276
+ deploymentId,
277
+ target
278
+ })
279
+ });
280
+ if (!redeployResponse.ok) {
281
+ const body = await redeployResponse.text();
282
+ logger.warn(` Redeploy failed (HTTP ${redeployResponse.status}): ${body}`);
283
+ return;
284
+ }
285
+ logger.log(` Triggered redeployment for "${target}".`);
286
+ }
287
+ // #endregion
288
+ // #region Filtering
289
+ /**
290
+ * Applies includeKeys and excludeKeys filters to the given secrets map.
291
+ */
292
+ function applyKeyFilters(secrets, includeKeys, excludeKeys) {
293
+ let keys = Object.keys(secrets);
294
+ if (includeKeys && includeKeys.length > 0) {
295
+ const includeSet = new Set(includeKeys);
296
+ keys = keys.filter(key => includeSet.has(key));
297
+ }
298
+ if (excludeKeys && excludeKeys.length > 0) {
299
+ const excludeSet = new Set(excludeKeys);
300
+ keys = keys.filter(key => !excludeSet.has(key));
301
+ }
302
+ return Object.fromEntries(keys.map(key => [key, secrets[key]]));
303
+ }
304
+ // #endregion
305
+ // #region Diff & Sync
306
+ /**
307
+ * Computes the diff between source secrets and existing Vercel env vars for a given environment.
308
+ *
309
+ * When `valuesComparable` is `false`, value equality cannot be verified (encrypted/sensitive variables
310
+ * whose decrypted form was not retrievable). To guarantee Vercel always reflects the latest source state,
311
+ * existing keys are then emitted as `forced` (and will be patched) under `prefer-source`. Under
312
+ * `prefer-vercel` or `none` the key is `skipped` to honor user intent.
313
+ */
314
+ function computeDiff(sourceSecrets, vercelVars, environment, conflictStrategy, deleteMissing, valuesComparable) {
315
+ const results = [];
316
+ // Index vercel vars for this environment by key
317
+ const vercelByKey = new Map();
318
+ for (const envVar of vercelVars) {
319
+ if (envVar.target.includes(environment)) {
320
+ vercelByKey.set(envVar.key, envVar);
321
+ }
322
+ }
323
+ // Process all source keys
324
+ for (const [key, value] of Object.entries(sourceSecrets)) {
325
+ const existing = vercelByKey.get(key);
326
+ if (!existing) {
327
+ // Key does not exist in Vercel -> add
328
+ results.push({ key, action: 'added', value });
329
+ continue;
330
+ }
331
+ if (!valuesComparable) {
332
+ // Cannot compare values (encrypted without decrypt or sensitive).
333
+ // To guarantee Vercel = source, force a patch under prefer-source.
334
+ switch (conflictStrategy) {
335
+ case 'prefer-source':
336
+ results.push({ key, action: 'forced', vercelId: existing.id, value });
337
+ break;
338
+ case 'prefer-vercel':
339
+ case 'none':
340
+ results.push({ key, action: 'skipped', vercelId: existing.id });
341
+ break;
342
+ }
343
+ continue;
344
+ }
345
+ if (existing.value === value) {
346
+ // Value is unchanged
347
+ results.push({ key, action: 'unchanged', vercelId: existing.id });
348
+ }
349
+ else {
350
+ // Conflict: value differs
351
+ switch (conflictStrategy) {
352
+ case 'prefer-source':
353
+ results.push({ key, action: 'updated', vercelId: existing.id, value });
354
+ break;
355
+ case 'prefer-vercel':
356
+ results.push({ key, action: 'skipped', vercelId: existing.id });
357
+ break;
358
+ case 'none':
359
+ results.push({ key, action: 'skipped', vercelId: existing.id });
360
+ break;
361
+ }
362
+ }
363
+ }
364
+ // Keys in Vercel but not in source
365
+ if (deleteMissing) {
366
+ for (const [key, envVar] of vercelByKey) {
367
+ if (!(key in sourceSecrets)) {
368
+ results.push({ key, action: 'deleted', vercelId: envVar.id });
369
+ }
370
+ }
371
+ }
372
+ return results;
373
+ }
374
+ // #endregion
375
+ // #region Logging
376
+ /**
377
+ * Returns a colored tag string for the given sync action.
378
+ */
379
+ function formatActionTag(action, dryRun) {
380
+ const prefix = dryRun ? 'DRY RUN: ' : '';
381
+ switch (action) {
382
+ case 'added':
383
+ return (0, utilities_1.green)((0, utilities_1.bold)(`[${prefix}added]`));
384
+ case 'updated':
385
+ return (0, utilities_1.yellow)((0, utilities_1.bold)(`[${prefix}updated]`));
386
+ case 'forced':
387
+ return (0, utilities_1.cyan)((0, utilities_1.bold)(`[${prefix}forced]`));
388
+ case 'unchanged':
389
+ return (0, utilities_1.gray)((0, utilities_1.bold)('[unchanged]'));
390
+ case 'skipped':
391
+ return (0, utilities_1.magenta)((0, utilities_1.bold)('[skipped]'));
392
+ case 'deleted':
393
+ return (0, utilities_1.red)((0, utilities_1.bold)(`[${prefix}deleted]`));
394
+ }
395
+ }
396
+ /**
397
+ * Logs the sync results as a single alphabetically sorted tree with colored action tags.
398
+ */
399
+ function logResults(logger, results, dryRun) {
400
+ const sorted = [...results].sort((a, b) => a.key.localeCompare(b.key));
401
+ (0, utilities_1.logTree)(logger, `Keys (${sorted.length})`, sorted.map(r => ({
402
+ label: `${r.key} ${formatActionTag(r.action, dryRun)}`
403
+ })));
404
+ }
405
+ // #endregion
406
+ // #region Main Task
407
+ /**
408
+ * Executes the Secrets Provider -> Vercel sync.
409
+ */
410
+ async function run(options) {
411
+ const logger = new utilities_1.ConsoleLogger();
412
+ const providerType = options.provider ?? 'doppler';
413
+ const variableType = options.vercelVariableType ?? 'encrypted';
414
+ const conflictStrategy = options.conflictStrategy ?? 'prefer-source';
415
+ const dryRun = options.dryRun ?? false;
416
+ const deleteMissing = options.deleteMissing ?? false;
417
+ const interactive = options.interactive ?? false;
418
+ (0, utilities_1.logSeparator)(logger, `${providerType} → Vercel Sync`);
419
+ // Step 1: Validate
420
+ logger.log('Validating options...');
421
+ validate(options);
422
+ (0, utilities_1.logBanner)(logger, 'info', {
423
+ message: `${options.secretsProject}/${options.secretsConfig} → ${options.vercelProject}/${options.vercelEnvironment}`,
424
+ details: `Provider: ${providerType} | Type: ${variableType} | Strategy: ${conflictStrategy} | Dry Run: ${dryRun} | Delete Missing: ${deleteMissing}`
425
+ });
426
+ // Step 2: Resolve tokens
427
+ const secretsProvider = (0, secrets_provider_factory_1.createSecretsProvider)(providerType);
428
+ const secretsToken = await secretsProvider.authenticate(options.apiKey, interactive);
429
+ const vercelToken = await resolveVercelToken(interactive);
430
+ // Step 3: Fetch secrets from the provider
431
+ logger.log(`Fetching secrets from ${providerType}...`);
432
+ let sourceSecrets = await secretsProvider.fetchSecrets(secretsToken, options.secretsProject, options.secretsConfig, logger, options.vaultUrl);
433
+ // Step 4: Apply key filters
434
+ sourceSecrets = applyKeyFilters(sourceSecrets, options.includeKeys, options.excludeKeys);
435
+ logger.log(` ${Object.keys(sourceSecrets).length} keys after filtering.`);
436
+ // Step 5: Fetch Vercel env vars (request decryption only for encrypted type;
437
+ // sensitive values are never returned by the Vercel API regardless of decrypt=true).
438
+ logger.log('Fetching Vercel environment variables...');
439
+ const requestDecrypt = variableType === 'encrypted';
440
+ const vercelFetch = await fetchVercelEnvVars(vercelToken, options.vercelProject, options.vercelTeam, requestDecrypt, logger);
441
+ const valuesComparable = vercelFetch.decrypted;
442
+ if (!valuesComparable) {
443
+ const reason = variableType === 'sensitive'
444
+ ? 'Vercel never returns values for "sensitive" variables.'
445
+ : 'Decrypted fetch was not available (token scope or API restriction).';
446
+ (0, utilities_1.logBanner)(logger, 'warning', {
447
+ message: 'Value comparison disabled.',
448
+ details: `${reason} Existing keys will be force-patched under "prefer-source" to guarantee Vercel mirrors the secrets provider. Use "prefer-vercel" or "none" to skip instead.`
449
+ });
450
+ }
451
+ // Step 6: Compute diff
452
+ logger.log('Computing diff...');
453
+ const diff = computeDiff(sourceSecrets, vercelFetch.envs, options.vercelEnvironment, conflictStrategy, deleteMissing, valuesComparable);
454
+ (0, utilities_1.logEmptyLine)(logger);
455
+ // Step 7: Apply changes (or dry-run report)
456
+ if (dryRun) {
457
+ (0, utilities_1.logBanner)(logger, 'warning', 'DRY RUN - no changes will be written to Vercel.');
458
+ logResults(logger, diff, true);
459
+ }
460
+ else {
461
+ for (const entry of diff) {
462
+ switch (entry.action) {
463
+ case 'added':
464
+ await createVercelEnvVar(vercelToken, options.vercelProject, options.vercelTeam, entry.key, entry.value, options.vercelEnvironment, variableType);
465
+ break;
466
+ case 'updated':
467
+ case 'forced':
468
+ await updateVercelEnvVar(vercelToken, options.vercelProject, options.vercelTeam, entry.vercelId, entry.key, entry.value, options.vercelEnvironment, variableType);
469
+ break;
470
+ case 'deleted':
471
+ await deleteVercelEnvVar(vercelToken, options.vercelProject, options.vercelTeam, entry.vercelId, entry.key);
472
+ break;
473
+ case 'unchanged':
474
+ case 'skipped':
475
+ // No action needed
476
+ break;
477
+ }
478
+ }
479
+ logResults(logger, diff, false);
480
+ // Step 8: Optional redeploy
481
+ if (options.redeploy) {
482
+ logger.log('Triggering redeployment...');
483
+ await triggerRedeploy(vercelToken, options.vercelProject, options.vercelTeam, options.vercelEnvironment, logger);
484
+ }
485
+ }
486
+ (0, utilities_1.logEmptyLine)(logger);
487
+ (0, utilities_1.logBanner)(logger, 'success', 'Sync complete.');
488
+ }
489
+ SecretsVercelSyncTask.run = run;
490
+ // #endregion
491
+ })(SecretsVercelSyncTask || (exports.SecretsVercelSyncTask = SecretsVercelSyncTask = {}));
492
+ //# sourceMappingURL=executor.task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.task.js","sourceRoot":"","sources":["../../../src/executors/secrets-vercel-sync/executor.task.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { ILogger } from '@breadstone-infrastructure/utilities';
2
+ import type { ISecretsProvider } from './secrets-provider.interface';
3
+ /**
4
+ * Secrets provider implementation for Azure Key Vault.
5
+ *
6
+ * Uses the Key Vault REST API with a Bearer token (e.g. from `az account get-access-token`
7
+ * or a service principal client credential flow). The token must be provided via `apiKey`
8
+ * or entered interactively.
9
+ *
10
+ * @public
11
+ */
12
+ export declare class AzureKeyVaultSecretsProvider implements ISecretsProvider {
13
+ /**
14
+ * @inheritdoc
15
+ */
16
+ authenticate(apiKey?: string, interactive?: boolean): Promise<string>;
17
+ /**
18
+ * Fetches all secrets from an Azure Key Vault.
19
+ *
20
+ * The `project` and `config` parameters are ignored. The vault is identified
21
+ * solely by `vaultUrl`.
22
+ *
23
+ * @inheritdoc
24
+ */
25
+ fetchSecrets(token: string, _project: string, _config: string, logger: ILogger, vaultUrl?: string): Promise<Record<string, string>>;
26
+ /**
27
+ * Lists all secrets in the vault (handles pagination).
28
+ */
29
+ private listSecrets;
30
+ /**
31
+ * Fetches the current value of a single secret.
32
+ */
33
+ private getSecretValue;
34
+ /**
35
+ * Extracts the secret name from a Key Vault secret ID URL.
36
+ *
37
+ * @example
38
+ * `https://my-vault.vault.azure.net/secrets/MY_SECRET` → `MY_SECRET`
39
+ */
40
+ private extractSecretName;
41
+ }
42
+ //# sourceMappingURL=azure-keyvault.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"azure-keyvault.provider.d.ts","sourceRoot":"","sources":["../../../../src/executors/secrets-vercel-sync/providers/azure-keyvault.provider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAEpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AA8BrE;;;;;;;;GAQG;AACH,qBAAa,4BAA6B,YAAW,gBAAgB;IAIjE;;OAEG;IACU,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IA6BlF;;;;;;;OAOG;IACU,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IA4BhJ;;OAEG;YACW,WAAW;IAsBzB;;OAEG;YACW,cAAc;IAgB5B;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;CAO5B"}