@commercetools-frontend/mc-scripts 23.2.1 → 23.2.3
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/cli/dist/commercetools-frontend-mc-scripts-cli.cjs.dev.js +11 -9
- package/cli/dist/commercetools-frontend-mc-scripts-cli.cjs.prod.js +11 -9
- package/cli/dist/commercetools-frontend-mc-scripts-cli.esm.js +11 -9
- package/dist/{build-6bd0ac22.cjs.prod.js → build-38b63c1d.cjs.prod.js} +3 -3
- package/dist/{build-360f081d.cjs.dev.js → build-766e8b1f.cjs.dev.js} +3 -3
- package/dist/{build-d10bc41b.esm.js → build-7cf1c59d.esm.js} +3 -3
- package/dist/commercetools-frontend-mc-scripts.cjs.dev.js +1 -1
- package/dist/commercetools-frontend-mc-scripts.cjs.prod.js +1 -1
- package/dist/commercetools-frontend-mc-scripts.esm.js +1 -1
- package/dist/{config-sync-1b8ae40b.esm.js → config-sync-b938b2bd.esm.js} +3 -3
- package/dist/{config-sync-482a69fe.cjs.dev.js → config-sync-da0f180c.cjs.dev.js} +3 -3
- package/dist/{config-sync-d53518fd.cjs.prod.js → config-sync-dce56250.cjs.prod.js} +3 -3
- package/dist/{create-postcss-config-c5cf6d30.esm.js → create-postcss-config-451f01ac.esm.js} +1 -1
- package/dist/{create-postcss-config-fe0eda38.cjs.dev.js → create-postcss-config-556e8979.cjs.dev.js} +1 -1
- package/dist/{create-postcss-config-5e470fa7.cjs.prod.js → create-postcss-config-a45dc69a.cjs.prod.js} +1 -1
- package/dist/{create-webpack-config-for-development-bde94f6a.esm.js → create-webpack-config-for-development-12f499e6.esm.js} +1 -1
- package/dist/{create-webpack-config-for-development-48c400cd.cjs.prod.js → create-webpack-config-for-development-b6fd96b4.cjs.prod.js} +1 -1
- package/dist/{create-webpack-config-for-development-ea1e020f.cjs.dev.js → create-webpack-config-for-development-c2ee14e5.cjs.dev.js} +1 -1
- package/dist/{create-webpack-config-for-production-c5364376.cjs.dev.js → create-webpack-config-for-production-c0d65bed.cjs.dev.js} +1 -1
- package/dist/{create-webpack-config-for-production-03fb373c.cjs.prod.js → create-webpack-config-for-production-ce997721.cjs.prod.js} +1 -1
- package/dist/{create-webpack-config-for-production-98949ba8.esm.js → create-webpack-config-for-production-d1cab2fd.esm.js} +1 -1
- package/dist/{credentials-storage-8cf72194.cjs.prod.js → credentials-storage-52529612.cjs.prod.js} +1 -1
- package/dist/{credentials-storage-8246aab4.cjs.dev.js → credentials-storage-6d91b6da.cjs.dev.js} +1 -1
- package/dist/{credentials-storage-caf1c2ad.esm.js → credentials-storage-e094db15.esm.js} +1 -1
- package/dist/declarations/src/utils/auth-callback.d.ts +11 -0
- package/dist/declarations/src/vite-plugins/vite-plugin-merchant-center-customization.d.ts +1 -0
- package/dist/{deployment-previews-set-b2dc5c83.cjs.prod.js → deployment-previews-set-213d2aba.cjs.prod.js} +3 -3
- package/dist/{deployment-previews-set-b6c92418.esm.js → deployment-previews-set-2fd24531.esm.js} +3 -3
- package/dist/{deployment-previews-set-14da3831.cjs.dev.js → deployment-previews-set-626ac65e.cjs.dev.js} +3 -3
- package/dist/{graphql-requests-02024fb9.cjs.dev.js → graphql-requests-28c9c031.cjs.prod.js} +8 -4
- package/dist/{graphql-requests-9b0cf79b.esm.js → graphql-requests-5b3a9ffc.esm.js} +9 -5
- package/dist/{graphql-requests-a42d578d.cjs.prod.js → graphql-requests-8b3897b7.cjs.dev.js} +8 -4
- package/dist/login-05350511.cjs.prod.js +217 -0
- package/dist/login-77a5805e.cjs.dev.js +217 -0
- package/dist/login-c5a096cb.esm.js +176 -0
- package/dist/{package-fdee3971.esm.js → package-12437f2f.esm.js} +10 -8
- package/dist/{package-68bccd43.cjs.dev.js → package-325393f8.cjs.prod.js} +10 -8
- package/dist/{package-9161a458.cjs.prod.js → package-da809c85.cjs.dev.js} +10 -8
- package/dist/{start-13e3a0ba.esm.js → start-7052aaaa.esm.js} +3 -3
- package/dist/{start-be2ffdfc.cjs.dev.js → start-a35affd1.cjs.dev.js} +3 -3
- package/dist/{start-5dc189f3.cjs.prod.js → start-cb3a361d.cjs.prod.js} +3 -3
- package/package.json +10 -8
- package/postcss/dist/commercetools-frontend-mc-scripts-postcss.cjs.dev.js +2 -2
- package/postcss/dist/commercetools-frontend-mc-scripts-postcss.cjs.prod.js +2 -2
- package/postcss/dist/commercetools-frontend-mc-scripts-postcss.esm.js +2 -2
- package/webpack/dist/commercetools-frontend-mc-scripts-webpack.cjs.dev.js +4 -4
- package/webpack/dist/commercetools-frontend-mc-scripts-webpack.cjs.prod.js +4 -4
- package/webpack/dist/commercetools-frontend-mc-scripts-webpack.esm.js +4 -4
- package/dist/login-35a7c23c.esm.js +0 -85
- package/dist/login-ecf933dc.cjs.dev.js +0 -102
- package/dist/login-f13ca0a8.cjs.prod.js +0 -102
|
@@ -14,7 +14,7 @@ var chalk = require('chalk');
|
|
|
14
14
|
var graphql = require('graphql');
|
|
15
15
|
var graphqlRequest = require('graphql-request');
|
|
16
16
|
var constants = require('@commercetools-frontend/constants');
|
|
17
|
-
var credentialsStorage$1 = require('./credentials-storage-
|
|
17
|
+
var credentialsStorage$1 = require('./credentials-storage-52529612.cjs.prod.js');
|
|
18
18
|
|
|
19
19
|
function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
|
|
20
20
|
|
|
@@ -43,15 +43,19 @@ var UpdateCustomViewFromCli = { kind: "Document", definitions: [{ kind: "Operati
|
|
|
43
43
|
const credentialsStorage = new credentialsStorage$1.CredentialsStorage();
|
|
44
44
|
async function requestWithTokenRetry(document, requestOptions) {
|
|
45
45
|
let retryCount = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
|
46
|
+
const shouldUseExperimentalIdentityAuthFlow = process.env.ENABLE_EXPERIMENTAL_IDENTITY_AUTH_FLOW === 'true';
|
|
46
47
|
const token = credentialsStorage.getToken(requestOptions.mcApiUrl);
|
|
48
|
+
const tokenHeader = shouldUseExperimentalIdentityAuthFlow ? {
|
|
49
|
+
[constants.SUPPORTED_HEADERS.AUTHORIZATION]: `Bearer ${token}`
|
|
50
|
+
} : {
|
|
51
|
+
'x-mc-cli-access-token': token
|
|
52
|
+
};
|
|
47
53
|
const client = new graphqlRequest.GraphQLClient(`${requestOptions.mcApiUrl}/graphql`, {
|
|
48
54
|
headers: _objectSpread(_objectSpread({
|
|
49
55
|
Accept: 'application/json',
|
|
50
56
|
'Content-Type': 'application/json',
|
|
51
57
|
'x-user-agent': credentialsStorage$1.userAgent
|
|
52
|
-
}, token ? {
|
|
53
|
-
'x-mc-cli-access-token': token
|
|
54
|
-
} : {}), requestOptions.headers)
|
|
58
|
+
}, token ? tokenHeader : {}), requestOptions.headers)
|
|
55
59
|
});
|
|
56
60
|
try {
|
|
57
61
|
const result = await client.rawRequest(graphql.print(document), requestOptions.variables);
|
|
@@ -11,8 +11,8 @@ import _someInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instanc
|
|
|
11
11
|
import chalk from 'chalk';
|
|
12
12
|
import { print } from 'graphql';
|
|
13
13
|
import { GraphQLClient, ClientError } from 'graphql-request';
|
|
14
|
-
import { GRAPHQL_TARGETS } from '@commercetools-frontend/constants';
|
|
15
|
-
import { C as CredentialsStorage, u as userAgent } from './credentials-storage-
|
|
14
|
+
import { GRAPHQL_TARGETS, SUPPORTED_HEADERS } from '@commercetools-frontend/constants';
|
|
15
|
+
import { C as CredentialsStorage, u as userAgent } from './credentials-storage-e094db15.esm.js';
|
|
16
16
|
|
|
17
17
|
function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
18
18
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context2, _context3; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context2 = ownKeys(Object(t), !0)).call(_context2, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context3 = ownKeys(Object(t))).call(_context3, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
@@ -28,15 +28,19 @@ var UpdateCustomViewFromCli = { kind: "Document", definitions: [{ kind: "Operati
|
|
|
28
28
|
const credentialsStorage = new CredentialsStorage();
|
|
29
29
|
async function requestWithTokenRetry(document, requestOptions) {
|
|
30
30
|
let retryCount = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
|
31
|
+
const shouldUseExperimentalIdentityAuthFlow = process.env.ENABLE_EXPERIMENTAL_IDENTITY_AUTH_FLOW === 'true';
|
|
31
32
|
const token = credentialsStorage.getToken(requestOptions.mcApiUrl);
|
|
33
|
+
const tokenHeader = shouldUseExperimentalIdentityAuthFlow ? {
|
|
34
|
+
[SUPPORTED_HEADERS.AUTHORIZATION]: `Bearer ${token}`
|
|
35
|
+
} : {
|
|
36
|
+
'x-mc-cli-access-token': token
|
|
37
|
+
};
|
|
32
38
|
const client = new GraphQLClient(`${requestOptions.mcApiUrl}/graphql`, {
|
|
33
39
|
headers: _objectSpread(_objectSpread({
|
|
34
40
|
Accept: 'application/json',
|
|
35
41
|
'Content-Type': 'application/json',
|
|
36
42
|
'x-user-agent': userAgent
|
|
37
|
-
}, token ? {
|
|
38
|
-
'x-mc-cli-access-token': token
|
|
39
|
-
} : {}), requestOptions.headers)
|
|
43
|
+
}, token ? tokenHeader : {}), requestOptions.headers)
|
|
40
44
|
});
|
|
41
45
|
try {
|
|
42
46
|
const result = await client.rawRequest(print(document), requestOptions.variables);
|
|
@@ -14,7 +14,7 @@ var chalk = require('chalk');
|
|
|
14
14
|
var graphql = require('graphql');
|
|
15
15
|
var graphqlRequest = require('graphql-request');
|
|
16
16
|
var constants = require('@commercetools-frontend/constants');
|
|
17
|
-
var credentialsStorage$1 = require('./credentials-storage-
|
|
17
|
+
var credentialsStorage$1 = require('./credentials-storage-6d91b6da.cjs.dev.js');
|
|
18
18
|
|
|
19
19
|
function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
|
|
20
20
|
|
|
@@ -43,15 +43,19 @@ var UpdateCustomViewFromCli = { kind: "Document", definitions: [{ kind: "Operati
|
|
|
43
43
|
const credentialsStorage = new credentialsStorage$1.CredentialsStorage();
|
|
44
44
|
async function requestWithTokenRetry(document, requestOptions) {
|
|
45
45
|
let retryCount = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
|
46
|
+
const shouldUseExperimentalIdentityAuthFlow = process.env.ENABLE_EXPERIMENTAL_IDENTITY_AUTH_FLOW === 'true';
|
|
46
47
|
const token = credentialsStorage.getToken(requestOptions.mcApiUrl);
|
|
48
|
+
const tokenHeader = shouldUseExperimentalIdentityAuthFlow ? {
|
|
49
|
+
[constants.SUPPORTED_HEADERS.AUTHORIZATION]: `Bearer ${token}`
|
|
50
|
+
} : {
|
|
51
|
+
'x-mc-cli-access-token': token
|
|
52
|
+
};
|
|
47
53
|
const client = new graphqlRequest.GraphQLClient(`${requestOptions.mcApiUrl}/graphql`, {
|
|
48
54
|
headers: _objectSpread(_objectSpread({
|
|
49
55
|
Accept: 'application/json',
|
|
50
56
|
'Content-Type': 'application/json',
|
|
51
57
|
'x-user-agent': credentialsStorage$1.userAgent
|
|
52
|
-
}, token ? {
|
|
53
|
-
'x-mc-cli-access-token': token
|
|
54
|
-
} : {}), requestOptions.headers)
|
|
58
|
+
}, token ? tokenHeader : {}), requestOptions.headers)
|
|
55
59
|
});
|
|
56
60
|
try {
|
|
57
61
|
const result = await client.rawRequest(graphql.print(document), requestOptions.variables);
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var _Promise = require('@babel/runtime-corejs3/core-js-stable/promise');
|
|
4
|
+
var _URL = require('@babel/runtime-corejs3/core-js-stable/url');
|
|
5
|
+
var crypto = require('node:crypto');
|
|
6
|
+
var process = require('node:process');
|
|
7
|
+
var chalk = require('chalk');
|
|
8
|
+
var prompts = require('prompts');
|
|
9
|
+
var applicationConfig = require('@commercetools-frontend/application-config');
|
|
10
|
+
var _package = require('./package-325393f8.cjs.prod.js');
|
|
11
|
+
var _Object$keys = require('@babel/runtime-corejs3/core-js-stable/object/keys');
|
|
12
|
+
var _Object$getOwnPropertySymbols = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols');
|
|
13
|
+
var _filterInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/filter');
|
|
14
|
+
var _Object$getOwnPropertyDescriptor = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor');
|
|
15
|
+
var _forEachInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/for-each');
|
|
16
|
+
var _Object$getOwnPropertyDescriptors = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors');
|
|
17
|
+
var _Object$defineProperties = require('@babel/runtime-corejs3/core-js-stable/object/define-properties');
|
|
18
|
+
var _Object$defineProperty = require('@babel/runtime-corejs3/core-js-stable/object/define-property');
|
|
19
|
+
var _defineProperty = require('@babel/runtime-corejs3/helpers/defineProperty');
|
|
20
|
+
var _JSON$stringify = require('@babel/runtime-corejs3/core-js-stable/json/stringify');
|
|
21
|
+
var fetch = require('node-fetch');
|
|
22
|
+
var credentialsStorage$1 = require('./credentials-storage-52529612.cjs.prod.js');
|
|
23
|
+
var http = require('node:http');
|
|
24
|
+
var jwtDecode = require('jwt-decode');
|
|
25
|
+
require('@commercetools/http-user-agent');
|
|
26
|
+
require('@babel/runtime-corejs3/helpers/classCallCheck');
|
|
27
|
+
require('@babel/runtime-corejs3/helpers/createClass');
|
|
28
|
+
require('@babel/runtime-corejs3/core-js-stable/date/now');
|
|
29
|
+
require('node:fs');
|
|
30
|
+
require('node:os');
|
|
31
|
+
require('node:path');
|
|
32
|
+
require('./does-file-exist-be53305d.cjs.prod.js');
|
|
33
|
+
|
|
34
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
|
|
35
|
+
|
|
36
|
+
function _interopNamespace(e) {
|
|
37
|
+
if (e && e.__esModule) return e;
|
|
38
|
+
var n = Object.create(null);
|
|
39
|
+
if (e) {
|
|
40
|
+
Object.keys(e).forEach(function (k) {
|
|
41
|
+
if (k !== 'default') {
|
|
42
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
43
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
44
|
+
enumerable: true,
|
|
45
|
+
get: function () { return e[k]; }
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
n["default"] = e;
|
|
51
|
+
return Object.freeze(n);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
var _Promise__default = /*#__PURE__*/_interopDefault(_Promise);
|
|
55
|
+
var _URL__default = /*#__PURE__*/_interopDefault(_URL);
|
|
56
|
+
var crypto__default = /*#__PURE__*/_interopDefault(crypto);
|
|
57
|
+
var process__default = /*#__PURE__*/_interopDefault(process);
|
|
58
|
+
var chalk__default = /*#__PURE__*/_interopDefault(chalk);
|
|
59
|
+
var prompts__default = /*#__PURE__*/_interopDefault(prompts);
|
|
60
|
+
var _Object$keys__default = /*#__PURE__*/_interopDefault(_Object$keys);
|
|
61
|
+
var _Object$getOwnPropertySymbols__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertySymbols);
|
|
62
|
+
var _filterInstanceProperty__default = /*#__PURE__*/_interopDefault(_filterInstanceProperty);
|
|
63
|
+
var _Object$getOwnPropertyDescriptor__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptor);
|
|
64
|
+
var _forEachInstanceProperty__default = /*#__PURE__*/_interopDefault(_forEachInstanceProperty);
|
|
65
|
+
var _Object$getOwnPropertyDescriptors__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptors);
|
|
66
|
+
var _Object$defineProperties__default = /*#__PURE__*/_interopDefault(_Object$defineProperties);
|
|
67
|
+
var _Object$defineProperty__default = /*#__PURE__*/_interopDefault(_Object$defineProperty);
|
|
68
|
+
var _JSON$stringify__default = /*#__PURE__*/_interopDefault(_JSON$stringify);
|
|
69
|
+
var fetch__default = /*#__PURE__*/_interopDefault(fetch);
|
|
70
|
+
var http__default = /*#__PURE__*/_interopDefault(http);
|
|
71
|
+
var jwtDecode__default = /*#__PURE__*/_interopDefault(jwtDecode);
|
|
72
|
+
|
|
73
|
+
function ownKeys(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
74
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context = ownKeys(Object(t), !0)).call(_context, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context2 = ownKeys(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
|
|
75
|
+
const getAuthToken = async (mcApiUrl, payload, headers) => {
|
|
76
|
+
const response = await fetch__default["default"](`${mcApiUrl}/tokens/cli`, {
|
|
77
|
+
method: 'POST',
|
|
78
|
+
headers: _objectSpread({
|
|
79
|
+
Accept: 'application/json',
|
|
80
|
+
'Content-Type': 'application/json',
|
|
81
|
+
'x-user-agent': credentialsStorage$1.userAgent
|
|
82
|
+
}, headers),
|
|
83
|
+
body: _JSON$stringify__default["default"](payload)
|
|
84
|
+
});
|
|
85
|
+
if (!response.ok) {
|
|
86
|
+
const text = await response.text();
|
|
87
|
+
let parsed;
|
|
88
|
+
try {
|
|
89
|
+
parsed = JSON.parse(text);
|
|
90
|
+
} catch (error) {}
|
|
91
|
+
const errorMessage = parsed ? parsed.message : text;
|
|
92
|
+
throw new Error(errorMessage);
|
|
93
|
+
}
|
|
94
|
+
const authToken = await response.json();
|
|
95
|
+
return authToken;
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
function createAuthCallbackServer(options) {
|
|
99
|
+
const server = http__default["default"].createServer(async (request, response) => {
|
|
100
|
+
try {
|
|
101
|
+
if (request.url?.includes(`/${options.clientIdentifier}/oidc/callback`)) {
|
|
102
|
+
const incomingUrl = new _URL__default["default"](request.url, 'http://localhost');
|
|
103
|
+
const sessionToken = incomingUrl.searchParams.get('sessionToken');
|
|
104
|
+
const requestedState = incomingUrl.searchParams.get('state');
|
|
105
|
+
if (!sessionToken) {
|
|
106
|
+
throw new Error('Invalid authentication flow (missing sessionToken)');
|
|
107
|
+
}
|
|
108
|
+
const decodedSessionToken = jwtDecode__default["default"](sessionToken);
|
|
109
|
+
if (decodedSessionToken?.nonce !== options.nonce) {
|
|
110
|
+
throw new Error('Invalid authentication flow (nonce mismatch)');
|
|
111
|
+
}
|
|
112
|
+
if (requestedState !== options.state) {
|
|
113
|
+
throw new Error('Invalid authentication flow (state mismatch)');
|
|
114
|
+
}
|
|
115
|
+
options.onSuccess({
|
|
116
|
+
token: sessionToken,
|
|
117
|
+
expiresAt: decodedSessionToken.exp
|
|
118
|
+
});
|
|
119
|
+
response.setHeader('content-type', 'text/html');
|
|
120
|
+
response.end('Success!');
|
|
121
|
+
server.close();
|
|
122
|
+
}
|
|
123
|
+
} catch (error) {
|
|
124
|
+
response.setHeader('content-type', 'text/html');
|
|
125
|
+
if (error instanceof Error) {
|
|
126
|
+
console.error(error.message);
|
|
127
|
+
response.end(error.message);
|
|
128
|
+
} else {
|
|
129
|
+
console.error(error);
|
|
130
|
+
response.end(`Invalid authentication flow.`);
|
|
131
|
+
}
|
|
132
|
+
server.close();
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
return server;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const credentialsStorage = new credentialsStorage$1.CredentialsStorage();
|
|
139
|
+
const port = 3001;
|
|
140
|
+
const clientIdentifier = `mc-scripts-${_package.pkgJson.version}`;
|
|
141
|
+
const startServer = server => new _Promise__default["default"]((resolve, reject) => {
|
|
142
|
+
server.listen(port).on('listening', resolve).on('error', error => {
|
|
143
|
+
console.error('Problem starting server', error);
|
|
144
|
+
return reject(error);
|
|
145
|
+
}).on('close', () => {
|
|
146
|
+
process__default["default"].exit();
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
const generateRandomHash = function () {
|
|
150
|
+
let length = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 16;
|
|
151
|
+
return crypto__default["default"].randomBytes(length).toString('hex');
|
|
152
|
+
};
|
|
153
|
+
async function run() {
|
|
154
|
+
const shouldUseExperimentalIdentityAuthFlow = process__default["default"].env.ENABLE_EXPERIMENTAL_IDENTITY_AUTH_FLOW === 'true';
|
|
155
|
+
const applicationConfig$1 = await applicationConfig.processConfig();
|
|
156
|
+
const mcApiUrl = applicationConfig$1.env.mcApiUrl;
|
|
157
|
+
console.log(`Using Merchant Center environment "${chalk__default["default"].green(mcApiUrl)}".`);
|
|
158
|
+
console.log();
|
|
159
|
+
if (credentialsStorage.isSessionValid(mcApiUrl)) {
|
|
160
|
+
console.log(`You already have a valid session.`);
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
if (shouldUseExperimentalIdentityAuthFlow) {
|
|
164
|
+
const open = await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('open')); });
|
|
165
|
+
const state = generateRandomHash();
|
|
166
|
+
const nonce = generateRandomHash();
|
|
167
|
+
const authUrl = new _URL__default["default"]('/login/authorize', mcApiUrl);
|
|
168
|
+
authUrl.searchParams.set('response_type', 'id_token');
|
|
169
|
+
authUrl.searchParams.set('response_mode', 'query');
|
|
170
|
+
authUrl.searchParams.set('client_id', `__local:${clientIdentifier}`);
|
|
171
|
+
authUrl.searchParams.set('scope', ['openid'
|
|
172
|
+
// 'project_key:??',
|
|
173
|
+
].join(' '));
|
|
174
|
+
authUrl.searchParams.set('state', state);
|
|
175
|
+
authUrl.searchParams.set('nonce', nonce);
|
|
176
|
+
const server = createAuthCallbackServer({
|
|
177
|
+
clientIdentifier,
|
|
178
|
+
state,
|
|
179
|
+
nonce,
|
|
180
|
+
onSuccess: tokenContext => {
|
|
181
|
+
credentialsStorage.setToken(mcApiUrl, tokenContext);
|
|
182
|
+
console.log();
|
|
183
|
+
console.log(chalk__default["default"].green(`Login successful.`));
|
|
184
|
+
console.log();
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
await startServer(server);
|
|
188
|
+
await open.default(authUrl.toString());
|
|
189
|
+
console.log('Waiting for the OIDC authentication to complete...');
|
|
190
|
+
} else {
|
|
191
|
+
console.log(`Enter the login credentials:`);
|
|
192
|
+
const _await$prompts = await prompts__default["default"]({
|
|
193
|
+
type: 'text',
|
|
194
|
+
name: 'email',
|
|
195
|
+
message: 'Email'
|
|
196
|
+
}),
|
|
197
|
+
email = _await$prompts.email;
|
|
198
|
+
const _await$prompts2 = await prompts__default["default"]({
|
|
199
|
+
type: 'invisible',
|
|
200
|
+
name: 'password',
|
|
201
|
+
message: 'Password (hidden)'
|
|
202
|
+
}),
|
|
203
|
+
password = _await$prompts2.password;
|
|
204
|
+
if (!email || !password) {
|
|
205
|
+
throw new Error(`Missing email or password values. Aborting.`);
|
|
206
|
+
}
|
|
207
|
+
const credentials = await getAuthToken(mcApiUrl, {
|
|
208
|
+
email,
|
|
209
|
+
password
|
|
210
|
+
});
|
|
211
|
+
credentialsStorage.setToken(mcApiUrl, credentials);
|
|
212
|
+
console.log(chalk__default["default"].green(`Login successful.`));
|
|
213
|
+
console.log();
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
exports["default"] = run;
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var _Promise = require('@babel/runtime-corejs3/core-js-stable/promise');
|
|
4
|
+
var _URL = require('@babel/runtime-corejs3/core-js-stable/url');
|
|
5
|
+
var crypto = require('node:crypto');
|
|
6
|
+
var process = require('node:process');
|
|
7
|
+
var chalk = require('chalk');
|
|
8
|
+
var prompts = require('prompts');
|
|
9
|
+
var applicationConfig = require('@commercetools-frontend/application-config');
|
|
10
|
+
var _package = require('./package-da809c85.cjs.dev.js');
|
|
11
|
+
var _Object$keys = require('@babel/runtime-corejs3/core-js-stable/object/keys');
|
|
12
|
+
var _Object$getOwnPropertySymbols = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols');
|
|
13
|
+
var _filterInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/filter');
|
|
14
|
+
var _Object$getOwnPropertyDescriptor = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor');
|
|
15
|
+
var _forEachInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/for-each');
|
|
16
|
+
var _Object$getOwnPropertyDescriptors = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors');
|
|
17
|
+
var _Object$defineProperties = require('@babel/runtime-corejs3/core-js-stable/object/define-properties');
|
|
18
|
+
var _Object$defineProperty = require('@babel/runtime-corejs3/core-js-stable/object/define-property');
|
|
19
|
+
var _defineProperty = require('@babel/runtime-corejs3/helpers/defineProperty');
|
|
20
|
+
var _JSON$stringify = require('@babel/runtime-corejs3/core-js-stable/json/stringify');
|
|
21
|
+
var fetch = require('node-fetch');
|
|
22
|
+
var credentialsStorage$1 = require('./credentials-storage-6d91b6da.cjs.dev.js');
|
|
23
|
+
var http = require('node:http');
|
|
24
|
+
var jwtDecode = require('jwt-decode');
|
|
25
|
+
require('@commercetools/http-user-agent');
|
|
26
|
+
require('@babel/runtime-corejs3/helpers/classCallCheck');
|
|
27
|
+
require('@babel/runtime-corejs3/helpers/createClass');
|
|
28
|
+
require('@babel/runtime-corejs3/core-js-stable/date/now');
|
|
29
|
+
require('node:fs');
|
|
30
|
+
require('node:os');
|
|
31
|
+
require('node:path');
|
|
32
|
+
require('./does-file-exist-eb86baca.cjs.dev.js');
|
|
33
|
+
|
|
34
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
|
|
35
|
+
|
|
36
|
+
function _interopNamespace(e) {
|
|
37
|
+
if (e && e.__esModule) return e;
|
|
38
|
+
var n = Object.create(null);
|
|
39
|
+
if (e) {
|
|
40
|
+
Object.keys(e).forEach(function (k) {
|
|
41
|
+
if (k !== 'default') {
|
|
42
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
43
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
44
|
+
enumerable: true,
|
|
45
|
+
get: function () { return e[k]; }
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
n["default"] = e;
|
|
51
|
+
return Object.freeze(n);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
var _Promise__default = /*#__PURE__*/_interopDefault(_Promise);
|
|
55
|
+
var _URL__default = /*#__PURE__*/_interopDefault(_URL);
|
|
56
|
+
var crypto__default = /*#__PURE__*/_interopDefault(crypto);
|
|
57
|
+
var process__default = /*#__PURE__*/_interopDefault(process);
|
|
58
|
+
var chalk__default = /*#__PURE__*/_interopDefault(chalk);
|
|
59
|
+
var prompts__default = /*#__PURE__*/_interopDefault(prompts);
|
|
60
|
+
var _Object$keys__default = /*#__PURE__*/_interopDefault(_Object$keys);
|
|
61
|
+
var _Object$getOwnPropertySymbols__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertySymbols);
|
|
62
|
+
var _filterInstanceProperty__default = /*#__PURE__*/_interopDefault(_filterInstanceProperty);
|
|
63
|
+
var _Object$getOwnPropertyDescriptor__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptor);
|
|
64
|
+
var _forEachInstanceProperty__default = /*#__PURE__*/_interopDefault(_forEachInstanceProperty);
|
|
65
|
+
var _Object$getOwnPropertyDescriptors__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptors);
|
|
66
|
+
var _Object$defineProperties__default = /*#__PURE__*/_interopDefault(_Object$defineProperties);
|
|
67
|
+
var _Object$defineProperty__default = /*#__PURE__*/_interopDefault(_Object$defineProperty);
|
|
68
|
+
var _JSON$stringify__default = /*#__PURE__*/_interopDefault(_JSON$stringify);
|
|
69
|
+
var fetch__default = /*#__PURE__*/_interopDefault(fetch);
|
|
70
|
+
var http__default = /*#__PURE__*/_interopDefault(http);
|
|
71
|
+
var jwtDecode__default = /*#__PURE__*/_interopDefault(jwtDecode);
|
|
72
|
+
|
|
73
|
+
function ownKeys(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
74
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context = ownKeys(Object(t), !0)).call(_context, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context2 = ownKeys(Object(t))).call(_context2, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
|
|
75
|
+
const getAuthToken = async (mcApiUrl, payload, headers) => {
|
|
76
|
+
const response = await fetch__default["default"](`${mcApiUrl}/tokens/cli`, {
|
|
77
|
+
method: 'POST',
|
|
78
|
+
headers: _objectSpread({
|
|
79
|
+
Accept: 'application/json',
|
|
80
|
+
'Content-Type': 'application/json',
|
|
81
|
+
'x-user-agent': credentialsStorage$1.userAgent
|
|
82
|
+
}, headers),
|
|
83
|
+
body: _JSON$stringify__default["default"](payload)
|
|
84
|
+
});
|
|
85
|
+
if (!response.ok) {
|
|
86
|
+
const text = await response.text();
|
|
87
|
+
let parsed;
|
|
88
|
+
try {
|
|
89
|
+
parsed = JSON.parse(text);
|
|
90
|
+
} catch (error) {}
|
|
91
|
+
const errorMessage = parsed ? parsed.message : text;
|
|
92
|
+
throw new Error(errorMessage);
|
|
93
|
+
}
|
|
94
|
+
const authToken = await response.json();
|
|
95
|
+
return authToken;
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
function createAuthCallbackServer(options) {
|
|
99
|
+
const server = http__default["default"].createServer(async (request, response) => {
|
|
100
|
+
try {
|
|
101
|
+
if (request.url?.includes(`/${options.clientIdentifier}/oidc/callback`)) {
|
|
102
|
+
const incomingUrl = new _URL__default["default"](request.url, 'http://localhost');
|
|
103
|
+
const sessionToken = incomingUrl.searchParams.get('sessionToken');
|
|
104
|
+
const requestedState = incomingUrl.searchParams.get('state');
|
|
105
|
+
if (!sessionToken) {
|
|
106
|
+
throw new Error('Invalid authentication flow (missing sessionToken)');
|
|
107
|
+
}
|
|
108
|
+
const decodedSessionToken = jwtDecode__default["default"](sessionToken);
|
|
109
|
+
if (decodedSessionToken?.nonce !== options.nonce) {
|
|
110
|
+
throw new Error('Invalid authentication flow (nonce mismatch)');
|
|
111
|
+
}
|
|
112
|
+
if (requestedState !== options.state) {
|
|
113
|
+
throw new Error('Invalid authentication flow (state mismatch)');
|
|
114
|
+
}
|
|
115
|
+
options.onSuccess({
|
|
116
|
+
token: sessionToken,
|
|
117
|
+
expiresAt: decodedSessionToken.exp
|
|
118
|
+
});
|
|
119
|
+
response.setHeader('content-type', 'text/html');
|
|
120
|
+
response.end('Success!');
|
|
121
|
+
server.close();
|
|
122
|
+
}
|
|
123
|
+
} catch (error) {
|
|
124
|
+
response.setHeader('content-type', 'text/html');
|
|
125
|
+
if (error instanceof Error) {
|
|
126
|
+
console.error(error.message);
|
|
127
|
+
response.end(error.message);
|
|
128
|
+
} else {
|
|
129
|
+
console.error(error);
|
|
130
|
+
response.end(`Invalid authentication flow.`);
|
|
131
|
+
}
|
|
132
|
+
server.close();
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
return server;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const credentialsStorage = new credentialsStorage$1.CredentialsStorage();
|
|
139
|
+
const port = 3001;
|
|
140
|
+
const clientIdentifier = `mc-scripts-${_package.pkgJson.version}`;
|
|
141
|
+
const startServer = server => new _Promise__default["default"]((resolve, reject) => {
|
|
142
|
+
server.listen(port).on('listening', resolve).on('error', error => {
|
|
143
|
+
console.error('Problem starting server', error);
|
|
144
|
+
return reject(error);
|
|
145
|
+
}).on('close', () => {
|
|
146
|
+
process__default["default"].exit();
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
const generateRandomHash = function () {
|
|
150
|
+
let length = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 16;
|
|
151
|
+
return crypto__default["default"].randomBytes(length).toString('hex');
|
|
152
|
+
};
|
|
153
|
+
async function run() {
|
|
154
|
+
const shouldUseExperimentalIdentityAuthFlow = process__default["default"].env.ENABLE_EXPERIMENTAL_IDENTITY_AUTH_FLOW === 'true';
|
|
155
|
+
const applicationConfig$1 = await applicationConfig.processConfig();
|
|
156
|
+
const mcApiUrl = applicationConfig$1.env.mcApiUrl;
|
|
157
|
+
console.log(`Using Merchant Center environment "${chalk__default["default"].green(mcApiUrl)}".`);
|
|
158
|
+
console.log();
|
|
159
|
+
if (credentialsStorage.isSessionValid(mcApiUrl)) {
|
|
160
|
+
console.log(`You already have a valid session.`);
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
if (shouldUseExperimentalIdentityAuthFlow) {
|
|
164
|
+
const open = await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('open')); });
|
|
165
|
+
const state = generateRandomHash();
|
|
166
|
+
const nonce = generateRandomHash();
|
|
167
|
+
const authUrl = new _URL__default["default"]('/login/authorize', mcApiUrl);
|
|
168
|
+
authUrl.searchParams.set('response_type', 'id_token');
|
|
169
|
+
authUrl.searchParams.set('response_mode', 'query');
|
|
170
|
+
authUrl.searchParams.set('client_id', `__local:${clientIdentifier}`);
|
|
171
|
+
authUrl.searchParams.set('scope', ['openid'
|
|
172
|
+
// 'project_key:??',
|
|
173
|
+
].join(' '));
|
|
174
|
+
authUrl.searchParams.set('state', state);
|
|
175
|
+
authUrl.searchParams.set('nonce', nonce);
|
|
176
|
+
const server = createAuthCallbackServer({
|
|
177
|
+
clientIdentifier,
|
|
178
|
+
state,
|
|
179
|
+
nonce,
|
|
180
|
+
onSuccess: tokenContext => {
|
|
181
|
+
credentialsStorage.setToken(mcApiUrl, tokenContext);
|
|
182
|
+
console.log();
|
|
183
|
+
console.log(chalk__default["default"].green(`Login successful.`));
|
|
184
|
+
console.log();
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
await startServer(server);
|
|
188
|
+
await open.default(authUrl.toString());
|
|
189
|
+
console.log('Waiting for the OIDC authentication to complete...');
|
|
190
|
+
} else {
|
|
191
|
+
console.log(`Enter the login credentials:`);
|
|
192
|
+
const _await$prompts = await prompts__default["default"]({
|
|
193
|
+
type: 'text',
|
|
194
|
+
name: 'email',
|
|
195
|
+
message: 'Email'
|
|
196
|
+
}),
|
|
197
|
+
email = _await$prompts.email;
|
|
198
|
+
const _await$prompts2 = await prompts__default["default"]({
|
|
199
|
+
type: 'invisible',
|
|
200
|
+
name: 'password',
|
|
201
|
+
message: 'Password (hidden)'
|
|
202
|
+
}),
|
|
203
|
+
password = _await$prompts2.password;
|
|
204
|
+
if (!email || !password) {
|
|
205
|
+
throw new Error(`Missing email or password values. Aborting.`);
|
|
206
|
+
}
|
|
207
|
+
const credentials = await getAuthToken(mcApiUrl, {
|
|
208
|
+
email,
|
|
209
|
+
password
|
|
210
|
+
});
|
|
211
|
+
credentialsStorage.setToken(mcApiUrl, credentials);
|
|
212
|
+
console.log(chalk__default["default"].green(`Login successful.`));
|
|
213
|
+
console.log();
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
exports["default"] = run;
|