@norrix/cli 0.0.50 → 0.0.51

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.
@@ -0,0 +1,41 @@
1
+ import type { ValueSource } from './smart-prompt.js';
2
+ /**
3
+ * Tracks which credential values were manually provided by the user
4
+ * (not from org env vars or config file) so we can offer to save them
5
+ * to norrix.config.ts after the command completes.
6
+ */
7
+ export declare class ConfigValueTracker {
8
+ private userProvidedValues;
9
+ /**
10
+ * Track a credential value and its source.
11
+ * Only stores values that came from user input.
12
+ *
13
+ * @param name - Field name (e.g., 'ascApiKeyId')
14
+ * @param value - The value (or undefined if using org env var)
15
+ * @param source - Where the value came from
16
+ */
17
+ track(name: string, value: string | undefined, source: ValueSource): void;
18
+ /**
19
+ * Get all user-provided values as a plain object.
20
+ * Useful for saving to norrix.config.ts.
21
+ *
22
+ * @returns Object mapping field names to values
23
+ */
24
+ getUserProvidedValues(): Record<string, string>;
25
+ /**
26
+ * Check if there are any user-provided values worth saving.
27
+ *
28
+ * @returns true if we should offer to save values to config
29
+ */
30
+ shouldOfferToSave(): boolean;
31
+ /**
32
+ * Get the count of user-provided values.
33
+ *
34
+ * @returns Number of values tracked
35
+ */
36
+ getCount(): number;
37
+ /**
38
+ * Clear all tracked values.
39
+ */
40
+ clear(): void;
41
+ }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Tracks which credential values were manually provided by the user
3
+ * (not from org env vars or config file) so we can offer to save them
4
+ * to norrix.config.ts after the command completes.
5
+ */
6
+ export class ConfigValueTracker {
7
+ userProvidedValues = new Map();
8
+ /**
9
+ * Track a credential value and its source.
10
+ * Only stores values that came from user input.
11
+ *
12
+ * @param name - Field name (e.g., 'ascApiKeyId')
13
+ * @param value - The value (or undefined if using org env var)
14
+ * @param source - Where the value came from
15
+ */
16
+ track(name, value, source) {
17
+ // Only track user-provided values
18
+ if (source === 'user-input' && value !== undefined) {
19
+ this.userProvidedValues.set(name, value);
20
+ }
21
+ }
22
+ /**
23
+ * Get all user-provided values as a plain object.
24
+ * Useful for saving to norrix.config.ts.
25
+ *
26
+ * @returns Object mapping field names to values
27
+ */
28
+ getUserProvidedValues() {
29
+ const result = {};
30
+ for (const [name, value] of this.userProvidedValues.entries()) {
31
+ result[name] = value;
32
+ }
33
+ return result;
34
+ }
35
+ /**
36
+ * Check if there are any user-provided values worth saving.
37
+ *
38
+ * @returns true if we should offer to save values to config
39
+ */
40
+ shouldOfferToSave() {
41
+ return this.userProvidedValues.size > 0;
42
+ }
43
+ /**
44
+ * Get the count of user-provided values.
45
+ *
46
+ * @returns Number of values tracked
47
+ */
48
+ getCount() {
49
+ return this.userProvidedValues.size;
50
+ }
51
+ /**
52
+ * Clear all tracked values.
53
+ */
54
+ clear() {
55
+ this.userProvidedValues.clear();
56
+ }
57
+ }
58
+ //# sourceMappingURL=config-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-tracker.js","sourceRoot":"","sources":["../../src/lib/config-tracker.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,OAAO,kBAAkB;IACrB,kBAAkB,GAAwB,IAAI,GAAG,EAAE,CAAC;IAE5D;;;;;;;OAOG;IACH,KAAK,CAAC,IAAY,EAAE,KAAyB,EAAE,MAAmB;QAChE,kCAAkC;QAClC,IAAI,MAAM,KAAK,YAAY,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACnD,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,qBAAqB;QACnB,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,CAAC;YAC9D,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACvB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,iBAAiB;QACf,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED;;;;OAIG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;CACF"}
@@ -50,6 +50,14 @@ export interface NorrixIosConfig {
50
50
  * Used for auto-provisioning with Fastlane Match.
51
51
  */
52
52
  ascPrivateKeyPath?: string;
53
+ /**
54
+ * TestFlight external tester group names for beta distribution.
55
+ * Used when submitting to external testing (Beta App Review).
56
+ * Groups must be created in App Store Connect before use.
57
+ * @default ["External Testers"]
58
+ * @example ["External Testers", "Beta Testers"]
59
+ */
60
+ testflightGroups?: string[];
53
61
  }
