@adobedjangir/commerce-admin-management 0.0.16 → 0.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -6
- package/actions/configurations/ext.config.yaml +40 -0
- package/package.json +1 -1
- package/scripts/setup.js +102 -9
package/README.md
CHANGED
|
@@ -51,15 +51,24 @@ and an extension point for host apps to add their own pages and actions.
|
|
|
51
51
|
aio app init my-commerce-admin
|
|
52
52
|
cd my-commerce-admin
|
|
53
53
|
|
|
54
|
-
# 2. Install
|
|
55
|
-
#
|
|
56
|
-
npm install @adobedjangir/commerce-admin-management
|
|
54
|
+
# 2. Install with --legacy-peer-deps on first install.
|
|
55
|
+
# aio's default template pins React 16; this package requires React 18.
|
|
56
|
+
npm install --legacy-peer-deps @adobedjangir/commerce-admin-management
|
|
57
57
|
|
|
58
|
-
# 3.
|
|
59
|
-
|
|
58
|
+
# 3. Run the setup helper. Bumps host deps to React 18 / Spectrum 4 floor,
|
|
59
|
+
# scaffolds web-src/, removes the dx/excshell/1 boilerplate, and
|
|
60
|
+
# generates AIO_DB_REGION + SYSTEM_CONFIG_CRYPT_KEY in .env.
|
|
61
|
+
npx @adobedjangir/commerce-admin-management-setup
|
|
62
|
+
|
|
63
|
+
# 4. Apply the bumped versions
|
|
64
|
+
rm -rf node_modules package-lock.json
|
|
65
|
+
npm install
|
|
66
|
+
|
|
67
|
+
# 5. Fill in any missing .env values (OAUTH_*) — region + crypt key are
|
|
68
|
+
# auto-generated by step 3.
|
|
60
69
|
$EDITOR .env
|
|
61
70
|
|
|
62
|
-
#
|
|
71
|
+
# 6. Deploy. ABDB is auto-provisioned; actions + web assets ship to CDN.
|
|
63
72
|
aio app deploy
|
|
64
73
|
```
|
|
65
74
|
|
|
@@ -36,9 +36,13 @@ runtimeManifest:
|
|
|
36
36
|
LOG_LEVEL: debug
|
|
37
37
|
SYSTEM_CONFIG_CRYPT_KEY: $SYSTEM_CONFIG_CRYPT_KEY
|
|
38
38
|
OAUTH_CLIENT_ID: $OAUTH_CLIENT_ID
|
|
39
|
+
IMS_OAUTH_S2S_CLIENT_ID: $IMS_OAUTH_S2S_CLIENT_ID
|
|
39
40
|
OAUTH_CLIENT_SECRET: $OAUTH_CLIENT_SECRET
|
|
41
|
+
IMS_OAUTH_S2S_CLIENT_SECRET: $IMS_OAUTH_S2S_CLIENT_SECRET
|
|
40
42
|
OAUTH_ORG_ID: $OAUTH_ORG_ID
|
|
43
|
+
IMS_OAUTH_S2S_ORG_ID: $IMS_OAUTH_S2S_ORG_ID
|
|
41
44
|
OAUTH_SCOPES: $OAUTH_SCOPES
|
|
45
|
+
IMS_OAUTH_S2S_SCOPES: $IMS_OAUTH_S2S_SCOPES
|
|
42
46
|
AIO_DB_REGION: $AIO_DB_REGION
|
|
43
47
|
annotations:
|
|
44
48
|
require-adobe-auth: false
|
|
@@ -52,9 +56,13 @@ runtimeManifest:
|
|
|
52
56
|
LOG_LEVEL: debug
|
|
53
57
|
SYSTEM_CONFIG_CRYPT_KEY: $SYSTEM_CONFIG_CRYPT_KEY
|
|
54
58
|
OAUTH_CLIENT_ID: $OAUTH_CLIENT_ID
|
|
59
|
+
IMS_OAUTH_S2S_CLIENT_ID: $IMS_OAUTH_S2S_CLIENT_ID
|
|
55
60
|
OAUTH_CLIENT_SECRET: $OAUTH_CLIENT_SECRET
|
|
61
|
+
IMS_OAUTH_S2S_CLIENT_SECRET: $IMS_OAUTH_S2S_CLIENT_SECRET
|
|
56
62
|
OAUTH_ORG_ID: $OAUTH_ORG_ID
|
|
63
|
+
IMS_OAUTH_S2S_ORG_ID: $IMS_OAUTH_S2S_ORG_ID
|
|
57
64
|
OAUTH_SCOPES: $OAUTH_SCOPES
|
|
65
|
+
IMS_OAUTH_S2S_SCOPES: $IMS_OAUTH_S2S_SCOPES
|
|
58
66
|
AIO_DB_REGION: $AIO_DB_REGION
|
|
59
67
|
annotations:
|
|
60
68
|
require-adobe-auth: false
|
|
@@ -68,9 +76,13 @@ runtimeManifest:
|
|
|
68
76
|
LOG_LEVEL: debug
|
|
69
77
|
SYSTEM_CONFIG_CRYPT_KEY: $SYSTEM_CONFIG_CRYPT_KEY
|
|
70
78
|
OAUTH_CLIENT_ID: $OAUTH_CLIENT_ID
|
|
79
|
+
IMS_OAUTH_S2S_CLIENT_ID: $IMS_OAUTH_S2S_CLIENT_ID
|
|
71
80
|
OAUTH_CLIENT_SECRET: $OAUTH_CLIENT_SECRET
|
|
81
|
+
IMS_OAUTH_S2S_CLIENT_SECRET: $IMS_OAUTH_S2S_CLIENT_SECRET
|
|
72
82
|
OAUTH_ORG_ID: $OAUTH_ORG_ID
|
|
83
|
+
IMS_OAUTH_S2S_ORG_ID: $IMS_OAUTH_S2S_ORG_ID
|
|
73
84
|
OAUTH_SCOPES: $OAUTH_SCOPES
|
|
85
|
+
IMS_OAUTH_S2S_SCOPES: $IMS_OAUTH_S2S_SCOPES
|
|
74
86
|
AIO_DB_REGION: $AIO_DB_REGION
|
|
75
87
|
annotations:
|
|
76
88
|
require-adobe-auth: false
|
|
@@ -83,9 +95,13 @@ runtimeManifest:
|
|
|
83
95
|
inputs:
|
|
84
96
|
LOG_LEVEL: debug
|
|
85
97
|
OAUTH_CLIENT_ID: $OAUTH_CLIENT_ID
|
|
98
|
+
IMS_OAUTH_S2S_CLIENT_ID: $IMS_OAUTH_S2S_CLIENT_ID
|
|
86
99
|
OAUTH_CLIENT_SECRET: $OAUTH_CLIENT_SECRET
|
|
100
|
+
IMS_OAUTH_S2S_CLIENT_SECRET: $IMS_OAUTH_S2S_CLIENT_SECRET
|
|
87
101
|
OAUTH_ORG_ID: $OAUTH_ORG_ID
|
|
102
|
+
IMS_OAUTH_S2S_ORG_ID: $IMS_OAUTH_S2S_ORG_ID
|
|
88
103
|
OAUTH_SCOPES: $OAUTH_SCOPES
|
|
104
|
+
IMS_OAUTH_S2S_SCOPES: $IMS_OAUTH_S2S_SCOPES
|
|
89
105
|
AIO_DB_REGION: $AIO_DB_REGION
|
|
90
106
|
annotations:
|
|
91
107
|
require-adobe-auth: false
|
|
@@ -99,9 +115,13 @@ runtimeManifest:
|
|
|
99
115
|
LOG_LEVEL: debug
|
|
100
116
|
SYSTEM_CONFIG_CRYPT_KEY: $SYSTEM_CONFIG_CRYPT_KEY
|
|
101
117
|
OAUTH_CLIENT_ID: $OAUTH_CLIENT_ID
|
|
118
|
+
IMS_OAUTH_S2S_CLIENT_ID: $IMS_OAUTH_S2S_CLIENT_ID
|
|
102
119
|
OAUTH_CLIENT_SECRET: $OAUTH_CLIENT_SECRET
|
|
120
|
+
IMS_OAUTH_S2S_CLIENT_SECRET: $IMS_OAUTH_S2S_CLIENT_SECRET
|
|
103
121
|
OAUTH_ORG_ID: $OAUTH_ORG_ID
|
|
122
|
+
IMS_OAUTH_S2S_ORG_ID: $IMS_OAUTH_S2S_ORG_ID
|
|
104
123
|
OAUTH_SCOPES: $OAUTH_SCOPES
|
|
124
|
+
IMS_OAUTH_S2S_SCOPES: $IMS_OAUTH_S2S_SCOPES
|
|
105
125
|
AIO_DB_REGION: $AIO_DB_REGION
|
|
106
126
|
annotations:
|
|
107
127
|
require-adobe-auth: false
|
|
@@ -118,9 +138,13 @@ runtimeManifest:
|
|
|
118
138
|
LOG_LEVEL: debug
|
|
119
139
|
SYSTEM_CONFIG_CRYPT_KEY: $SYSTEM_CONFIG_CRYPT_KEY
|
|
120
140
|
OAUTH_CLIENT_ID: $OAUTH_CLIENT_ID
|
|
141
|
+
IMS_OAUTH_S2S_CLIENT_ID: $IMS_OAUTH_S2S_CLIENT_ID
|
|
121
142
|
OAUTH_CLIENT_SECRET: $OAUTH_CLIENT_SECRET
|
|
143
|
+
IMS_OAUTH_S2S_CLIENT_SECRET: $IMS_OAUTH_S2S_CLIENT_SECRET
|
|
122
144
|
OAUTH_ORG_ID: $OAUTH_ORG_ID
|
|
145
|
+
IMS_OAUTH_S2S_ORG_ID: $IMS_OAUTH_S2S_ORG_ID
|
|
123
146
|
OAUTH_SCOPES: $OAUTH_SCOPES
|
|
147
|
+
IMS_OAUTH_S2S_SCOPES: $IMS_OAUTH_S2S_SCOPES
|
|
124
148
|
AIO_DB_REGION: $AIO_DB_REGION
|
|
125
149
|
annotations:
|
|
126
150
|
require-adobe-auth: false
|
|
@@ -134,9 +158,13 @@ runtimeManifest:
|
|
|
134
158
|
LOG_LEVEL: debug
|
|
135
159
|
SYSTEM_CONFIG_CRYPT_KEY: $SYSTEM_CONFIG_CRYPT_KEY
|
|
136
160
|
OAUTH_CLIENT_ID: $OAUTH_CLIENT_ID
|
|
161
|
+
IMS_OAUTH_S2S_CLIENT_ID: $IMS_OAUTH_S2S_CLIENT_ID
|
|
137
162
|
OAUTH_CLIENT_SECRET: $OAUTH_CLIENT_SECRET
|
|
163
|
+
IMS_OAUTH_S2S_CLIENT_SECRET: $IMS_OAUTH_S2S_CLIENT_SECRET
|
|
138
164
|
OAUTH_ORG_ID: $OAUTH_ORG_ID
|
|
165
|
+
IMS_OAUTH_S2S_ORG_ID: $IMS_OAUTH_S2S_ORG_ID
|
|
139
166
|
OAUTH_SCOPES: $OAUTH_SCOPES
|
|
167
|
+
IMS_OAUTH_S2S_SCOPES: $IMS_OAUTH_S2S_SCOPES
|
|
140
168
|
AIO_DB_REGION: $AIO_DB_REGION
|
|
141
169
|
annotations:
|
|
142
170
|
require-adobe-auth: false
|
|
@@ -150,9 +178,13 @@ runtimeManifest:
|
|
|
150
178
|
LOG_LEVEL: debug
|
|
151
179
|
SYSTEM_CONFIG_CRYPT_KEY: $SYSTEM_CONFIG_CRYPT_KEY
|
|
152
180
|
OAUTH_CLIENT_ID: $OAUTH_CLIENT_ID
|
|
181
|
+
IMS_OAUTH_S2S_CLIENT_ID: $IMS_OAUTH_S2S_CLIENT_ID
|
|
153
182
|
OAUTH_CLIENT_SECRET: $OAUTH_CLIENT_SECRET
|
|
183
|
+
IMS_OAUTH_S2S_CLIENT_SECRET: $IMS_OAUTH_S2S_CLIENT_SECRET
|
|
154
184
|
OAUTH_ORG_ID: $OAUTH_ORG_ID
|
|
185
|
+
IMS_OAUTH_S2S_ORG_ID: $IMS_OAUTH_S2S_ORG_ID
|
|
155
186
|
OAUTH_SCOPES: $OAUTH_SCOPES
|
|
187
|
+
IMS_OAUTH_S2S_SCOPES: $IMS_OAUTH_S2S_SCOPES
|
|
156
188
|
AIO_DB_REGION: $AIO_DB_REGION
|
|
157
189
|
annotations:
|
|
158
190
|
require-adobe-auth: false
|
|
@@ -166,9 +198,13 @@ runtimeManifest:
|
|
|
166
198
|
LOG_LEVEL: debug
|
|
167
199
|
SYSTEM_CONFIG_CRYPT_KEY: $SYSTEM_CONFIG_CRYPT_KEY
|
|
168
200
|
OAUTH_CLIENT_ID: $OAUTH_CLIENT_ID
|
|
201
|
+
IMS_OAUTH_S2S_CLIENT_ID: $IMS_OAUTH_S2S_CLIENT_ID
|
|
169
202
|
OAUTH_CLIENT_SECRET: $OAUTH_CLIENT_SECRET
|
|
203
|
+
IMS_OAUTH_S2S_CLIENT_SECRET: $IMS_OAUTH_S2S_CLIENT_SECRET
|
|
170
204
|
OAUTH_ORG_ID: $OAUTH_ORG_ID
|
|
205
|
+
IMS_OAUTH_S2S_ORG_ID: $IMS_OAUTH_S2S_ORG_ID
|
|
171
206
|
OAUTH_SCOPES: $OAUTH_SCOPES
|
|
207
|
+
IMS_OAUTH_S2S_SCOPES: $IMS_OAUTH_S2S_SCOPES
|
|
172
208
|
AIO_DB_REGION: $AIO_DB_REGION
|
|
173
209
|
annotations:
|
|
174
210
|
require-adobe-auth: false
|
|
@@ -182,9 +218,13 @@ runtimeManifest:
|
|
|
182
218
|
LOG_LEVEL: debug
|
|
183
219
|
SYSTEM_CONFIG_CRYPT_KEY: $SYSTEM_CONFIG_CRYPT_KEY
|
|
184
220
|
OAUTH_CLIENT_ID: $OAUTH_CLIENT_ID
|
|
221
|
+
IMS_OAUTH_S2S_CLIENT_ID: $IMS_OAUTH_S2S_CLIENT_ID
|
|
185
222
|
OAUTH_CLIENT_SECRET: $OAUTH_CLIENT_SECRET
|
|
223
|
+
IMS_OAUTH_S2S_CLIENT_SECRET: $IMS_OAUTH_S2S_CLIENT_SECRET
|
|
186
224
|
OAUTH_ORG_ID: $OAUTH_ORG_ID
|
|
225
|
+
IMS_OAUTH_S2S_ORG_ID: $IMS_OAUTH_S2S_ORG_ID
|
|
187
226
|
OAUTH_SCOPES: $OAUTH_SCOPES
|
|
227
|
+
IMS_OAUTH_S2S_SCOPES: $IMS_OAUTH_S2S_SCOPES
|
|
188
228
|
AIO_DB_REGION: $AIO_DB_REGION
|
|
189
229
|
annotations:
|
|
190
230
|
require-adobe-auth: false
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adobedjangir/commerce-admin-management",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.18",
|
|
4
4
|
"description": "Schema-driven system configuration for Adobe Commerce App Builder sync apps. Magento-style scoped config in Adobe App Builder Database (ABDB) with encryption, Commerce REST helpers, and React Admin UI.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Adobe Inc.",
|
package/scripts/setup.js
CHANGED
|
@@ -591,24 +591,55 @@ function ensureHostDeps (projectRoot) {
|
|
|
591
591
|
try { pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8')) } catch (_) {
|
|
592
592
|
return { changed: false, reason: 'unreadable-package-json' }
|
|
593
593
|
}
|
|
594
|
-
pkg.dependencies = pkg.dependencies || {}
|
|
595
594
|
|
|
595
|
+
// Decide which deps need bumping by reading the current package.json.
|
|
596
596
|
const bumped = []
|
|
597
597
|
for (const [name, floor] of Object.entries(REQUIRED_HOST_DEPS)) {
|
|
598
|
-
const declared = pkg.dependencies
|
|
598
|
+
const declared = (pkg.dependencies && pkg.dependencies[name]) ||
|
|
599
|
+
(pkg.devDependencies && pkg.devDependencies[name])
|
|
599
600
|
if (declared && satisfiesFloor(declared, floor)) continue
|
|
600
|
-
// Move it to dependencies (out of devDependencies if it was there) and
|
|
601
|
-
// set to the floor.
|
|
602
|
-
pkg.dependencies[name] = floor
|
|
603
|
-
if (pkg.devDependencies && pkg.devDependencies[name]) {
|
|
604
|
-
delete pkg.devDependencies[name]
|
|
605
|
-
}
|
|
606
601
|
bumped.push({ name, was: declared || '(missing)', now: floor })
|
|
607
602
|
}
|
|
608
603
|
|
|
609
604
|
if (bumped.length === 0) return { changed: false, reason: 'already-satisfies' }
|
|
610
605
|
|
|
611
|
-
|
|
606
|
+
// Persist via `npm pkg set` rather than fs.writeFileSync. The outer
|
|
607
|
+
// `npm install <pkg>` keeps a buffered copy of package.json that it
|
|
608
|
+
// writes at the very end of the install (to add the package itself
|
|
609
|
+
// as a dependency) — that write clobbers anything we'd done via
|
|
610
|
+
// fs.writeFileSync. `npm pkg set` goes through npm's own metadata
|
|
611
|
+
// layer and persists across that final write.
|
|
612
|
+
const { execSync } = require('child_process')
|
|
613
|
+
const args = bumped
|
|
614
|
+
.map((b) => `dependencies.${b.name}=${b.now}`)
|
|
615
|
+
// Some keys contain "@" which `npm pkg set` accepts unquoted; we
|
|
616
|
+
// shell-quote the whole assignment to be safe.
|
|
617
|
+
.map((a) => `'${a.replace(/'/g, "'\\''")}'`)
|
|
618
|
+
.join(' ')
|
|
619
|
+
try {
|
|
620
|
+
execSync(`npm pkg set ${args}`, {
|
|
621
|
+
cwd: projectRoot,
|
|
622
|
+
stdio: 'pipe',
|
|
623
|
+
env: { ...process.env, COMMERCE_ADMIN_MANAGEMENT_SKIP_SETUP: '1' }
|
|
624
|
+
})
|
|
625
|
+
} catch (e) {
|
|
626
|
+
return { changed: false, reason: `npm-pkg-set-failed: ${e.message}` }
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
// Also remove from devDependencies so the bumped value in dependencies
|
|
630
|
+
// is the only spec npm will see on the next resolution.
|
|
631
|
+
const inDev = bumped.filter((b) => pkg.devDependencies && pkg.devDependencies[b.name])
|
|
632
|
+
if (inDev.length) {
|
|
633
|
+
const delArgs = inDev.map((b) => `'devDependencies.${b.name}'`).join(' ')
|
|
634
|
+
try {
|
|
635
|
+
execSync(`npm pkg delete ${delArgs}`, {
|
|
636
|
+
cwd: projectRoot,
|
|
637
|
+
stdio: 'pipe',
|
|
638
|
+
env: { ...process.env, COMMERCE_ADMIN_MANAGEMENT_SKIP_SETUP: '1' }
|
|
639
|
+
})
|
|
640
|
+
} catch (_) { /* non-fatal */ }
|
|
641
|
+
}
|
|
642
|
+
|
|
612
643
|
return { changed: true, bumped }
|
|
613
644
|
}
|
|
614
645
|
|
|
@@ -624,6 +655,62 @@ function ensureHostDeps (projectRoot) {
|
|
|
624
655
|
*
|
|
625
656
|
* Returns { changed, set: [{key, source}], file }.
|
|
626
657
|
*/
|
|
658
|
+
/**
|
|
659
|
+
* Mirror IMS_OAUTH_S2S_* → OAUTH_* in the host's .env. Newer Adobe Developer
|
|
660
|
+
* Console templates use the IMS_OAUTH_S2S_ prefix; our actions still read
|
|
661
|
+
* the legacy OAUTH_ names. We append aliases so both work — only when
|
|
662
|
+
* IMS_OAUTH_S2S_* is set and OAUTH_* isn't. Idempotent: re-running won't
|
|
663
|
+
* duplicate the block (we identify our own mirror block by its comment).
|
|
664
|
+
*/
|
|
665
|
+
function mirrorImsOauthAliases (projectRoot) {
|
|
666
|
+
const envPath = path.join(projectRoot, '.env')
|
|
667
|
+
if (!fs.existsSync(envPath)) return { changed: false, reason: 'no-env' }
|
|
668
|
+
let env = ''
|
|
669
|
+
try { env = fs.readFileSync(envPath, 'utf8') } catch (_) { return { changed: false, reason: 'unreadable' } }
|
|
670
|
+
|
|
671
|
+
const grab = (k) => {
|
|
672
|
+
const m = env.match(new RegExp('^' + k + '=(.*)$', 'm'))
|
|
673
|
+
return m ? m[1] : ''
|
|
674
|
+
}
|
|
675
|
+
const id = grab('IMS_OAUTH_S2S_CLIENT_ID')
|
|
676
|
+
const sec = grab('IMS_OAUTH_S2S_CLIENT_SECRET')
|
|
677
|
+
const org = grab('IMS_OAUTH_S2S_ORG_ID')
|
|
678
|
+
let scopes = grab('IMS_OAUTH_S2S_SCOPES')
|
|
679
|
+
|
|
680
|
+
if (!id || !sec || !org) return { changed: false, reason: 'ims-vars-missing' }
|
|
681
|
+
|
|
682
|
+
// SCOPES is often a JSON array; the action expects a comma-separated string.
|
|
683
|
+
if (scopes.trim().startsWith('[')) {
|
|
684
|
+
try { scopes = JSON.parse(scopes).join(', ') } catch (_) { /* leave as-is */ }
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
// If OAUTH_* already non-empty, leave the user's values alone.
|
|
688
|
+
const existing = {
|
|
689
|
+
OAUTH_CLIENT_ID: grab('OAUTH_CLIENT_ID'),
|
|
690
|
+
OAUTH_CLIENT_SECRET: grab('OAUTH_CLIENT_SECRET'),
|
|
691
|
+
OAUTH_ORG_ID: grab('OAUTH_ORG_ID'),
|
|
692
|
+
OAUTH_SCOPES: grab('OAUTH_SCOPES')
|
|
693
|
+
}
|
|
694
|
+
const anyMissing = Object.values(existing).some((v) => !v)
|
|
695
|
+
if (!anyMissing) return { changed: false, reason: 'already-aliased' }
|
|
696
|
+
|
|
697
|
+
// Strip any previously-mirrored block so re-runs don't accumulate.
|
|
698
|
+
env = env.replace(/\n# Aliases mirrored from IMS_OAUTH_S2S_\*[\s\S]*?(?=\n[A-Z_]+=|\n*$)/g, '')
|
|
699
|
+
|
|
700
|
+
const block = [
|
|
701
|
+
'',
|
|
702
|
+
'# Aliases mirrored from IMS_OAUTH_S2S_* — required by the commerce-admin-management actions.',
|
|
703
|
+
`OAUTH_CLIENT_ID=${id}`,
|
|
704
|
+
`OAUTH_CLIENT_SECRET=${sec}`,
|
|
705
|
+
`OAUTH_ORG_ID=${org}`,
|
|
706
|
+
`OAUTH_SCOPES=${scopes}`,
|
|
707
|
+
''
|
|
708
|
+
].join('\n')
|
|
709
|
+
|
|
710
|
+
fs.writeFileSync(envPath, env + block, 'utf8')
|
|
711
|
+
return { changed: true }
|
|
712
|
+
}
|
|
713
|
+
|
|
627
714
|
function ensureEnvDefaults (projectRoot) {
|
|
628
715
|
const envPath = path.join(projectRoot, '.env')
|
|
629
716
|
let lines = []
|
|
@@ -751,6 +838,12 @@ function main () {
|
|
|
751
838
|
console.log(`[@adobedjangir/commerce-admin-management] .env ${s.source}: ${s.key}`)
|
|
752
839
|
}
|
|
753
840
|
}
|
|
841
|
+
// Newer Adobe Developer Console templates use IMS_OAUTH_S2S_* prefix in
|
|
842
|
+
// .env. Our actions still read OAUTH_*. Mirror automatically so both work.
|
|
843
|
+
const mirror = mirrorImsOauthAliases(projectRoot)
|
|
844
|
+
if (mirror.changed) {
|
|
845
|
+
console.log('[@adobedjangir/commerce-admin-management] .env mirrored IMS_OAUTH_S2S_* → OAUTH_*')
|
|
846
|
+
}
|
|
754
847
|
|
|
755
848
|
// Bump host package.json so React-18 + Spectrum-4 peers are satisfied
|
|
756
849
|
// without the consumer running a long `npm install --save react@^18 ...`
|