@learncard/chapi-plugin 1.0.27 → 1.0.29
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/chapi-plugin.cjs.development.js +86 -25
- package/dist/chapi-plugin.cjs.development.js.map +4 -4
- package/dist/chapi-plugin.cjs.production.min.js +1 -1
- package/dist/chapi-plugin.cjs.production.min.js.map +4 -4
- package/dist/chapi-plugin.esm.js +85 -25
- package/dist/chapi-plugin.esm.js.map +4 -4
- package/package.json +4 -4
package/dist/chapi-plugin.esm.js
CHANGED
@@ -257,7 +257,9 @@ var Injector = class {
|
|
257
257
|
throw new TypeError("`name` must be a non-empty string.");
|
258
258
|
}
|
259
259
|
if (!(definition && typeof definition === "object" && Array.isArray(definition.functions))) {
|
260
|
-
throw new TypeError(
|
260
|
+
throw new TypeError(
|
261
|
+
"`definition.function` must be an array of function names or function definition objects to be defined."
|
262
|
+
);
|
261
263
|
}
|
262
264
|
const self = this;
|
263
265
|
const api = {};
|
@@ -266,7 +268,11 @@ var Injector = class {
|
|
266
268
|
fn = { name: fn, options: {} };
|
267
269
|
}
|
268
270
|
api[fn.name] = async function() {
|
269
|
-
return self.client.send(
|
271
|
+
return self.client.send(
|
272
|
+
name + "." + fn.name,
|
273
|
+
[...arguments],
|
274
|
+
fn.options
|
275
|
+
);
|
270
276
|
};
|
271
277
|
});
|
272
278
|
self._apis[name] = api;
|
@@ -443,13 +449,17 @@ var WebApp = class {
|
|
443
449
|
}
|
444
450
|
async show() {
|
445
451
|
if (!this._connected) {
|
446
|
-
throw new Error(
|
452
|
+
throw new Error(
|
453
|
+
'Cannot "show" yet; not connected. Did you call ".connect()"?'
|
454
|
+
);
|
447
455
|
}
|
448
456
|
return this._control.show();
|
449
457
|
}
|
450
458
|
async hide() {
|
451
459
|
if (!this._connected) {
|
452
|
-
throw new Error(
|
460
|
+
throw new Error(
|
461
|
+
'Cannot "hide" yet; not connected. Did you call ".connect()?"'
|
462
|
+
);
|
453
463
|
}
|
454
464
|
return this._control.hide();
|
455
465
|
}
|
@@ -523,9 +533,11 @@ var WebAppWindowInlineDialog = class extends WebAppWindowDialog {
|
|
523
533
|
this.dialog.className = this.dialog.className + " " + className;
|
524
534
|
}
|
525
535
|
const style = document.createElement("style");
|
526
|
-
style.appendChild(
|
536
|
+
style.appendChild(
|
537
|
+
document.createTextNode(`dialog.web-app-window::backdrop {
|
527
538
|
background-color: transparent;
|
528
|
-
}`)
|
539
|
+
}`)
|
540
|
+
);
|
529
541
|
this.container = document.createElement("div");
|
530
542
|
applyStyle(this.container, {
|
531
543
|
position: "relative",
|
@@ -708,7 +720,13 @@ var WebAppWindow = class {
|
|
708
720
|
this.dialog = dialog = handle._dialog;
|
709
721
|
}
|
710
722
|
this._private._readyPromise = new Promise((resolve, reject) => {
|
711
|
-
this._timeoutId = setTimeout(
|
723
|
+
this._timeoutId = setTimeout(
|
724
|
+
() => reject(new DOMException(
|
725
|
+
"Loading Web application window timed out.",
|
726
|
+
"TimeoutError"
|
727
|
+
)),
|
728
|
+
timeout
|
729
|
+
);
|
712
730
|
this._private._resolveReady = (value) => {
|
713
731
|
clearTimeout(this.timeoutId);
|
714
732
|
this._timeoutId = null;
|
@@ -725,7 +743,10 @@ var WebAppWindow = class {
|
|
725
743
|
};
|
726
744
|
this._private.destroy = () => {
|
727
745
|
if (this._timeoutId) {
|
728
|
-
this._private._rejectReady(new DOMException(
|
746
|
+
this._private._rejectReady(new DOMException(
|
747
|
+
"Web application window closed before ready.",
|
748
|
+
"AbortError"
|
749
|
+
));
|
729
750
|
}
|
730
751
|
if (!this._destroyed) {
|
731
752
|
this.dialog.destroy();
|
@@ -929,10 +950,20 @@ var CredentialHandlerService = class {
|
|
929
950
|
this._credentialHandler = credentialHandler;
|
930
951
|
}
|
931
952
|
async request(credentialRequestEvent) {
|
932
|
-
return await this._credentialHandler._emitter.emit(
|
953
|
+
return await this._credentialHandler._emitter.emit(
|
954
|
+
new CredentialRequestEvent(Object.assign(
|
955
|
+
{ credentialHandler: this._credentialHandler },
|
956
|
+
credentialRequestEvent
|
957
|
+
))
|
958
|
+
);
|
933
959
|
}
|
934
960
|
async store(credentialStoreEvent) {
|
935
|
-
return await this._credentialHandler._emitter.emit(
|
961
|
+
return await this._credentialHandler._emitter.emit(
|
962
|
+
new CredentialStoreEvent(Object.assign(
|
963
|
+
{ credentialHandler: this._credentialHandler },
|
964
|
+
credentialStoreEvent
|
965
|
+
))
|
966
|
+
);
|
936
967
|
}
|
937
968
|
};
|
938
969
|
__name(CredentialHandlerService, "CredentialHandlerService");
|
@@ -947,7 +978,12 @@ var CredentialHandler = class extends WebApp {
|
|
947
978
|
super(mediatorOrigin, inline);
|
948
979
|
this._emitter = new EventEmitter({
|
949
980
|
async waitUntil(event) {
|
950
|
-
return event._promise || Promise.reject(
|
981
|
+
return event._promise || Promise.reject(
|
982
|
+
new DOMException(
|
983
|
+
'No "credentialrequest" event handler found.',
|
984
|
+
"NotFoundError"
|
985
|
+
)
|
986
|
+
);
|
951
987
|
}
|
952
988
|
});
|
953
989
|
}
|
@@ -959,13 +995,19 @@ var CredentialHandler = class extends WebApp {
|
|
959
995
|
}
|
960
996
|
addEventListener(eventType, fn) {
|
961
997
|
if (!EVENT_TYPES.includes(eventType)) {
|
962
|
-
throw new DOMException(
|
998
|
+
throw new DOMException(
|
999
|
+
`Unsupported event type "${eventType}"`,
|
1000
|
+
"NotSupportedError"
|
1001
|
+
);
|
963
1002
|
}
|
964
1003
|
return this._emitter.addEventListener(eventType, fn);
|
965
1004
|
}
|
966
1005
|
removeEventListener(eventType, fn) {
|
967
1006
|
if (!EVENT_TYPES.includes(eventType)) {
|
968
|
-
throw new DOMException(
|
1007
|
+
throw new DOMException(
|
1008
|
+
`Unsupported event type "${eventType}"`,
|
1009
|
+
"NotSupportedError"
|
1010
|
+
);
|
969
1011
|
}
|
970
1012
|
return this._emitter.removeEventListener(eventType, fn);
|
971
1013
|
}
|
@@ -1032,7 +1074,9 @@ var CredentialManager = class {
|
|
1032
1074
|
this.hints = new CredentialHints(url, injector);
|
1033
1075
|
}
|
1034
1076
|
static async requestPermission() {
|
1035
|
-
const status = await navigator.credentialsPolyfill.permissions.request(
|
1077
|
+
const status = await navigator.credentialsPolyfill.permissions.request(
|
1078
|
+
{ name: "credentialhandler" }
|
1079
|
+
);
|
1036
1080
|
return status.state;
|
1037
1081
|
}
|
1038
1082
|
};
|
@@ -1090,7 +1134,9 @@ var CredentialHandlers = class {
|
|
1090
1134
|
return await this._remote.hasRegistration("credential", url);
|
1091
1135
|
}
|
1092
1136
|
_deprecateNotice() {
|
1093
|
-
console.warn(
|
1137
|
+
console.warn(
|
1138
|
+
'Credential handler registration APIs are deprecated. The credential handler specified in "manifest.json" is now automatically registered when a user grants permission to install a credential handler via "CredentialManager.requestPermission()".'
|
1139
|
+
);
|
1094
1140
|
}
|
1095
1141
|
};
|
1096
1142
|
__name(CredentialHandlers, "CredentialHandlers");
|
@@ -1211,7 +1257,9 @@ async function load(options = {
|
|
1211
1257
|
} else if (options && typeof options === "object" && typeof options.mediatorOrigin === "string") {
|
1212
1258
|
mediatorUrl = `${options.mediatorOrigin}/mediator`;
|
1213
1259
|
} else {
|
1214
|
-
throw new Error(
|
1260
|
+
throw new Error(
|
1261
|
+
'"options.mediatorOrigin" must be a string expressing the origin of the mediator.'
|
1262
|
+
);
|
1215
1263
|
}
|
1216
1264
|
const appContext = new WebAppContext();
|
1217
1265
|
const injector = appContext.createWindow(mediatorUrl, {
|
@@ -1219,9 +1267,11 @@ async function load(options = {
|
|
1219
1267
|
timeout: 3e4
|
1220
1268
|
});
|
1221
1269
|
const style = document.createElement("style");
|
1222
|
-
style.appendChild(document.createTextNode(
|
1270
|
+
style.appendChild(document.createTextNode(
|
1271
|
+
`dialog.web-app-window.credential-mediator > .web-app-window-backdrop {
|
1223
1272
|
background-color: rgba(0, 0, 0, 0.25);
|
1224
|
-
}`
|
1273
|
+
}`
|
1274
|
+
));
|
1225
1275
|
document.body.appendChild(style);
|
1226
1276
|
const polyfill = {};
|
1227
1277
|
polyfill.permissions = new PermissionManager(injector);
|
@@ -1232,8 +1282,12 @@ async function load(options = {
|
|
1232
1282
|
polyfill.WebCredential = WebCredential2;
|
1233
1283
|
navigator.credentialsPolyfill = polyfill;
|
1234
1284
|
if ("credentials" in navigator) {
|
1235
|
-
navigator.credentials.get = polyfill.credentials.get.bind(
|
1236
|
-
|
1285
|
+
navigator.credentials.get = polyfill.credentials.get.bind(
|
1286
|
+
polyfill.credentials
|
1287
|
+
);
|
1288
|
+
navigator.credentials.store = polyfill.credentials.store.bind(
|
1289
|
+
polyfill.credentials
|
1290
|
+
);
|
1237
1291
|
} else {
|
1238
1292
|
navigator.credentials = polyfill.credentials;
|
1239
1293
|
}
|
@@ -1263,7 +1317,7 @@ function _assertSecureContext() {
|
|
1263
1317
|
}
|
1264
1318
|
__name(_assertSecureContext, "_assertSecureContext");
|
1265
1319
|
|
1266
|
-
// ../../../node_modules/.pnpm/web-credential-handler@2.0.
|
1320
|
+
// ../../../node_modules/.pnpm/web-credential-handler@2.0.2/node_modules/web-credential-handler/CredentialEventProxy.js
|
1267
1321
|
var PROXY_EVENT_TIMEOUT = 6e4;
|
1268
1322
|
var CredentialEventProxy = class extends WebApp {
|
1269
1323
|
constructor() {
|
@@ -1297,7 +1351,7 @@ var CredentialEventProxy = class extends WebApp {
|
|
1297
1351
|
};
|
1298
1352
|
__name(CredentialEventProxy, "CredentialEventProxy");
|
1299
1353
|
|
1300
|
-
// ../../../node_modules/.pnpm/web-credential-handler@2.0.
|
1354
|
+
// ../../../node_modules/.pnpm/web-credential-handler@2.0.2/node_modules/web-credential-handler/index.js
|
1301
1355
|
var DEFAULT_MEDIATOR = "https://authn.io";
|
1302
1356
|
async function installHandler() {
|
1303
1357
|
const CredentialManager2 = navigator.credentialsPolyfill.CredentialManager;
|
@@ -1344,7 +1398,9 @@ __name(listener, "listener");
|
|
1344
1398
|
async function createResponse({ event, get, store }) {
|
1345
1399
|
const result = await (get || store)({ event });
|
1346
1400
|
if (!(result && typeof result === "object")) {
|
1347
|
-
throw new TypeError(
|
1401
|
+
throw new TypeError(
|
1402
|
+
'Return value of "get" or "store" hook must be an object.'
|
1403
|
+
);
|
1348
1404
|
}
|
1349
1405
|
if (result.type === "response") {
|
1350
1406
|
return { dataType: result.dataType, data: result.data };
|
@@ -1369,7 +1425,9 @@ async function createResponse({ event, get, store }) {
|
|
1369
1425
|
hintKey: event.hintKey
|
1370
1426
|
});
|
1371
1427
|
}
|
1372
|
-
throw new Error(
|
1428
|
+
throw new Error(
|
1429
|
+
'Return value of "get" or "store" must have a type of "response" or "redirect".'
|
1430
|
+
);
|
1373
1431
|
}
|
1374
1432
|
__name(createResponse, "createResponse");
|
1375
1433
|
|
@@ -1409,7 +1467,9 @@ var getCHAPIPlugin = /* @__PURE__ */ __name(async () => {
|
|
1409
1467
|
methods: {
|
1410
1468
|
installChapiHandler: async () => installHandler(),
|
1411
1469
|
activateChapiHandler: async (_learnCard, {
|
1412
|
-
mediatorOrigin = `https://authn.io/mediator?${encodeURIComponent(
|
1470
|
+
mediatorOrigin = `https://authn.io/mediator?${encodeURIComponent(
|
1471
|
+
window.location.origin
|
1472
|
+
)}`,
|
1413
1473
|
get,
|
1414
1474
|
store
|
1415
1475
|
}) => {
|