54
62
  /**
55
63
  * Android-specific build configuration
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAsKpC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,IAAI,YAAY,GAAwB,IAAI,CAAC;AAC7C,IAAI,gBAAgB,GAAkB,IAAI,CAAC;AAE3C;;;GAGG;AACH,SAAS,qBAAqB,CAAI,GAAM;IACtC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC,IAAI,EAAO,CAAC;IACzB,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAM,CAAC;IAC7D,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,MAAW,CAAC;IACrB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,WAAmB;IAEnB,oDAAoD;IACpD,IAAI,YAAY,IAAI,gBAAgB,KAAK,WAAW,EAAE,CAAC;QACrD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,WAAW,GAAG;QAClB,kBAAkB;QAClB,kBAAkB;QAClB,mBAAmB;QACnB,mBAAmB;KACpB,CAAC;IAEF,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAEtD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,0EAA0E;YAC1E,+EAA+E;YAC/E,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/B,oDAAoD;gBACpD,2DAA2D;gBAC3D,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,UAAU,CAAC,CAAC;gBACtD,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;oBAChD,YAAY,GAAG,SAAS,CAAC;oBACzB,gBAAgB,GAAG,WAAW,CAAC;oBAC/B,OAAO,SAAS,CAAC;gBACnB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,6BAA6B;gBAC7B,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;gBAC/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;gBACrC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC;gBACxC,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;gBAChD,YAAY,GAAG,SAAS,CAAC;gBACzB,gBAAgB,GAAG,WAAW,CAAC;gBAC/B,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,+CAA+C;YAC/C,OAAO,CAAC,IAAI,CAAC,2BAA2B,UAAU,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,YAAY,GAAG,EAAE,CAAC;IAClB,gBAAgB,GAAG,WAAW,CAAC;IAC/B,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,oBAAoB,CACjC,UAAkB;IAElB,gFAAgF;IAChF,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAEpD,gDAAgD;QAChD,MAAM,YAAY,GAAG,OAAO;YAC1B,2BAA2B;aAC1B,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC;YACrC,sCAAsC;aACrC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC;YACnC,qEAAqE;aACpE,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAE/B,kEAAkE;QAClE,wCAAwC;QACxC,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC9D,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACpD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3D,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAE1C,yBAAyB;QACzB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,2CAA2C;QAC3C,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjB,KAAK,EAAE,CAAC;YACV,CAAC;iBAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACxB,KAAK,EAAE,CAAC;gBACR,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;oBAChB,MAAM,GAAG,CAAC,CAAC;oBACX,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;QACrD,oEAAoE;QACpE,sEAAsE;QACtE,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,UAAU,SAAS,EAAE,CAAC,EAAE,CAAC;QACrD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;IAC1B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,YAAY,GAAG,IAAI,CAAC;IACpB,gBAAgB,GAAG,IAAI,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,WAAmB;IACjD,MAAM,WAAW,GAAG;QAClB,kBAAkB;QAClB,kBAAkB;QAClB,mBAAmB;QACnB,mBAAmB;KACpB,CAAC;IAEF,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAC/B,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAC5C,CAAC;AACJ,CAAC;AAoBD;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAA8B;IAClE,MAAM,KAAK,GAAa;QACtB,kDAAkD;QAClD,EAAE;QACF,KAAK;QACL,6BAA6B;QAC7B,sCAAsC;QACtC,KAAK;QACL,iEAAiE;QACjE,KAAK;QACL,kBAAkB;KACnB,CAAC;IAEF,aAAa;IACb,MAAM,YAAY,GAChB,OAAO,CAAC,MAAM;QACd,OAAO,CAAC,gBAAgB;QACxB,OAAO,CAAC,OAAO;QACf,OAAO,CAAC,uBAAuB;QAC/B,OAAO,CAAC,WAAW,CAAC;IACtB,IAAI,YAAY,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,0BAA0B,OAAO,CAAC,gBAAgB,IAAI,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,OAAO,CAAC,uBAAuB,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CACR,iCAAiC,OAAO,CAAC,uBAAuB,IAAI,CACrE,CAAC;QACJ,CAAC;QACD,oCAAoC;QACpC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;YACvE,KAAK,CAAC,IAAI,CAAC,qBAAqB,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,qBAAqB,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,2BAA2B,OAAO,CAAC,iBAAiB,IAAI,CAAC,CAAC;QACvE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;IAED,iBAAiB;IACjB,MAAM,gBAAgB,GAAG,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC;IAClE,IAAI,gBAAgB,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3B,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,sBAAsB,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,kBAAkB,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;QACrD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;IAED,+BAA+B;IAC/B,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,uBAAuB,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACxC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,WAAmB,EACnB,OAA8B;IAE9B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/C,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAE9C,6CAA6C;IAC7C,gBAAgB,EAAE,CAAC;IAEnB,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Mapping of credential fields to org environment variable names.
3
+ * Each field can have multiple variants that will be checked.
4
+ */
5
+ export declare const ORG_ENV_VAR_MAPPINGS: Record<string, string[]>;
6
+ /**
7
+ * Fetch the names of all environment variables configured for the current organization.
8
+ * This includes both string variables and file-based variables.
9
+ *
10
+ * @param apiUrl - The API base URL
11
+ * @param headers - Authentication headers (from getAuthHeaders)
12
+ * @param verbose - Whether to log verbose output
13
+ * @returns Array of environment variable names
14
+ */
15
+ export declare function fetchOrgEnvVarNames(apiUrl: string, headers: Record<string, string>, verbose?: boolean): Promise<string[]>;
16
+ /**
17
+ * Check if any of the given environment variable names exist in the available org env vars.
18
+ *
19
+ * @param variantNames - Array of possible env var names to check (e.g., ['KEYSTORE_ALIAS_PASSWORD', 'KEY_PASSWORD'])
20
+ * @param availableOrgEnvVars - Array of env var names configured in the org
21
+ * @returns The first matching env var name, or null if none found
22
+ */
23
+ export declare function hasOrgEnvVar(variantNames: string[], availableOrgEnvVars: string[]): string | null;
24
+ /**
25
+ * Get the org env var names that should be checked for a given credential field.
26
+ *
27
+ * @param fieldName - The credential field name (e.g., 'ascApiKeyId')
28
+ * @returns Array of env var names to check, or empty array if not mapped
29
+ */
30
+ export declare function getOrgEnvVarNamesForField(fieldName: string): string[];
@@ -0,0 +1,78 @@
1
+ import axios from 'axios';
2
+ /**
3
+ * Mapping of credential fields to org environment variable names.
4
+ * Each field can have multiple variants that will be checked.
5
+ */
6
+ export const ORG_ENV_VAR_MAPPINGS = {
7
+ // iOS credentials
8
+ teamId: ['APPLE_TEAM_ID'],
9
+ ascApiKeyId: ['ASC_API_KEY_ID'],
10
+ ascIssuerId: ['ASC_ISSUER_ID'],
11
+ ascPrivateKeyPath: ['ASC_PRIVATE_KEY'],
12
+ p12Path: ['P12_PATH'],
13
+ p12Password: ['P12_PASSWORD'],
14
+ provisioningProfilePath: ['PROVISIONING_PROFILE_PATH'],
15
+ // Android credentials
16
+ keystorePath: ['ANDROID_KEYSTORE', 'KEYSTORE_PATH'],
17
+ keystorePassword: ['KEYSTORE_PASSWORD'],
18
+ keyAlias: ['KEYSTORE_ALIAS'],
19
+ keyPassword: ['KEYSTORE_ALIAS_PASSWORD', 'KEY_PASSWORD'],
20
+ playServiceAccountJsonPath: ['PLAY_SERVICE_ACCOUNT_JSON_PATH'],
21
+ };
22
+ /**
23
+ * Fetch the names of all environment variables configured for the current organization.
24
+ * This includes both string variables and file-based variables.
25
+ *
26
+ * @param apiUrl - The API base URL
27
+ * @param headers - Authentication headers (from getAuthHeaders)
28
+ * @param verbose - Whether to log verbose output
29
+ * @returns Array of environment variable names
30
+ */
31
+ export async function fetchOrgEnvVarNames(apiUrl, headers, verbose = false) {
32
+ try {
33
+ const res = await axios.get(`${apiUrl}/env`, { headers });
34
+ // Extract variable names from response
35
+ const variables = res.data.variables || [];
36
+ const files = res.data.files || [];
37
+ const varNames = [
38
+ ...variables.map((v) => v.name),
39
+ ...files.map((f) => f.name),
40
+ ];
41
+ if (verbose) {
42
+ console.log(`Fetched ${varNames.length} org environment variable(s): ${varNames.join(', ')}`);
43
+ }
44
+ return varNames;
45
+ }
46
+ catch (error) {
47
+ if (verbose) {
48
+ console.warn('Failed to fetch org environment variables:', error.message);
49
+ }
50
+ // Graceful fallback: return empty array if API call fails
51
+ return [];
52
+ }
53
+ }
54
+ /**
55
+ * Check if any of the given environment variable names exist in the available org env vars.
56
+ *
57
+ * @param variantNames - Array of possible env var names to check (e.g., ['KEYSTORE_ALIAS_PASSWORD', 'KEY_PASSWORD'])
58
+ * @param availableOrgEnvVars - Array of env var names configured in the org
59
+ * @returns The first matching env var name, or null if none found
60
+ */
61
+ export function hasOrgEnvVar(variantNames, availableOrgEnvVars) {
62
+ for (const varName of variantNames) {
63
+ if (availableOrgEnvVars.includes(varName)) {
64
+ return varName; // Return the matched name
65
+ }
66
+ }
67
+ return null;
68
+ }
69
+ /**
70
+ * Get the org env var names that should be checked for a given credential field.
71
+ *
72
+ * @param fieldName - The credential field name (e.g., 'ascApiKeyId')
73
+ * @returns Array of env var names to check, or empty array if not mapped
74
+ */
75
+ export function getOrgEnvVarNamesForField(fieldName) {
76
+ return ORG_ENV_VAR_MAPPINGS[fieldName] || [];
77
+ }
78
+ //# sourceMappingURL=org-env-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org-env-helper.js","sourceRoot":"","sources":["../../src/lib/org-env-helper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAA6B;IAC5D,kBAAkB;IAClB,MAAM,EAAE,CAAC,eAAe,CAAC;IACzB,WAAW,EAAE,CAAC,gBAAgB,CAAC;IAC/B,WAAW,EAAE,CAAC,eAAe,CAAC;IAC9B,iBAAiB,EAAE,CAAC,iBAAiB,CAAC;IACtC,OAAO,EAAE,CAAC,UAAU,CAAC;IACrB,WAAW,EAAE,CAAC,cAAc,CAAC;IAC7B,uBAAuB,EAAE,CAAC,2BAA2B,CAAC;IAEtD,sBAAsB;IACtB,YAAY,EAAE,CAAC,kBAAkB,EAAE,eAAe,CAAC;IACnD,gBAAgB,EAAE,CAAC,mBAAmB,CAAC;IACvC,QAAQ,EAAE,CAAC,gBAAgB,CAAC;IAC5B,WAAW,EAAE,CAAC,yBAAyB,EAAE,cAAc,CAAC;IACxD,0BAA0B,EAAE,CAAC,gCAAgC,CAAC;CAC/D,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAc,EACd,OAA+B,EAC/B,OAAO,GAAG,KAAK;IAEf,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAE1D,uCAAuC;QACvC,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAEnC,MAAM,QAAQ,GAAG;YACf,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACpC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SACjC,CAAC;QAEF,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CACT,WAAW,QAAQ,CAAC,MAAM,iCAAiC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACjF,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CACV,4CAA4C,EAC5C,KAAK,CAAC,OAAO,CACd,CAAC;QACJ,CAAC;QACD,0DAA0D;QAC1D,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,YAAsB,EACtB,mBAA6B;IAE7B,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC,IAAI,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1C,OAAO,OAAO,CAAC,CAAC,0BAA0B;QAC5C,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,SAAiB;IACzD,OAAO,oBAAoB,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,79 @@
1
+ export type ValueSource = 'cli' | 'org-env' | 'config' | 'process-env' | 'user-input' | 'skipped';
2
+ export interface SmartPromptResult {
3
+ /**
4
+ * The resolved value.
5
+ * - undefined = use org env var (don't send this field to API, CI will inject it)
6
+ * - string = value to send to API
7
+ */
8
+ value: string | undefined;
9
+ /**
10
+ * Source of the value (for tracking and debugging)
11
+ */
12
+ source: ValueSource;
13
+ }
14
+ export interface SmartPromptOptions {
15
+ /**
16
+ * Field name for internal tracking (e.g., 'ascApiKeyId')
17
+ */
18
+ name: string;
19
+ /**
20
+ * Prompt message to show user (e.g., 'App Store Connect API Key ID:')
21
+ */
22
+ message: string;
23
+ /**
24
+ * Inquirer prompt type (default: 'input')
25
+ */
26
+ type?: string;
27
+ /**
28
+ * Value from CLI argument (highest priority)
29
+ */
30
+ cliValue?: string;
31
+ /**
32
+ * Value from norrix.config.ts
33
+ */
34
+ configValue?: string;
35
+ /**
36
+ * Org env var names to check (e.g., ['ASC_API_KEY_ID'])
37
+ */
38
+ orgEnvVarNames: string[];
39
+ /**
40
+ * List of all env var names the org has configured
41
+ */
42
+ availableOrgEnvVars: string[];
43
+ /**
44
+ * Process env var names to check (e.g., ['ASC_API_KEY_ID'])
45
+ */
46
+ processEnvNames?: string[];
47
+ /**
48
+ * Whether in non-interactive mode
49
+ */
50
+ nonInteractive?: boolean;
51
+ /**
52
+ * Whether to mask the input (for passwords)
53
+ */
54
+ mask?: boolean;
55
+ /**
56
+ * Validation function for user input
57
+ */
58
+ validate?: (value: string) => boolean | string;
59
+ /**
60
+ * Whether this field is required
61
+ */
62
+ required?: boolean;
63
+ /**
64
+ * Default value if no other source provides one
65
+ */
66
+ default?: string;
67
+ }
68
+ /**
69
+ * Smart prompt that checks multiple sources in priority order:
70
+ * 1. CLI arguments
71
+ * 2. Org environment variables (with user confirmation)
72
+ * 3. Config file (with user confirmation)
73
+ * 4. Process environment variables
74
+ * 5. User input
75
+ *
76
+ * When org env var is used, returns undefined to signal that the field should be
77
+ * omitted from API request (CI will inject it).
78
+ */
79
+ export declare function smartPrompt(options: SmartPromptOptions): Promise<SmartPromptResult>;
@@ -0,0 +1,131 @@
1
+ import inquirer from 'inquirer';
2
+ import { hasOrgEnvVar } from './org-env-helper.js';
3
+ /**
4
+ * Smart prompt that checks multiple sources in priority order:
5
+ * 1. CLI arguments
6
+ * 2. Org environment variables (with user confirmation)
7
+ * 3. Config file (with user confirmation)
8
+ * 4. Process environment variables
9
+ * 5. User input
10
+ *
11
+ * When org env var is used, returns undefined to signal that the field should be
12
+ * omitted from API request (CI will inject it).
13
+ */
14
+ export async function smartPrompt(options) {
15
+ const { name, message, type = 'input', cliValue, configValue, orgEnvVarNames, availableOrgEnvVars, processEnvNames = [], nonInteractive = false, mask = false, validate, required = false, } = options;
16
+ // Helper to trim and normalize values
17
+ const trimString = (val) => {
18
+ if (!val)
19
+ return undefined;
20
+ const trimmed = val.toString().trim();
21
+ return trimmed.length > 0 ? trimmed : undefined;
22
+ };
23
+ // 1. CLI value takes highest priority
24
+ const normalizedCliValue = trimString(cliValue);
25
+ if (normalizedCliValue) {
26
+ return { value: normalizedCliValue, source: 'cli' };
27
+ }
28
+ // 2. Check org environment variables
29
+ const matchedOrgEnvVar = hasOrgEnvVar(orgEnvVarNames, availableOrgEnvVars);
30
+ if (matchedOrgEnvVar) {
31
+ if (nonInteractive) {
32
+ // In non-interactive mode, automatically use org env var
33
+ return { value: undefined, source: 'org-env' };
34
+ }
35
+ else {
36
+ // In interactive mode, ask user for confirmation
37
+ const { useOrgEnv } = await inquirer.prompt([
38
+ {
39
+ type: 'confirm',
40
+ name: 'useOrgEnv',
41
+ message: `Use my organization's value for ${matchedOrgEnvVar}? (*****)`,
42
+ default: true,
43
+ },
44
+ ]);
45
+ if (useOrgEnv) {
46
+ return { value: undefined, source: 'org-env' };
47
+ }
48
+ // User declined, continue to next source
49
+ }
50
+ }
51
+ // 3. Check config file value
52
+ const normalizedConfigValue = trimString(configValue);
53
+ if (normalizedConfigValue) {
54
+ if (nonInteractive) {
55
+ // In non-interactive mode, automatically use config value
56
+ return { value: normalizedConfigValue, source: 'config' };
57
+ }
58
+ else {
59
+ // In interactive mode, ask user for confirmation
60
+ const displayValue = normalizedConfigValue.length > 40
61
+ ? normalizedConfigValue.substring(0, 37) + '...'
62
+ : normalizedConfigValue;
63
+ // Convert camelCase name to readable format (e.g., 'teamId' -> 'Team ID')
64
+ let fieldLabel = name
65
+ .replace(/([A-Z])/g, ' $1')
66
+ .replace(/^./, (str) => str.toUpperCase())
67
+ .trim();
68
+ // Expand ASC to "App Store Connect (ASC)" for clarity
69
+ fieldLabel = fieldLabel.replace(/\bAsc\b/g, 'App Store Connect (ASC)');
70
+ const { useConfig } = await inquirer.prompt([
71
+ {
72
+ type: 'confirm',
73
+ name: 'useConfig',
74
+ message: `Use saved ${fieldLabel} '${displayValue}' from norrix.config.ts?`,
75
+ default: true,
76
+ },
77
+ ]);
78
+ if (useConfig) {
79
+ return { value: normalizedConfigValue, source: 'config' };
80
+ }
81
+ // User declined, continue to next source
82
+ }
83
+ }
84
+ // 4. Check process environment variables
85
+ for (const envVarName of processEnvNames) {
86
+ const envValue = trimString(process.env[envVarName]);
87
+ if (envValue) {
88
+ return { value: envValue, source: 'process-env' };
89
+ }
90
+ }
91
+ // 5. Non-interactive mode: use default or fail if required
92
+ if (nonInteractive) {
93
+ const defaultValue = trimString(options.default);
94
+ if (defaultValue) {
95
+ return { value: defaultValue, source: 'user-input' };
96
+ }
97
+ if (required) {
98
+ throw new Error(`${name} is required but not provided in non-interactive mode. ` +
99
+ `Please provide via CLI argument, org env var, config file, or process env var.`);
100
+ }
101
+ // Not required and no value available
102
+ return { value: undefined, source: 'skipped' };
103
+ }
104
+ // 6. Interactive prompt for user input
105
+ const promptType = mask ? 'password' : type;
106
+ const promptConfig = {
107
+ type: promptType,
108
+ name: 'userInput',
109
+ message,
110
+ };
111
+ if (options.default !== undefined) {
112
+ promptConfig.default = options.default;
113
+ }
114
+ if (validate) {
115
+ promptConfig.validate = (value) => {
116
+ if (!required && !value)
117
+ return true; // Allow empty if not required
118
+ return validate(value);
119
+ };
120
+ }
121
+ const { userInput } = await inquirer.prompt([promptConfig]);
122
+ const normalizedUserInput = trimString(userInput);
123
+ if (!normalizedUserInput && required) {
124
+ throw new Error(`${name} is required but no value was provided.`);
125
+ }
126
+ return {
127
+ value: normalizedUserInput,
128
+ source: 'user-input',
129
+ };
130
+ }
131
+ //# sourceMappingURL=smart-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smart-prompt.js","sourceRoot":"","sources":["../../src/lib/smart-prompt.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@norrix/cli",
3
- "version": "0.0.50",
3
+ "version": "0.0.51",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",