powr-sdk-web 5.10.6 → 5.10.8
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/dist/feeds/components/CreatePost.js +4 -5
- package/dist/sso/api.js +29 -7
- package/dist/sso/index.js +12 -2
- package/dist/sso/openPowrLogin.js +47 -14
- package/package.json +1 -1
|
@@ -129,7 +129,7 @@ var CreatePost = function CreatePost(_ref) {
|
|
|
129
129
|
}();
|
|
130
130
|
var handleFileUpload = /*#__PURE__*/function () {
|
|
131
131
|
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(files) {
|
|
132
|
-
var uploadedFiles, _iterator, _step, file,
|
|
132
|
+
var uploadedFiles, _iterator, _step, file, formData, _yield$apiCall2, data, ok, _t2, _t3;
|
|
133
133
|
return _regenerator().w(function (_context2) {
|
|
134
134
|
while (1) switch (_context2.p = _context2.n) {
|
|
135
135
|
case 0:
|
|
@@ -148,7 +148,7 @@ var CreatePost = function CreatePost(_ref) {
|
|
|
148
148
|
formData.append('file', file);
|
|
149
149
|
formData.append('projectId', process.env.NEXT_PUBLIC_PROJECT_ID);
|
|
150
150
|
_context2.n = 4;
|
|
151
|
-
return (0, _auth.apiCall)(apiUrl, '/files', projectId, {
|
|
151
|
+
return (0, _auth.apiCall)(apiUrl, '/files/upload', projectId, {
|
|
152
152
|
method: 'POST',
|
|
153
153
|
body: formData
|
|
154
154
|
});
|
|
@@ -156,10 +156,9 @@ var CreatePost = function CreatePost(_ref) {
|
|
|
156
156
|
_yield$apiCall2 = _context2.v;
|
|
157
157
|
data = _yield$apiCall2.data;
|
|
158
158
|
ok = _yield$apiCall2.ok;
|
|
159
|
-
|
|
160
|
-
if (ok && fileUrl) {
|
|
159
|
+
if (ok && data.success) {
|
|
161
160
|
uploadedFiles.push({
|
|
162
|
-
url:
|
|
161
|
+
url: data.data.url,
|
|
163
162
|
type: file.type.startsWith('image/') ? 'image' : 'document',
|
|
164
163
|
filename: file.name
|
|
165
164
|
});
|
package/dist/sso/api.js
CHANGED
|
@@ -29,8 +29,10 @@ function safeNextPath(next) {
|
|
|
29
29
|
|
|
30
30
|
/**
|
|
31
31
|
* Issue a one-time login code (caller must already be authenticated).
|
|
32
|
-
*
|
|
32
|
+
* Host `injectProjectId` needs destination `projectId` on the body.
|
|
33
|
+
* @param {string} apiUrl - Powr API base
|
|
33
34
|
* @param {string} bearerToken
|
|
35
|
+
* @param {{ projectId?: string }} [opts]
|
|
34
36
|
*/
|
|
35
37
|
function issueLoginCode(_x, _x2) {
|
|
36
38
|
return _issueLoginCode.apply(this, arguments);
|
|
@@ -39,20 +41,30 @@ function issueLoginCode(_x, _x2) {
|
|
|
39
41
|
* Exchange loginId for session (same shape as /login).
|
|
40
42
|
* @param {string} apiUrl
|
|
41
43
|
* @param {string} loginId
|
|
44
|
+
* @param {{ projectId?: string }} [opts]
|
|
42
45
|
*/
|
|
43
46
|
function _issueLoginCode() {
|
|
44
47
|
_issueLoginCode = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(apiUrl, bearerToken) {
|
|
45
|
-
var
|
|
48
|
+
var opts,
|
|
49
|
+
projectId,
|
|
50
|
+
res,
|
|
51
|
+
data,
|
|
52
|
+
_args = arguments;
|
|
46
53
|
return _regenerator().w(function (_context) {
|
|
47
54
|
while (1) switch (_context.n) {
|
|
48
55
|
case 0:
|
|
56
|
+
opts = _args.length > 2 && _args[2] !== undefined ? _args[2] : {};
|
|
57
|
+
projectId = opts.projectId ? String(opts.projectId) : "";
|
|
49
58
|
_context.n = 1;
|
|
50
59
|
return fetch(joinApi(apiUrl, "auth/issue-login-code"), {
|
|
51
60
|
method: "POST",
|
|
52
61
|
headers: {
|
|
53
62
|
Authorization: "Bearer ".concat(bearerToken),
|
|
54
63
|
"Content-Type": "application/json"
|
|
55
|
-
}
|
|
64
|
+
},
|
|
65
|
+
body: JSON.stringify(projectId ? {
|
|
66
|
+
projectId: projectId
|
|
67
|
+
} : {})
|
|
56
68
|
});
|
|
57
69
|
case 1:
|
|
58
70
|
res = _context.v;
|
|
@@ -79,19 +91,29 @@ function loginWithCode(_x3, _x4) {
|
|
|
79
91
|
}
|
|
80
92
|
function _loginWithCode() {
|
|
81
93
|
_loginWithCode = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(apiUrl, loginId) {
|
|
82
|
-
var
|
|
94
|
+
var opts,
|
|
95
|
+
projectId,
|
|
96
|
+
body,
|
|
97
|
+
res,
|
|
98
|
+
data,
|
|
99
|
+
err,
|
|
100
|
+
_args2 = arguments;
|
|
83
101
|
return _regenerator().w(function (_context2) {
|
|
84
102
|
while (1) switch (_context2.n) {
|
|
85
103
|
case 0:
|
|
104
|
+
opts = _args2.length > 2 && _args2[2] !== undefined ? _args2[2] : {};
|
|
105
|
+
projectId = opts.projectId ? String(opts.projectId) : "";
|
|
106
|
+
body = {
|
|
107
|
+
loginId: loginId
|
|
108
|
+
};
|
|
109
|
+
if (projectId) body.projectId = projectId;
|
|
86
110
|
_context2.n = 1;
|
|
87
111
|
return fetch(joinApi(apiUrl, "auth/login-with-code"), {
|
|
88
112
|
method: "POST",
|
|
89
113
|
headers: {
|
|
90
114
|
"Content-Type": "application/json"
|
|
91
115
|
},
|
|
92
|
-
body: JSON.stringify(
|
|
93
|
-
loginId: loginId
|
|
94
|
-
})
|
|
116
|
+
body: JSON.stringify(body)
|
|
95
117
|
});
|
|
96
118
|
case 1:
|
|
97
119
|
res = _context2.v;
|
package/dist/sso/index.js
CHANGED
|
@@ -151,6 +151,7 @@ var btnStyle = {
|
|
|
151
151
|
*
|
|
152
152
|
* @param {object} props
|
|
153
153
|
* @param {string} [props.apiUrl] - Powr host. Defaults to https://powr-api.lawazia.tech
|
|
154
|
+
* @param {string} [props.projectId] - Destination Powr id. Defaults to NEXT_PUBLIC_PROJECT_ID
|
|
154
155
|
* @param {string} [props.appName]
|
|
155
156
|
* @param {boolean} [props.ready=true] - Wait (e.g. auth hydrate) before exchanging code
|
|
156
157
|
* @param {string} [props.loginHref="/login"]
|
|
@@ -163,6 +164,7 @@ var btnStyle = {
|
|
|
163
164
|
*/
|
|
164
165
|
function PowrBaseSso(_ref) {
|
|
165
166
|
var apiUrl = _ref.apiUrl,
|
|
167
|
+
projectIdProp = _ref.projectId,
|
|
166
168
|
_ref$appName = _ref.appName,
|
|
167
169
|
appName = _ref$appName === void 0 ? "App" : _ref$appName,
|
|
168
170
|
_ref$ready = _ref.ready,
|
|
@@ -184,6 +186,7 @@ function PowrBaseSso(_ref) {
|
|
|
184
186
|
var loginId = loginIdProp !== undefined ? loginIdProp : fromUrl.loginId;
|
|
185
187
|
var next = nextProp !== undefined ? nextProp : fromUrl.next;
|
|
186
188
|
var powrApi = String(apiUrl || config.defaultPowrUrl || "").replace(/\/$/, "");
|
|
189
|
+
var projectId = String(projectIdProp || config.projectId || "");
|
|
187
190
|
var _useState = (0, _react.useState)(loginId ? null : "Missing login link"),
|
|
188
191
|
_useState2 = _slicedToArray(_useState, 2),
|
|
189
192
|
error = _useState2[0],
|
|
@@ -197,9 +200,16 @@ function PowrBaseSso(_ref) {
|
|
|
197
200
|
onSuccessRef.current = onSuccess;
|
|
198
201
|
(0, _react.useEffect)(function () {
|
|
199
202
|
if (!loginId || !ready || !powrApi || started.current) return;
|
|
203
|
+
if (!projectId) {
|
|
204
|
+
setError("Powr project is not configured");
|
|
205
|
+
setBusy(false);
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
200
208
|
started.current = true;
|
|
201
209
|
setBusy(true);
|
|
202
|
-
(0, _api.loginWithCode)(powrApi, loginId
|
|
210
|
+
(0, _api.loginWithCode)(powrApi, loginId, {
|
|
211
|
+
projectId: projectId
|
|
212
|
+
}).then(/*#__PURE__*/function () {
|
|
203
213
|
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(data) {
|
|
204
214
|
var cb;
|
|
205
215
|
return _regenerator().w(function (_context) {
|
|
@@ -229,7 +239,7 @@ function PowrBaseSso(_ref) {
|
|
|
229
239
|
setError((err === null || err === void 0 ? void 0 : err.message) || "Could not finish sign-in");
|
|
230
240
|
setBusy(false);
|
|
231
241
|
});
|
|
232
|
-
}, [loginId, next, ready, powrApi]);
|
|
242
|
+
}, [loginId, next, ready, powrApi, projectId]);
|
|
233
243
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
234
244
|
style: shellStyle
|
|
235
245
|
}, /*#__PURE__*/_react["default"].createElement("style", null, "@keyframes powr-sso-spin{to{transform:rotate(360deg)}}"), /*#__PURE__*/_react["default"].createElement("p", {
|
|
@@ -13,6 +13,9 @@ function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present,
|
|
|
13
13
|
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
14
14
|
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
15
15
|
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
16
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
17
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
18
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
16
19
|
var config = require("../config");
|
|
17
20
|
function normalizeOrigin(value) {
|
|
18
21
|
return String(value || "").replace(/\/$/, "").toLowerCase();
|
|
@@ -34,6 +37,28 @@ function originsFromApps(apps) {
|
|
|
34
37
|
return "";
|
|
35
38
|
}).filter(Boolean);
|
|
36
39
|
}
|
|
40
|
+
function projectIdFromApps(url, origins) {
|
|
41
|
+
if (!Array.isArray(origins)) return "";
|
|
42
|
+
var dest = parseDest(url);
|
|
43
|
+
if (!dest) return "";
|
|
44
|
+
var origin = normalizeOrigin(dest.origin);
|
|
45
|
+
var _iterator = _createForOfIteratorHelper(origins),
|
|
46
|
+
_step;
|
|
47
|
+
try {
|
|
48
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
49
|
+
var item = _step.value;
|
|
50
|
+
if (!item || typeof item === "string" || !item.url || !item.projectId) continue;
|
|
51
|
+
if (normalizeOrigin(originFromEntry(item.url)) === origin) {
|
|
52
|
+
return String(item.projectId);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
} catch (err) {
|
|
56
|
+
_iterator.e(err);
|
|
57
|
+
} finally {
|
|
58
|
+
_iterator.f();
|
|
59
|
+
}
|
|
60
|
+
return "";
|
|
61
|
+
}
|
|
37
62
|
function parseDest(url) {
|
|
38
63
|
try {
|
|
39
64
|
var parsed = new URL(url);
|
|
@@ -56,19 +81,21 @@ function resolvePowrApiUrl(apiUrl) {
|
|
|
56
81
|
|
|
57
82
|
/**
|
|
58
83
|
* @param {string} url
|
|
59
|
-
* @param {string[]|Array<{url?: string}>} [origins] - sibling card list or origins
|
|
60
|
-
* @returns {{ origin: string, pathname: string, search: string, hash: string } | null}
|
|
84
|
+
* @param {string[]|Array<{url?: string, projectId?: string}>} [origins] - sibling card list or origins
|
|
85
|
+
* @returns {{ origin: string, pathname: string, search: string, hash: string, projectId: string } | null}
|
|
61
86
|
*/
|
|
62
87
|
function matchPowrTarget(url, origins) {
|
|
63
88
|
var dest = parseDest(url);
|
|
64
89
|
if (!dest) return null;
|
|
65
90
|
var list = originsFromApps(origins);
|
|
66
|
-
if (
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
91
|
+
if (list.length) {
|
|
92
|
+
var origin = normalizeOrigin(dest.origin);
|
|
93
|
+
if (!list.some(function (o) {
|
|
94
|
+
return normalizeOrigin(o) === origin;
|
|
95
|
+
})) return null;
|
|
96
|
+
}
|
|
97
|
+
dest.projectId = projectIdFromApps(url, origins);
|
|
98
|
+
return dest;
|
|
72
99
|
}
|
|
73
100
|
|
|
74
101
|
/**
|
|
@@ -99,13 +126,14 @@ function openPlain(url) {
|
|
|
99
126
|
|
|
100
127
|
/**
|
|
101
128
|
* Issue a login code and navigate to `/sso?loginId=`.
|
|
102
|
-
*
|
|
129
|
+
* Host is the SDK default. Omit `apiUrl` unless this call is a real override.
|
|
103
130
|
*
|
|
104
131
|
* @param {string} url - Destination app URL (from the sibling card / banner)
|
|
105
132
|
* @param {string|null|undefined} token
|
|
106
133
|
* @param {object} [options]
|
|
107
|
-
* @param {string} [options.apiUrl] -
|
|
108
|
-
* @param {string
|
|
134
|
+
* @param {string} [options.apiUrl] - Override host. Do not pass product `/powr`.
|
|
135
|
+
* @param {string} [options.projectId] - Destination Powr id (else from matched card)
|
|
136
|
+
* @param {string[]|Array<{url?: string, projectId?: string}>} [options.origins] - The card list
|
|
109
137
|
*/
|
|
110
138
|
function openPowrLogin(_x, _x2) {
|
|
111
139
|
return _openPowrLogin.apply(this, arguments);
|
|
@@ -114,6 +142,7 @@ function _openPowrLogin() {
|
|
|
114
142
|
_openPowrLogin = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(url, token) {
|
|
115
143
|
var options,
|
|
116
144
|
apiUrl,
|
|
145
|
+
projectIdOpt,
|
|
117
146
|
origins,
|
|
118
147
|
_options$ssoPath,
|
|
119
148
|
ssoPath,
|
|
@@ -123,6 +152,7 @@ function _openPowrLogin() {
|
|
|
123
152
|
navigate,
|
|
124
153
|
powrApi,
|
|
125
154
|
dest,
|
|
155
|
+
projectId,
|
|
126
156
|
data,
|
|
127
157
|
_args = arguments,
|
|
128
158
|
_t;
|
|
@@ -130,12 +160,13 @@ function _openPowrLogin() {
|
|
|
130
160
|
while (1) switch (_context.p = _context.n) {
|
|
131
161
|
case 0:
|
|
132
162
|
options = _args.length > 2 && _args[2] !== undefined ? _args[2] : {};
|
|
133
|
-
apiUrl = options.apiUrl, origins = options.origins, _options$ssoPath = options.ssoPath, ssoPath = _options$ssoPath === void 0 ? "/sso" : _options$ssoPath, _options$onFallback = options.onFallback, onFallback = _options$onFallback === void 0 ? openPlain : _options$onFallback, _options$navigate = options.navigate, navigate = _options$navigate === void 0 ? function (ssoUrl) {
|
|
163
|
+
apiUrl = options.apiUrl, projectIdOpt = options.projectId, origins = options.origins, _options$ssoPath = options.ssoPath, ssoPath = _options$ssoPath === void 0 ? "/sso" : _options$ssoPath, _options$onFallback = options.onFallback, onFallback = _options$onFallback === void 0 ? openPlain : _options$onFallback, _options$navigate = options.navigate, navigate = _options$navigate === void 0 ? function (ssoUrl) {
|
|
134
164
|
if (typeof window !== "undefined") window.location.assign(ssoUrl);
|
|
135
165
|
} : _options$navigate;
|
|
136
166
|
powrApi = resolvePowrApiUrl(apiUrl);
|
|
137
167
|
dest = matchPowrTarget(url, origins);
|
|
138
|
-
|
|
168
|
+
projectId = projectIdOpt || (dest === null || dest === void 0 ? void 0 : dest.projectId);
|
|
169
|
+
if (!(!dest || !token || !powrApi || !projectId)) {
|
|
139
170
|
_context.n = 1;
|
|
140
171
|
break;
|
|
141
172
|
}
|
|
@@ -144,7 +175,9 @@ function _openPowrLogin() {
|
|
|
144
175
|
case 1:
|
|
145
176
|
_context.p = 1;
|
|
146
177
|
_context.n = 2;
|
|
147
|
-
return (0, _api.issueLoginCode)(powrApi, token
|
|
178
|
+
return (0, _api.issueLoginCode)(powrApi, token, {
|
|
179
|
+
projectId: projectId
|
|
180
|
+
});
|
|
148
181
|
case 2:
|
|
149
182
|
data = _context.v;
|
|
150
183
|
navigate(buildPowrSsoUrl(dest, data.loginId, {
|