@nymphjs/tilmeld-client 1.0.0-beta.55 → 1.0.0-beta.57

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/CHANGELOG.md CHANGED
@@ -3,6 +3,16 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [1.0.0-beta.57](https://github.com/sciactive/nymphjs/compare/v1.0.0-beta.56...v1.0.0-beta.57) (2024-06-12)
7
+
8
+ **Note:** Version bump only for package @nymphjs/tilmeld-client
9
+
10
+ # [1.0.0-beta.56](https://github.com/sciactive/nymphjs/compare/v1.0.0-beta.55...v1.0.0-beta.56) (2024-06-11)
11
+
12
+ ### Features
13
+
14
+ - allow connections where tokens are not renewed ([39071a5](https://github.com/sciactive/nymphjs/commit/39071a545644075190bd8213be25e0a0c46d2b5d))
15
+
6
16
  # [1.0.0-beta.55](https://github.com/sciactive/nymphjs/compare/v1.0.0-beta.54...v1.0.0-beta.55) (2024-05-26)
7
17
 
8
18
  **Note:** Version bump only for package @nymphjs/tilmeld-client
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@nymphjs/client")):"function"==typeof define&&define.amd?define(["@nymphjs/client"],t):"object"==typeof exports?exports["@nymphjs/tilmeld-client"]=t(require("@nymphjs/client")):e["@nymphjs/tilmeld-client"]=t(e["@nymphjs/client"])}(this,(e=>(()=>{"use strict";var t={690:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});const s=r(935);class n extends s.Entity{constructor(){super(),this.$data.enabled=!0,this.$data.abilities=[]}static async factory(e){return await super.factory(e)}static factorySync(){return super.factorySync()}async $checkGroupname(){return await this.$serverCall("$checkGroupname",[],!0)}async $checkEmail(){return await this.$serverCall("$checkEmail",[],!0)}async $getAvatar(){return await this.$serverCall("$getAvatar",[],!0)}async $getChildren(){return await this.$serverCall("$getChildren",[],!0)}async $getDescendants(e=!1){return await this.$serverCall("$getDescendants",[e],!0)}async $getLevel(){return await this.$serverCall("$getLevel",[],!0)}async $isDescendant(e){return await this.$serverCall("$isDescendant",[e],!0)}static async getPrimaryGroups(e,t){return await this.serverCallStatic("getPrimaryGroups",[{options:e,class:this.class},t])}static async getSecondaryGroups(e,t){return await this.serverCallStatic("getSecondaryGroups",[{options:e,class:this.class},t])}}n.class="Group",t.default=n},962:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});const s=r(935);let n=null;class a extends s.Entity{static init(e){let t={registerCallbacks:[],loginCallbacks:[],logoutCallbacks:[]};if(a.stores.has(e)){const r=a.stores.get(e);r&&(t=r)}a.stores.set(e,t),t.removeNymphResponseListener&&t.removeNymphResponseListener(),t.removeNymphResponseListener=e.on("response",(e=>this.handleToken(e))),this.handleToken()}constructor(){super(),this.$data.enabled=!0,this.$data.abilities=[],this.$data.groups=[],this.$data.inheritAbilities=!0}static async factory(e){return await super.factory(e)}static async factoryUsername(e){const t=new this;if(null!=e){const t=await this.nymph.getEntity({class:this},{type:"&",ilike:["username",e.replace(/([\\%_])/g,(e=>`\\${e}`))]});if(null!=t)return t}return t}static factorySync(){return super.factorySync()}async $checkUsername(){return await this.$serverCall("$checkUsername",[],!0)}async $checkEmail(){return await this.$serverCall("$checkEmail",[],!0)}async $checkPhone(){return await this.$serverCall("$checkPhone",[],!0)}async $getAvatar(){return await this.$serverCall("$getAvatar",[],!0)}async $register(e){const t=a.stores.get(this.$nymph);if(null==t)throw new Error("This user class was never initialized with an instance of Nymph");const r=await this.$serverCall("$register",[e]);if(r.result)for(let e=0;e<t.registerCallbacks.length;e++)t.registerCallbacks[e]&&t.registerCallbacks[e](this);if(r.loggedin){this.constructor.handleToken();for(let e=0;e<t.loginCallbacks.length;e++)t.loginCallbacks[e]&&t.loginCallbacks[e](this)}return r}async $switchUser(e){const t=a.stores.get(this.$nymph);if(null==t)throw new Error("This user class was never initialized with an instance of Nymph");const r=await this.$serverCall("$switchUser",[e]);if(r.result){this.constructor.handleToken();for(let e=0;e<t.loginCallbacks.length;e++)t.loginCallbacks[e]&&t.loginCallbacks[e](this)}return r}async $logout(){const e=a.stores.get(this.$nymph);if(null==e)throw new Error("This user class was never initialized with an instance of Nymph");const t=await this.$serverCall("$logout",[]);if(t.result){this.constructor.handleToken();for(let t=0;t<e.logoutCallbacks.length;t++)e.logoutCallbacks[t]&&e.logoutCallbacks[t](this)}return t}async $gatekeeper(e){return await this.$serverCall("$gatekeeper",[e],!0)}async $changePassword(e){return await this.$serverCall("$changePassword",[e])}async $revokeCurrentTokens(e){return await this.$serverCall("$revokeCurrentTokens",[e])}async $hasTOTPSecret(){return await this.$serverCall("$hasTOTPSecret",[],!0)}async $getNewTOTPSecret(){return await this.$serverCall("$getNewTOTPSecret",[],!0)}async $saveTOTPSecret(e){return await this.$serverCall("$saveTOTPSecret",[e])}async $removeTOTPSecret(e){return await this.$serverCall("$removeTOTPSecret",[...e?[e]:[]])}static async current(e){const t=await this.serverCallStatic("current",[!1]);return null==t?e?this.factorySync():null:t}static async loginUser(e){const t=a.stores.get(this.nymph);if(null==t)throw new Error("This user class was never initialized with an instance of Nymph");const r=await this.serverCallStatic("loginUser",[e]);if(r.result){this.handleToken();for(let e=0;e<t.loginCallbacks.length;e++)t.loginCallbacks[e]&&t.loginCallbacks[e](r.user)}return r}static async sendRecovery(e){return await this.serverCallStatic("sendRecovery",[e])}static async recover(e){return await this.serverCallStatic("recover",[e])}static async getClientConfig(){const e=a.stores.get(this.nymph);if(null==e)throw new Error("This user class was never initialized with an instance of Nymph");return e.clientConfig?e.clientConfig:(e.clientConfigPromise||(e.clientConfigPromise=this.serverCallStatic("getClientConfig",[]).then((t=>(e.clientConfig=t,e.clientConfigPromise=void 0,t)))),await e.clientConfigPromise)}static handleToken(e){let t=null,r=null;const s=/(?:(?:^|.*;\s*)TILMELDAUTH\s*=\s*([^;]*).*$)|^.*$/,a=/(?:(?:^|.*;\s*)TILMELDSWITCH\s*=\s*([^;]*).*$)|^.*$/;if(e&&e.headers.has("X-TILMELDAUTH"))t=e.headers.get("X-TILMELDAUTH"),r=e.headers.get("X-TILMELDSWITCH");else{if("undefined"==typeof document||!document.cookie.match(s))return;t=document.cookie.replace(s,"$1"),r=document.cookie.replace(a,"$1")}if(n!==t)if(null==t||""===t)null!=n&&(this.nymph.setXsrfToken(null),this.nymph.pubsub&&this.nymph.pubsub.setToken(null),n=null);else{const e=t.split(".")[1].replace(/-/g,"+").replace(/_/g,"/"),s="undefined"==typeof atob?Buffer.from(e,"base64").toString("binary"):atob(e),a=JSON.parse(s);this.nymph.setXsrfToken(a.xsrfToken),this.nymph.pubsub&&this.nymph.pubsub.setToken(t,r),n=t}}static on(e,t){const r=a.stores.get(this.nymph);if(null==r)throw new Error("This user class was never initialized with an instance of Nymph");const s=e+"Callbacks";if(!(s in r))throw new Error("Invalid event type.");return r[s].push(t),()=>this.off(e,t)}static off(e,t){const r=a.stores.get(this.nymph);if(null==r)throw new Error("This user class was never initialized with an instance of Nymph");const s=e+"Callbacks";if(!(s in r))return!1;const n=r[s].indexOf(t);return n>-1&&r[s].splice(n,1),!0}}a.stores=new WeakMap,a.class="User",t.default=a},584:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.checkUsername=t.register=t.login=t.NeedTOTPError=void 0;class r extends Error{}t.NeedTOTPError=r,t.login=async function(e,t,s,n,a){if(""===t)throw new Error("You need to enter a username.");if(""===s)throw new Error("You need to enter a password");try{const{result:i,needTOTP:o,...l}=await e.loginUser({username:t,password:s,code:n,...a?{additionalData:a}:{}});if(!i){if(o)throw new r(l.message);throw new Error(l.message)}return l}catch(e){if(e instanceof r)throw e;throw new Error(e?.message??"An error occurred.")}},t.register=async function(e,t,r){if(""===t.username)throw new Error("You need to enter a username.");if(!t.usernameVerified)throw new Error("The username you entered is not valid.");if(t.password!==t.password2)throw new Error("Your passwords do not match.");if(""===t.password)throw new Error("You need to enter a password");let s=e.factorySync();s.username=t.username;const n=r||await e.getClientConfig();n.regFields.includes("email")&&(n.emailUsernames?s.email=t.username:s.email=t.email),n.regFields.includes("name")&&(s.nameFirst=t.nameFirst,s.nameLast=t.nameLast),n.regFields.includes("phone")&&(s.phone=t.phone);try{const{result:e,...r}=await s.$register({password:t.password,...t.additionalData?{additionalData:t.additionalData}:{}});if(!e)throw new Error(r.message);return{...r,user:s}}catch(e){throw new Error(e?.message??"An error occurred.")}},t.checkUsername=async function(e,t,r){let s=e.factorySync();s.username=t,(r||await e.getClientConfig()).emailUsernames&&(s.email=t);try{const{result:e,...t}=await s.$checkUsername();if(!e)throw new Error(t.message);return t}catch(e){throw new Error(e?.message??"An error occurred.")}}},509:function(e,t,r){var s=this&&this.__createBinding||(Object.create?function(e,t,r,s){void 0===s&&(s=r);var n=Object.getOwnPropertyDescriptor(t,r);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,s,n)}:function(e,t,r,s){void 0===s&&(s=r),e[s]=t[r]}),n=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||s(t,e,r)},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.User=t.Group=void 0,n(r(690),t);const i=a(r(690));t.Group=i.default,n(r(584),t),n(r(962),t);const o=a(r(962));t.User=o.default},935:t=>{t.exports=e}},r={};return function e(s){var n=r[s];if(void 0!==n)return n.exports;var a=r[s]={exports:{}};return t[s].call(a.exports,a,a.exports,e),a.exports}(509)})()));
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@nymphjs/client")):"function"==typeof define&&define.amd?define(["@nymphjs/client"],t):"object"==typeof exports?exports["@nymphjs/tilmeld-client"]=t(require("@nymphjs/client")):e["@nymphjs/tilmeld-client"]=t(e["@nymphjs/client"])}(this,(e=>(()=>{"use strict";var t={690:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});const s=r(935);class n extends s.Entity{constructor(){super(),this.$data.enabled=!0,this.$data.abilities=[]}static async factory(e){return await super.factory(e)}static factorySync(){return super.factorySync()}async $checkGroupname(){return await this.$serverCall("$checkGroupname",[],!0)}async $checkEmail(){return await this.$serverCall("$checkEmail",[],!0)}async $getAvatar(){return await this.$serverCall("$getAvatar",[],!0)}async $getChildren(){return await this.$serverCall("$getChildren",[],!0)}async $getDescendants(e=!1){return await this.$serverCall("$getDescendants",[e],!0)}async $getLevel(){return await this.$serverCall("$getLevel",[],!0)}async $isDescendant(e){return await this.$serverCall("$isDescendant",[e],!0)}static async getPrimaryGroups(e,t){return await this.serverCallStatic("getPrimaryGroups",[{options:e,class:this.class},t])}static async getSecondaryGroups(e,t){return await this.serverCallStatic("getSecondaryGroups",[{options:e,class:this.class},t])}}n.class="Group",t.default=n},962:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});const s=r(935);let n=null;class a extends s.Entity{static init(e){let t={registerCallbacks:[],loginCallbacks:[],logoutCallbacks:[]};if(a.stores.has(e)){const r=a.stores.get(e);r&&(t=r)}a.stores.set(e,t),t.removeNymphResponseListener&&t.removeNymphResponseListener(),t.removeNymphResponseListener=e.on("response",(e=>this.handleToken(e))),this.handleToken()}constructor(){super(),this.$data.enabled=!0,this.$data.abilities=[],this.$data.groups=[],this.$data.inheritAbilities=!0}static async factory(e){return await super.factory(e)}static async factoryUsername(e){const t=new this;if(null!=e){const t=await this.nymph.getEntity({class:this},{type:"&",ilike:["username",e.replace(/([\\%_])/g,(e=>`\\${e}`))]});if(null!=t)return t}return t}static factorySync(){return super.factorySync()}async $checkUsername(){return await this.$serverCall("$checkUsername",[],!0)}async $checkEmail(){return await this.$serverCall("$checkEmail",[],!0)}async $checkPhone(){return await this.$serverCall("$checkPhone",[],!0)}async $getAvatar(){return await this.$serverCall("$getAvatar",[],!0)}async $register(e){const t=a.stores.get(this.$nymph);if(null==t)throw new Error("This user class was never initialized with an instance of Nymph");const r=await this.$serverCall("$register",[e]);if(r.result)for(let e=0;e<t.registerCallbacks.length;e++)t.registerCallbacks[e]&&t.registerCallbacks[e](this);if(r.loggedin){this.constructor.handleToken();for(let e=0;e<t.loginCallbacks.length;e++)t.loginCallbacks[e]&&t.loginCallbacks[e](this)}return r}async $switchUser(e){const t=a.stores.get(this.$nymph);if(null==t)throw new Error("This user class was never initialized with an instance of Nymph");const r=await this.$serverCall("$switchUser",[e]);if(r.result){this.constructor.handleToken();for(let e=0;e<t.loginCallbacks.length;e++)t.loginCallbacks[e]&&t.loginCallbacks[e](this)}return r}async $logout(){const e=a.stores.get(this.$nymph);if(null==e)throw new Error("This user class was never initialized with an instance of Nymph");const t=await this.$serverCall("$logout",[]);if(t.result){this.constructor.handleToken();for(let t=0;t<e.logoutCallbacks.length;t++)e.logoutCallbacks[t]&&e.logoutCallbacks[t](this)}return t}async $gatekeeper(e){return await this.$serverCall("$gatekeeper",[e],!0)}async $changePassword(e){return await this.$serverCall("$changePassword",[e])}async $revokeCurrentTokens(e){return await this.$serverCall("$revokeCurrentTokens",[e])}async $hasTOTPSecret(){return await this.$serverCall("$hasTOTPSecret",[],!0)}async $getNewTOTPSecret(){return await this.$serverCall("$getNewTOTPSecret",[],!0)}async $saveTOTPSecret(e){return await this.$serverCall("$saveTOTPSecret",[e])}async $removeTOTPSecret(e){return await this.$serverCall("$removeTOTPSecret",[...e?[e]:[]])}static async current(e){const t=await this.serverCallStatic("current",[!1]);return null==t?e?this.factorySync():null:t}static async loginUser(e){const t=a.stores.get(this.nymph);if(null==t)throw new Error("This user class was never initialized with an instance of Nymph");const r=await this.serverCallStatic("loginUser",[e]);if(r.result){this.handleToken();for(let e=0;e<t.loginCallbacks.length;e++)t.loginCallbacks[e]&&t.loginCallbacks[e](r.user)}return r}static async sendRecovery(e){return await this.serverCallStatic("sendRecovery",[e])}static async recover(e){return await this.serverCallStatic("recover",[e])}static async getClientConfig(){const e=a.stores.get(this.nymph);if(null==e)throw new Error("This user class was never initialized with an instance of Nymph");return e.clientConfig?e.clientConfig:(e.clientConfigPromise||(e.clientConfigPromise=this.serverCallStatic("getClientConfig",[]).then((t=>(e.clientConfig=t,e.clientConfigPromise=void 0,t)))),await e.clientConfigPromise)}static handleToken(e){let t=null,r=null;const s=/(?:(?:^|.*;\s*)TILMELDAUTH\s*=\s*([^;]*).*$)|^.*$/,a=/(?:(?:^|.*;\s*)TILMELDSWITCH\s*=\s*([^;]*).*$)|^.*$/;if(e&&e.headers.has("X-TILMELDAUTH"))t=e.headers.get("X-TILMELDAUTH"),r=e.headers.get("X-TILMELDSWITCH");else{if("undefined"==typeof document||!document.cookie.match(s))return;t=document.cookie.replace(s,"$1"),r=document.cookie.replace(a,"$1")}if(n!==t)if(null==t||""===t)null!=n&&(delete this.nymph.headers["X-Xsrf-Token"],this.nymph.pubsub&&this.nymph.pubsub.authenticate(null),n=null);else{const e=t.split(".")[1].replace(/-/g,"+").replace(/_/g,"/"),s="undefined"==typeof atob?Buffer.from(e,"base64").toString("binary"):atob(e),a=JSON.parse(s);this.nymph.headers["X-Xsrf-Token"]=a.xsrfToken,this.nymph.pubsub&&this.nymph.pubsub.authenticate(t,r),n=t}}static on(e,t){const r=a.stores.get(this.nymph);if(null==r)throw new Error("This user class was never initialized with an instance of Nymph");const s=e+"Callbacks";if(!(s in r))throw new Error("Invalid event type.");return r[s].push(t),()=>this.off(e,t)}static off(e,t){const r=a.stores.get(this.nymph);if(null==r)throw new Error("This user class was never initialized with an instance of Nymph");const s=e+"Callbacks";if(!(s in r))return!1;const n=r[s].indexOf(t);return n>-1&&r[s].splice(n,1),!0}}a.stores=new WeakMap,a.class="User",t.default=a},584:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.checkUsername=t.register=t.login=t.NeedTOTPError=void 0;class r extends Error{}t.NeedTOTPError=r,t.login=async function(e,t,s,n,a){if(""===t)throw new Error("You need to enter a username.");if(""===s)throw new Error("You need to enter a password");try{const{result:i,needTOTP:o,...l}=await e.loginUser({username:t,password:s,code:n,...a?{additionalData:a}:{}});if(!i){if(o)throw new r(l.message);throw new Error(l.message)}return l}catch(e){if(e instanceof r)throw e;throw new Error(e?.message??"An error occurred.")}},t.register=async function(e,t,r){if(""===t.username)throw new Error("You need to enter a username.");if(!t.usernameVerified)throw new Error("The username you entered is not valid.");if(t.password!==t.password2)throw new Error("Your passwords do not match.");if(""===t.password)throw new Error("You need to enter a password");let s=e.factorySync();s.username=t.username;const n=r||await e.getClientConfig();n.regFields.includes("email")&&(n.emailUsernames?s.email=t.username:s.email=t.email),n.regFields.includes("name")&&(s.nameFirst=t.nameFirst,s.nameLast=t.nameLast),n.regFields.includes("phone")&&(s.phone=t.phone);try{const{result:e,...r}=await s.$register({password:t.password,...t.additionalData?{additionalData:t.additionalData}:{}});if(!e)throw new Error(r.message);return{...r,user:s}}catch(e){throw new Error(e?.message??"An error occurred.")}},t.checkUsername=async function(e,t,r){let s=e.factorySync();s.username=t,(r||await e.getClientConfig()).emailUsernames&&(s.email=t);try{const{result:e,...t}=await s.$checkUsername();if(!e)throw new Error(t.message);return t}catch(e){throw new Error(e?.message??"An error occurred.")}}},509:function(e,t,r){var s=this&&this.__createBinding||(Object.create?function(e,t,r,s){void 0===s&&(s=r);var n=Object.getOwnPropertyDescriptor(t,r);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,s,n)}:function(e,t,r,s){void 0===s&&(s=r),e[s]=t[r]}),n=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||s(t,e,r)},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.User=t.Group=void 0,n(r(690),t);const i=a(r(690));t.Group=i.default,n(r(584),t),n(r(962),t);const o=a(r(962));t.User=o.default},935:t=>{t.exports=e}},r={};return function e(s){var n=r[s];if(void 0!==n)return n.exports;var a=r[s]={exports:{}};return t[s].call(a.exports,a,a.exports,e),a.exports}(509)})()));
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","mappings":"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","sources":["webpack://@nymphjs/tilmeld-client/webpack/universalModuleDefinition","webpack://@nymphjs/tilmeld-client/./lib/Group.js","webpack://@nymphjs/tilmeld-client/./lib/User.js","webpack://@nymphjs/tilmeld-client/./lib/helpers.js","webpack://@nymphjs/tilmeld-client/./lib/index.js","webpack://@nymphjs/tilmeld-client/external umd \"@nymphjs/client\"","webpack://@nymphjs/tilmeld-client/webpack/bootstrap","webpack://@nymphjs/tilmeld-client/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"@nymphjs/client\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"@nymphjs/client\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"@nymphjs/tilmeld-client\"] = factory(require(\"@nymphjs/client\"));\n\telse\n\t\troot[\"@nymphjs/tilmeld-client\"] = factory(root[\"@nymphjs/client\"]);\n})(this, (__WEBPACK_EXTERNAL_MODULE__935__) => {\nreturn ","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst client_1 = require(\"@nymphjs/client\");\nclass Group extends client_1.Entity {\n constructor() {\n super();\n this.$data.enabled = true;\n this.$data.abilities = [];\n }\n static async factory(guid) {\n return (await super.factory(guid));\n }\n static factorySync() {\n return super.factorySync();\n }\n async $checkGroupname() {\n return await this.$serverCall('$checkGroupname', [], true);\n }\n async $checkEmail() {\n return await this.$serverCall('$checkEmail', [], true);\n }\n async $getAvatar() {\n return await this.$serverCall('$getAvatar', [], true);\n }\n async $getChildren() {\n return await this.$serverCall('$getChildren', [], true);\n }\n async $getDescendants(andSelf = false) {\n return await this.$serverCall('$getDescendants', [andSelf], true);\n }\n async $getLevel() {\n return await this.$serverCall('$getLevel', [], true);\n }\n async $isDescendant(givenGroup) {\n return await this.$serverCall('$isDescendant', [givenGroup], true);\n }\n static async getPrimaryGroups(options, selectors) {\n return await this.serverCallStatic('getPrimaryGroups', [\n { options, class: this.class },\n selectors,\n ]);\n }\n static async getSecondaryGroups(options, selectors) {\n return await this.serverCallStatic('getSecondaryGroups', [\n { options, class: this.class },\n selectors,\n ]);\n }\n}\nGroup.class = 'Group';\nexports.default = Group;\n//# sourceMappingURL=Group.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst client_1 = require(\"@nymphjs/client\");\nlet currentToken = null;\nclass User extends client_1.Entity {\n static init(nymph) {\n let store = {\n registerCallbacks: [],\n loginCallbacks: [],\n logoutCallbacks: [],\n };\n if (User.stores.has(nymph)) {\n const storeVal = User.stores.get(nymph);\n if (storeVal) {\n store = storeVal;\n }\n }\n User.stores.set(nymph, store);\n if (store.removeNymphResponseListener) {\n store.removeNymphResponseListener();\n }\n store.removeNymphResponseListener = nymph.on('response', (response) => this.handleToken(response));\n this.handleToken();\n }\n constructor() {\n super();\n this.$data.enabled = true;\n this.$data.abilities = [];\n this.$data.groups = [];\n this.$data.inheritAbilities = true;\n }\n static async factory(guid) {\n return (await super.factory(guid));\n }\n static async factoryUsername(username) {\n const entity = new this();\n if (username != null) {\n const entity = await this.nymph.getEntity({\n class: this,\n }, {\n type: '&',\n ilike: ['username', username.replace(/([\\\\%_])/g, (s) => `\\\\${s}`)],\n });\n if (entity != null) {\n return entity;\n }\n }\n return entity;\n }\n static factorySync() {\n return super.factorySync();\n }\n async $checkUsername() {\n return await this.$serverCall('$checkUsername', [], true);\n }\n async $checkEmail() {\n return await this.$serverCall('$checkEmail', [], true);\n }\n async $checkPhone() {\n return await this.$serverCall('$checkPhone', [], true);\n }\n async $getAvatar() {\n return await this.$serverCall('$getAvatar', [], true);\n }\n async $register(data) {\n const store = User.stores.get(this.$nymph);\n if (store == null) {\n throw new Error('This user class was never initialized with an instance of Nymph');\n }\n const response = await this.$serverCall('$register', [data]);\n if (response.result) {\n for (let i = 0; i < store.registerCallbacks.length; i++) {\n store.registerCallbacks[i] && store.registerCallbacks[i](this);\n }\n }\n if (response.loggedin) {\n this.constructor.handleToken();\n for (let i = 0; i < store.loginCallbacks.length; i++) {\n store.loginCallbacks[i] && store.loginCallbacks[i](this);\n }\n }\n return response;\n }\n async $switchUser(data) {\n const store = User.stores.get(this.$nymph);\n if (store == null) {\n throw new Error('This user class was never initialized with an instance of Nymph');\n }\n const response = await this.$serverCall('$switchUser', [data]);\n if (response.result) {\n this.constructor.handleToken();\n for (let i = 0; i < store.loginCallbacks.length; i++) {\n store.loginCallbacks[i] && store.loginCallbacks[i](this);\n }\n }\n return response;\n }\n async $logout() {\n const store = User.stores.get(this.$nymph);\n if (store == null) {\n throw new Error('This user class was never initialized with an instance of Nymph');\n }\n const response = await this.$serverCall('$logout', []);\n if (response.result) {\n this.constructor.handleToken();\n for (let i = 0; i < store.logoutCallbacks.length; i++) {\n store.logoutCallbacks[i] && store.logoutCallbacks[i](this);\n }\n }\n return response;\n }\n async $gatekeeper(ability) {\n return await this.$serverCall('$gatekeeper', [ability], true);\n }\n async $changePassword(data) {\n return await this.$serverCall('$changePassword', [data]);\n }\n async $revokeCurrentTokens(data) {\n return await this.$serverCall('$revokeCurrentTokens', [data]);\n }\n async $hasTOTPSecret() {\n return await this.$serverCall('$hasTOTPSecret', [], true);\n }\n async $getNewTOTPSecret() {\n return await this.$serverCall('$getNewTOTPSecret', [], true);\n }\n async $saveTOTPSecret(data) {\n return await this.$serverCall('$saveTOTPSecret', [data]);\n }\n async $removeTOTPSecret(data) {\n return await this.$serverCall('$removeTOTPSecret', [\n ...(data ? [data] : []),\n ]);\n }\n static async current(returnObjectIfNotExist) {\n const currentUser = await this.serverCallStatic('current', [false]);\n if (currentUser == null) {\n return returnObjectIfNotExist ? this.factorySync() : null;\n }\n return currentUser;\n }\n static async loginUser(data) {\n const store = User.stores.get(this.nymph);\n if (store == null) {\n throw new Error('This user class was never initialized with an instance of Nymph');\n }\n const response = await this.serverCallStatic('loginUser', [data]);\n if (response.result) {\n this.handleToken();\n for (let i = 0; i < store.loginCallbacks.length; i++) {\n store.loginCallbacks[i] && store.loginCallbacks[i](response.user);\n }\n }\n return response;\n }\n static async sendRecovery(data) {\n return await this.serverCallStatic('sendRecovery', [data]);\n }\n static async recover(data) {\n return await this.serverCallStatic('recover', [data]);\n }\n static async getClientConfig() {\n const store = User.stores.get(this.nymph);\n if (store == null) {\n throw new Error('This user class was never initialized with an instance of Nymph');\n }\n if (store.clientConfig) {\n return store.clientConfig;\n }\n if (!store.clientConfigPromise) {\n store.clientConfigPromise = this.serverCallStatic('getClientConfig', []).then((config) => {\n store.clientConfig = config;\n store.clientConfigPromise = undefined;\n return config;\n });\n }\n return await store.clientConfigPromise;\n }\n static handleToken(response) {\n let token = null;\n let switchToken = null;\n const authCookiePattern = /(?:(?:^|.*;\\s*)TILMELDAUTH\\s*=\\s*([^;]*).*$)|^.*$/;\n const switchCookiePattern = /(?:(?:^|.*;\\s*)TILMELDSWITCH\\s*=\\s*([^;]*).*$)|^.*$/;\n if (response && response.headers.has('X-TILMELDAUTH')) {\n token = response.headers.get('X-TILMELDAUTH');\n switchToken = response.headers.get('X-TILMELDSWITCH');\n }\n else if (typeof document !== 'undefined' &&\n document.cookie.match(authCookiePattern)) {\n token = document.cookie.replace(authCookiePattern, '$1');\n switchToken = document.cookie.replace(switchCookiePattern, '$1');\n }\n else {\n return;\n }\n if (currentToken !== token) {\n if (token == null || token === '') {\n if (currentToken != null) {\n this.nymph.setXsrfToken(null);\n if (this.nymph.pubsub) {\n this.nymph.pubsub.setToken(null);\n }\n currentToken = null;\n }\n }\n else {\n const base64Url = token.split('.')[1];\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const json = typeof atob === 'undefined'\n ? Buffer.from(base64, 'base64').toString('binary')\n : atob(base64);\n const jwt = JSON.parse(json);\n this.nymph.setXsrfToken(jwt.xsrfToken);\n if (this.nymph.pubsub) {\n this.nymph.pubsub.setToken(token, switchToken);\n }\n currentToken = token;\n }\n }\n }\n static on(event, callback) {\n const store = User.stores.get(this.nymph);\n if (store == null) {\n throw new Error('This user class was never initialized with an instance of Nymph');\n }\n const prop = (event + 'Callbacks');\n if (!(prop in store)) {\n throw new Error('Invalid event type.');\n }\n store[prop].push(callback);\n return () => this.off(event, callback);\n }\n static off(event, callback) {\n const store = User.stores.get(this.nymph);\n if (store == null) {\n throw new Error('This user class was never initialized with an instance of Nymph');\n }\n const prop = (event + 'Callbacks');\n if (!(prop in store)) {\n return false;\n }\n const i = store[prop].indexOf(callback);\n if (i > -1) {\n store[prop].splice(i, 1);\n }\n return true;\n }\n}\nUser.stores = new WeakMap();\nUser.class = 'User';\nexports.default = User;\n//# sourceMappingURL=User.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.checkUsername = exports.register = exports.login = exports.NeedTOTPError = void 0;\nclass NeedTOTPError extends Error {\n}\nexports.NeedTOTPError = NeedTOTPError;\nasync function login(User, username, password, code, additionalData) {\n if (username === '') {\n throw new Error('You need to enter a username.');\n }\n if (password === '') {\n throw new Error('You need to enter a password');\n }\n try {\n const { result, needTOTP, ...response } = await User.loginUser({\n username,\n password,\n code,\n ...(additionalData ? { additionalData } : {}),\n });\n if (!result) {\n if (needTOTP) {\n throw new NeedTOTPError(response.message);\n }\n throw new Error(response.message);\n }\n return response;\n }\n catch (e) {\n if (e instanceof NeedTOTPError) {\n throw e;\n }\n throw new Error(e?.message ?? 'An error occurred.');\n }\n}\nexports.login = login;\nasync function register(User, userDetails, clientConfig) {\n if (userDetails.username === '') {\n throw new Error('You need to enter a username.');\n }\n if (!userDetails.usernameVerified) {\n throw new Error('The username you entered is not valid.');\n }\n if (userDetails.password !== userDetails.password2) {\n throw new Error('Your passwords do not match.');\n }\n if (userDetails.password === '') {\n throw new Error('You need to enter a password');\n }\n let user = User.factorySync();\n user.username = userDetails.username;\n const config = clientConfig || (await User.getClientConfig());\n if (config.regFields.includes('email')) {\n if (config.emailUsernames) {\n user.email = userDetails.username;\n }\n else {\n user.email = userDetails.email;\n }\n }\n if (config.regFields.includes('name')) {\n user.nameFirst = userDetails.nameFirst;\n user.nameLast = userDetails.nameLast;\n }\n if (config.regFields.includes('phone')) {\n user.phone = userDetails.phone;\n }\n try {\n const { result, ...response } = await user.$register({\n password: userDetails.password,\n ...(userDetails.additionalData\n ? { additionalData: userDetails.additionalData }\n : {}),\n });\n if (!result) {\n throw new Error(response.message);\n }\n return { ...response, user };\n }\n catch (e) {\n throw new Error(e?.message ?? 'An error occurred.');\n }\n}\nexports.register = register;\nasync function checkUsername(User, username, clientConfig) {\n let user = User.factorySync();\n user.username = username;\n const config = clientConfig || (await User.getClientConfig());\n if (config.emailUsernames) {\n user.email = username;\n }\n try {\n const { result, ...response } = await user.$checkUsername();\n if (!result) {\n throw new Error(response.message);\n }\n return response;\n }\n catch (e) {\n throw new Error(e?.message ?? 'An error occurred.');\n }\n}\nexports.checkUsername = checkUsername;\n//# sourceMappingURL=helpers.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.User = exports.Group = void 0;\n__exportStar(require(\"./Group\"), exports);\nconst Group_1 = __importDefault(require(\"./Group\"));\nexports.Group = Group_1.default;\n__exportStar(require(\"./helpers\"), exports);\n__exportStar(require(\"./User\"), exports);\nconst User_1 = __importDefault(require(\"./User\"));\nexports.User = User_1.default;\n//# sourceMappingURL=index.js.map","module.exports = __WEBPACK_EXTERNAL_MODULE__935__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(509);\n"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE__935__","Object","defineProperty","value","client_1","Group","Entity","constructor","super","$data","enabled","abilities","guid","factorySync","$checkGroupname","$serverCall","$checkEmail","$getAvatar","$getChildren","$getDescendants","andSelf","$getLevel","$isDescendant","givenGroup","getPrimaryGroups","options","selectors","serverCallStatic","class","getSecondaryGroups","currentToken","User","init","nymph","store","registerCallbacks","loginCallbacks","logoutCallbacks","stores","has","storeVal","get","set","removeNymphResponseListener","on","response","handleToken","groups","inheritAbilities","factoryUsername","username","entity","getEntity","type","ilike","replace","s","$checkUsername","$checkPhone","$register","data","$nymph","Error","result","i","length","loggedin","$switchUser","$logout","$gatekeeper","ability","$changePassword","$revokeCurrentTokens","$hasTOTPSecret","$getNewTOTPSecret","$saveTOTPSecret","$removeTOTPSecret","current","returnObjectIfNotExist","currentUser","loginUser","user","sendRecovery","recover","getClientConfig","clientConfig","clientConfigPromise","then","config","undefined","token","switchToken","authCookiePattern","switchCookiePattern","headers","document","cookie","match","setXsrfToken","pubsub","setToken","base64","split","json","atob","Buffer","from","toString","jwt","JSON","parse","xsrfToken","event","callback","prop","push","off","indexOf","splice","WeakMap","checkUsername","register","login","NeedTOTPError","async","password","code","additionalData","needTOTP","message","e","userDetails","usernameVerified","password2","regFields","includes","emailUsernames","email","nameFirst","nameLast","phone","__createBinding","create","o","m","k","k2","desc","getOwnPropertyDescriptor","__esModule","writable","configurable","enumerable","__exportStar","p","prototype","hasOwnProperty","call","__importDefault","mod","Group_1","default","User_1","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""}
1
+ {"version":3,"file":"index.js","mappings":"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","sources":["webpack://@nymphjs/tilmeld-client/webpack/universalModuleDefinition","webpack://@nymphjs/tilmeld-client/./lib/Group.js","webpack://@nymphjs/tilmeld-client/./lib/User.js","webpack://@nymphjs/tilmeld-client/./lib/helpers.js","webpack://@nymphjs/tilmeld-client/./lib/index.js","webpack://@nymphjs/tilmeld-client/external umd \"@nymphjs/client\"","webpack://@nymphjs/tilmeld-client/webpack/bootstrap","webpack://@nymphjs/tilmeld-client/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"@nymphjs/client\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"@nymphjs/client\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"@nymphjs/tilmeld-client\"] = factory(require(\"@nymphjs/client\"));\n\telse\n\t\troot[\"@nymphjs/tilmeld-client\"] = factory(root[\"@nymphjs/client\"]);\n})(this, (__WEBPACK_EXTERNAL_MODULE__935__) => {\nreturn ","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst client_1 = require(\"@nymphjs/client\");\nclass Group extends client_1.Entity {\n constructor() {\n super();\n this.$data.enabled = true;\n this.$data.abilities = [];\n }\n static async factory(guid) {\n return (await super.factory(guid));\n }\n static factorySync() {\n return super.factorySync();\n }\n async $checkGroupname() {\n return await this.$serverCall('$checkGroupname', [], true);\n }\n async $checkEmail() {\n return await this.$serverCall('$checkEmail', [], true);\n }\n async $getAvatar() {\n return await this.$serverCall('$getAvatar', [], true);\n }\n async $getChildren() {\n return await this.$serverCall('$getChildren', [], true);\n }\n async $getDescendants(andSelf = false) {\n return await this.$serverCall('$getDescendants', [andSelf], true);\n }\n async $getLevel() {\n return await this.$serverCall('$getLevel', [], true);\n }\n async $isDescendant(givenGroup) {\n return await this.$serverCall('$isDescendant', [givenGroup], true);\n }\n static async getPrimaryGroups(options, selectors) {\n return await this.serverCallStatic('getPrimaryGroups', [\n { options, class: this.class },\n selectors,\n ]);\n }\n static async getSecondaryGroups(options, selectors) {\n return await this.serverCallStatic('getSecondaryGroups', [\n { options, class: this.class },\n selectors,\n ]);\n }\n}\n// The name of the server class\nGroup.class = 'Group';\nexports.default = Group;\n//# sourceMappingURL=Group.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst client_1 = require(\"@nymphjs/client\");\nlet currentToken = null;\nclass User extends client_1.Entity {\n static init(nymph) {\n let store = {\n registerCallbacks: [],\n loginCallbacks: [],\n logoutCallbacks: [],\n };\n if (User.stores.has(nymph)) {\n const storeVal = User.stores.get(nymph);\n if (storeVal) {\n store = storeVal;\n }\n }\n User.stores.set(nymph, store);\n if (store.removeNymphResponseListener) {\n store.removeNymphResponseListener();\n }\n store.removeNymphResponseListener = nymph.on('response', (response) => this.handleToken(response));\n this.handleToken();\n }\n constructor() {\n super();\n this.$data.enabled = true;\n this.$data.abilities = [];\n this.$data.groups = [];\n this.$data.inheritAbilities = true;\n }\n static async factory(guid) {\n return (await super.factory(guid));\n }\n static async factoryUsername(username) {\n const entity = new this();\n if (username != null) {\n const entity = await this.nymph.getEntity({\n class: this,\n }, {\n type: '&',\n ilike: ['username', username.replace(/([\\\\%_])/g, (s) => `\\\\${s}`)],\n });\n if (entity != null) {\n return entity;\n }\n }\n return entity;\n }\n static factorySync() {\n return super.factorySync();\n }\n async $checkUsername() {\n return await this.$serverCall('$checkUsername', [], true);\n }\n async $checkEmail() {\n return await this.$serverCall('$checkEmail', [], true);\n }\n async $checkPhone() {\n return await this.$serverCall('$checkPhone', [], true);\n }\n async $getAvatar() {\n return await this.$serverCall('$getAvatar', [], true);\n }\n async $register(data) {\n const store = User.stores.get(this.$nymph);\n if (store == null) {\n throw new Error('This user class was never initialized with an instance of Nymph');\n }\n const response = await this.$serverCall('$register', [data]);\n if (response.result) {\n for (let i = 0; i < store.registerCallbacks.length; i++) {\n store.registerCallbacks[i] && store.registerCallbacks[i](this);\n }\n }\n if (response.loggedin) {\n this.constructor.handleToken();\n for (let i = 0; i < store.loginCallbacks.length; i++) {\n store.loginCallbacks[i] && store.loginCallbacks[i](this);\n }\n }\n return response;\n }\n async $switchUser(data) {\n const store = User.stores.get(this.$nymph);\n if (store == null) {\n throw new Error('This user class was never initialized with an instance of Nymph');\n }\n const response = await this.$serverCall('$switchUser', [data]);\n if (response.result) {\n this.constructor.handleToken();\n for (let i = 0; i < store.loginCallbacks.length; i++) {\n store.loginCallbacks[i] && store.loginCallbacks[i](this);\n }\n }\n return response;\n }\n async $logout() {\n const store = User.stores.get(this.$nymph);\n if (store == null) {\n throw new Error('This user class was never initialized with an instance of Nymph');\n }\n const response = await this.$serverCall('$logout', []);\n if (response.result) {\n this.constructor.handleToken();\n for (let i = 0; i < store.logoutCallbacks.length; i++) {\n store.logoutCallbacks[i] && store.logoutCallbacks[i](this);\n }\n }\n return response;\n }\n async $gatekeeper(ability) {\n return await this.$serverCall('$gatekeeper', [ability], true);\n }\n async $changePassword(data) {\n return await this.$serverCall('$changePassword', [data]);\n }\n async $revokeCurrentTokens(data) {\n return await this.$serverCall('$revokeCurrentTokens', [data]);\n }\n async $hasTOTPSecret() {\n return await this.$serverCall('$hasTOTPSecret', [], true);\n }\n async $getNewTOTPSecret() {\n return await this.$serverCall('$getNewTOTPSecret', [], true);\n }\n async $saveTOTPSecret(data) {\n return await this.$serverCall('$saveTOTPSecret', [data]);\n }\n async $removeTOTPSecret(data) {\n return await this.$serverCall('$removeTOTPSecret', [\n ...(data ? [data] : []),\n ]);\n }\n static async current(returnObjectIfNotExist) {\n const currentUser = await this.serverCallStatic('current', [false]);\n if (currentUser == null) {\n return returnObjectIfNotExist ? this.factorySync() : null;\n }\n return currentUser;\n }\n static async loginUser(data) {\n const store = User.stores.get(this.nymph);\n if (store == null) {\n throw new Error('This user class was never initialized with an instance of Nymph');\n }\n const response = await this.serverCallStatic('loginUser', [data]);\n if (response.result) {\n this.handleToken();\n for (let i = 0; i < store.loginCallbacks.length; i++) {\n store.loginCallbacks[i] && store.loginCallbacks[i](response.user);\n }\n }\n return response;\n }\n static async sendRecovery(data) {\n return await this.serverCallStatic('sendRecovery', [data]);\n }\n static async recover(data) {\n return await this.serverCallStatic('recover', [data]);\n }\n static async getClientConfig() {\n const store = User.stores.get(this.nymph);\n if (store == null) {\n throw new Error('This user class was never initialized with an instance of Nymph');\n }\n if (store.clientConfig) {\n return store.clientConfig;\n }\n if (!store.clientConfigPromise) {\n store.clientConfigPromise = this.serverCallStatic('getClientConfig', []).then((config) => {\n store.clientConfig = config;\n store.clientConfigPromise = undefined;\n return config;\n });\n }\n return await store.clientConfigPromise;\n }\n static handleToken(response) {\n let token = null;\n let switchToken = null;\n const authCookiePattern = /(?:(?:^|.*;\\s*)TILMELDAUTH\\s*=\\s*([^;]*).*$)|^.*$/;\n const switchCookiePattern = /(?:(?:^|.*;\\s*)TILMELDSWITCH\\s*=\\s*([^;]*).*$)|^.*$/;\n if (response && response.headers.has('X-TILMELDAUTH')) {\n token = response.headers.get('X-TILMELDAUTH');\n switchToken = response.headers.get('X-TILMELDSWITCH');\n }\n else if (typeof document !== 'undefined' &&\n document.cookie.match(authCookiePattern)) {\n token = document.cookie.replace(authCookiePattern, '$1');\n switchToken = document.cookie.replace(switchCookiePattern, '$1');\n }\n else {\n return;\n }\n if (currentToken !== token) {\n if (token == null || token === '') {\n if (currentToken != null) {\n delete this.nymph.headers['X-Xsrf-Token'];\n if (this.nymph.pubsub) {\n this.nymph.pubsub.authenticate(null);\n }\n currentToken = null;\n }\n }\n else {\n const base64Url = token.split('.')[1];\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const json = typeof atob === 'undefined'\n ? Buffer.from(base64, 'base64').toString('binary') // node\n : atob(base64); // browser\n const jwt = JSON.parse(json);\n this.nymph.headers['X-Xsrf-Token'] = jwt.xsrfToken;\n if (this.nymph.pubsub) {\n this.nymph.pubsub.authenticate(token, switchToken);\n }\n currentToken = token;\n }\n }\n }\n static on(event, callback) {\n const store = User.stores.get(this.nymph);\n if (store == null) {\n throw new Error('This user class was never initialized with an instance of Nymph');\n }\n const prop = (event + 'Callbacks');\n if (!(prop in store)) {\n throw new Error('Invalid event type.');\n }\n // @ts-ignore: The callback should always be the right type here.\n store[prop].push(callback);\n return () => this.off(event, callback);\n }\n static off(event, callback) {\n const store = User.stores.get(this.nymph);\n if (store == null) {\n throw new Error('This user class was never initialized with an instance of Nymph');\n }\n const prop = (event + 'Callbacks');\n if (!(prop in store)) {\n return false;\n }\n // @ts-ignore: The callback should always be the right type here.\n const i = store[prop].indexOf(callback);\n if (i > -1) {\n // @ts-ignore: The callback should always be the right type here.\n store[prop].splice(i, 1);\n }\n return true;\n }\n}\nUser.stores = new WeakMap();\n// The name of the server class\nUser.class = 'User';\nexports.default = User;\n//# sourceMappingURL=User.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.checkUsername = exports.register = exports.login = exports.NeedTOTPError = void 0;\nclass NeedTOTPError extends Error {\n}\nexports.NeedTOTPError = NeedTOTPError;\nasync function login(User, username, password, code, additionalData) {\n if (username === '') {\n throw new Error('You need to enter a username.');\n }\n if (password === '') {\n throw new Error('You need to enter a password');\n }\n try {\n const { result, needTOTP, ...response } = await User.loginUser({\n username,\n password,\n code,\n ...(additionalData ? { additionalData } : {}),\n });\n if (!result) {\n if (needTOTP) {\n throw new NeedTOTPError(response.message);\n }\n throw new Error(response.message);\n }\n return response;\n }\n catch (e) {\n if (e instanceof NeedTOTPError) {\n throw e;\n }\n throw new Error(e?.message ?? 'An error occurred.');\n }\n}\nexports.login = login;\nasync function register(User, userDetails, clientConfig) {\n if (userDetails.username === '') {\n throw new Error('You need to enter a username.');\n }\n if (!userDetails.usernameVerified) {\n throw new Error('The username you entered is not valid.');\n }\n if (userDetails.password !== userDetails.password2) {\n throw new Error('Your passwords do not match.');\n }\n if (userDetails.password === '') {\n throw new Error('You need to enter a password');\n }\n // Create a new user.\n let user = User.factorySync();\n user.username = userDetails.username;\n const config = clientConfig || (await User.getClientConfig());\n if (config.regFields.includes('email')) {\n if (config.emailUsernames) {\n user.email = userDetails.username;\n }\n else {\n user.email = userDetails.email;\n }\n }\n if (config.regFields.includes('name')) {\n user.nameFirst = userDetails.nameFirst;\n user.nameLast = userDetails.nameLast;\n }\n if (config.regFields.includes('phone')) {\n user.phone = userDetails.phone;\n }\n try {\n const { result, ...response } = await user.$register({\n password: userDetails.password,\n ...(userDetails.additionalData\n ? { additionalData: userDetails.additionalData }\n : {}),\n });\n if (!result) {\n throw new Error(response.message);\n }\n return { ...response, user };\n }\n catch (e) {\n throw new Error(e?.message ?? 'An error occurred.');\n }\n}\nexports.register = register;\nasync function checkUsername(User, username, clientConfig) {\n let user = User.factorySync();\n user.username = username;\n const config = clientConfig || (await User.getClientConfig());\n if (config.emailUsernames) {\n user.email = username;\n }\n try {\n const { result, ...response } = await user.$checkUsername();\n if (!result) {\n throw new Error(response.message);\n }\n return response;\n }\n catch (e) {\n throw new Error(e?.message ?? 'An error occurred.');\n }\n}\nexports.checkUsername = checkUsername;\n//# sourceMappingURL=helpers.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.User = exports.Group = void 0;\n__exportStar(require(\"./Group\"), exports);\nconst Group_1 = __importDefault(require(\"./Group\"));\nexports.Group = Group_1.default;\n__exportStar(require(\"./helpers\"), exports);\n__exportStar(require(\"./User\"), exports);\nconst User_1 = __importDefault(require(\"./User\"));\nexports.User = User_1.default;\n//# sourceMappingURL=index.js.map","module.exports = __WEBPACK_EXTERNAL_MODULE__935__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(509);\n"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE__935__","Object","defineProperty","value","client_1","Group","Entity","constructor","super","$data","enabled","abilities","guid","factorySync","$checkGroupname","$serverCall","$checkEmail","$getAvatar","$getChildren","$getDescendants","andSelf","$getLevel","$isDescendant","givenGroup","getPrimaryGroups","options","selectors","serverCallStatic","class","getSecondaryGroups","currentToken","User","init","nymph","store","registerCallbacks","loginCallbacks","logoutCallbacks","stores","has","storeVal","get","set","removeNymphResponseListener","on","response","handleToken","groups","inheritAbilities","factoryUsername","username","entity","getEntity","type","ilike","replace","s","$checkUsername","$checkPhone","$register","data","$nymph","Error","result","i","length","loggedin","$switchUser","$logout","$gatekeeper","ability","$changePassword","$revokeCurrentTokens","$hasTOTPSecret","$getNewTOTPSecret","$saveTOTPSecret","$removeTOTPSecret","current","returnObjectIfNotExist","currentUser","loginUser","user","sendRecovery","recover","getClientConfig","clientConfig","clientConfigPromise","then","config","undefined","token","switchToken","authCookiePattern","switchCookiePattern","headers","document","cookie","match","pubsub","authenticate","base64","split","json","atob","Buffer","from","toString","jwt","JSON","parse","xsrfToken","event","callback","prop","push","off","indexOf","splice","WeakMap","checkUsername","register","login","NeedTOTPError","async","password","code","additionalData","needTOTP","message","e","userDetails","usernameVerified","password2","regFields","includes","emailUsernames","email","nameFirst","nameLast","phone","__createBinding","create","o","m","k","k2","desc","getOwnPropertyDescriptor","__esModule","writable","configurable","enumerable","__exportStar","p","prototype","hasOwnProperty","call","__importDefault","mod","Group_1","default","User_1","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""}
package/lib/Group.d.ts CHANGED
@@ -2,19 +2,55 @@ import { Entity, Options, Selector } from '@nymphjs/client';
2
2
  import type User from './User';
3
3
  import type { CurrentUserData } from './User';
4
4
  export type GroupData = {
5
+ /**
6
+ * The group's groupname.
7
+ */
5
8
  groupname?: string;
9
+ /**
10
+ * The group's name.
11
+ */
6
12
  name?: string;
13
+ /**
14
+ * The group's avatar URL. (Use getAvatar() to support Gravatar.)
15
+ */
7
16
  avatar?: string;
17
+ /**
18
+ * The group's parent.
19
+ */
8
20
  parent?: Group & GroupData;
21
+ /**
22
+ * Whether the group can be used.
23
+ */
9
24
  enabled?: boolean;
25
+ /**
26
+ * Whether this group is the default primary group for new users.
27
+ */
10
28
  defaultPrimary?: boolean;
29
+ /**
30
+ * Whether this group is a default secondary group for new users.
31
+ */
11
32
  defaultSecondary?: boolean;
33
+ /**
34
+ * Whether this group is a default secondary group for unverified users.
35
+ */
12
36
  unverifiedSecondary?: boolean;
13
37
  };
14
38
  export type CurrentGroupData = GroupData & {
39
+ /**
40
+ * The abilities granted to the group.
41
+ */
15
42
  abilities?: string[];
43
+ /**
44
+ * The group's email address.
45
+ */
16
46
  email?: string;
47
+ /**
48
+ * The group's telephone number.
49
+ */
17
50
  phone?: string;
51
+ /**
52
+ * If generatePrimary is on, this will be the user who generated this group.
53
+ */
18
54
  user?: (User & CurrentUserData) | null;
19
55
  };
20
56
  export type AdminGroupData = CurrentGroupData;
package/lib/Group.js CHANGED
@@ -47,6 +47,7 @@ class Group extends client_1.Entity {
47
47
  ]);
48
48
  }
49
49
  }
50
+ // The name of the server class
50
51
  Group.class = 'Group';
51
52
  exports.default = Group;
52
53
  //# sourceMappingURL=Group.js.map
package/lib/Group.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Group.js","sourceRoot":"","sources":["../src/Group.ts"],"names":[],"mappings":";;AAAA,4CAA4D;AA8D5D,MAAqB,KAAM,SAAQ,eAAiB;IAIlD;QACE,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,KAA0B,CAAC,SAAS,GAAG,EAAE,CAAC;IAClD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAa;QAChC,OAAO,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAsB,CAAC;IAC1D,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,OAAO,KAAK,CAAC,WAAW,EAAuB,CAAC;IAClD,CAAC;IAEM,KAAK,CAAC,eAAe;QAI1B,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAEM,KAAK,CAAC,WAAW;QACtB,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC;IAEM,KAAK,CAAC,UAAU;QACrB,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;IAEM,KAAK,CAAC,YAAY;QACvB,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC;IAEM,KAAK,CAAC,eAAe,CAC1B,OAAO,GAAG,KAAK;QAEf,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;IACpE,CAAC;IAEM,KAAK,CAAC,SAAS;QACpB,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;IAEM,KAAK,CAAC,aAAa,CACxB,UAAwC;QAExC,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC;IACrE,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAClC,OAAiB,EACjB,SAAsB;QAEtB,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE;YACrD,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;YAC9B,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,kBAAkB,CACpC,OAAiB,EACjB,SAAsB;QAEtB,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,EAAE;YACvD,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;YAC9B,SAAS;SACV,CAAC,CAAC;IACL,CAAC;;AAtEa,WAAK,GAAG,OAAO,CAAC;kBAFX,KAAK"}
1
+ {"version":3,"file":"Group.js","sourceRoot":"","sources":["../src/Group.ts"],"names":[],"mappings":";;AAAA,4CAA4D;AA8D5D,MAAqB,KAAM,SAAQ,eAAiB;IAIlD;QACE,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,KAA0B,CAAC,SAAS,GAAG,EAAE,CAAC;IAClD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAa;QAChC,OAAO,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAsB,CAAC;IAC1D,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,OAAO,KAAK,CAAC,WAAW,EAAuB,CAAC;IAClD,CAAC;IAEM,KAAK,CAAC,eAAe;QAI1B,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAEM,KAAK,CAAC,WAAW;QACtB,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC;IAEM,KAAK,CAAC,UAAU;QACrB,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;IAEM,KAAK,CAAC,YAAY;QACvB,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC;IAEM,KAAK,CAAC,eAAe,CAC1B,OAAO,GAAG,KAAK;QAEf,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;IACpE,CAAC;IAEM,KAAK,CAAC,SAAS;QACpB,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;IAEM,KAAK,CAAC,aAAa,CACxB,UAAwC;QAExC,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC;IACrE,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAClC,OAAiB,EACjB,SAAsB;QAEtB,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE;YACrD,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;YAC9B,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,kBAAkB,CACpC,OAAiB,EACjB,SAAsB;QAEtB,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,EAAE;YACvD,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;YAC9B,SAAS;SACV,CAAC,CAAC;IACL,CAAC;;AAvED,+BAA+B;AACjB,WAAK,GAAG,OAAO,CAAC;kBAFX,KAAK"}
package/lib/User.d.ts CHANGED
@@ -16,35 +16,115 @@ export type ClientConfig = {
16
16
  unverifiedAccess: boolean;
17
17
  };
18
18
  export type UserData = {
19
+ /**
20
+ * The user's username.
21
+ */
19
22
  username?: string;
23
+ /**
24
+ * The user's first name.
25
+ */
20
26
  nameFirst?: string;
27
+ /**
28
+ * The user's middle name.
29
+ */
21
30
  nameMiddle?: string;
31
+ /**
32
+ * The user's last name.
33
+ */
22
34
  nameLast?: string;
35
+ /**
36
+ * The user's full name.
37
+ */
23
38
  name?: string;
39
+ /**
40
+ * The user's avatar URL. (Use $getAvatar() to support Gravatar.)
41
+ */
24
42
  avatar?: string;
43
+ /**
44
+ * Whether the user can log in.
45
+ */
25
46
  enabled?: boolean;
26
47
  };
27
48
  export type CurrentUserData = UserData & {
49
+ /**
50
+ * The abilities granted to the user.
51
+ */
28
52
  abilities?: string[];
53
+ /**
54
+ * The user's email address.
55
+ */
29
56
  email?: string;
57
+ /**
58
+ * The user's telephone number.
59
+ */
30
60
  phone?: string;
61
+ /**
62
+ * The user's primary group.
63
+ */
31
64
  group?: Group & CurrentGroupData;
65
+ /**
66
+ * The user's secondary groups.
67
+ */
32
68
  groups?: (Group & CurrentGroupData)[];
69
+ /**
70
+ * Whether the user should inherit the abilities of his groups.
71
+ */
33
72
  inheritAbilities?: boolean;
73
+ /**
74
+ * If the user has changed their email address, this is the new one, awaiting
75
+ * verification.
76
+ */
34
77
  newEmailAddress?: string;
35
78
  };
36
79
  export type AdminUserData = CurrentUserData & {
80
+ /**
81
+ * The user's primary group.
82
+ */
37
83
  group?: Group & AdminGroupData;
84
+ /**
85
+ * The user's secondary groups.
86
+ */
38
87
  groups?: (Group & AdminGroupData)[];
88
+ /**
89
+ * A verification secret.
90
+ */
39
91
  secret?: string;
92
+ /**
93
+ * The timestamp of when the email address was last changed.
94
+ */
40
95
  emailChangeDate?: number;
96
+ /**
97
+ * An email change proceed secret.
98
+ */
41
99
  newEmailSecret?: string;
100
+ /**
101
+ * The new email address.
102
+ */
42
103
  newEmailAddress?: string;
104
+ /**
105
+ * An email change cancellation secret.
106
+ */
43
107
  cancelEmailSecret?: string;
108
+ /**
109
+ * The old email address.
110
+ */
44
111
  cancelEmailAddress?: string;
112
+ /**
113
+ * A recovery secret.
114
+ */
45
115
  recoverSecret?: string;
116
+ /**
117
+ * The timestamp of when the recovery secret was issued.
118
+ */
46
119
  recoverSecretDate?: number;
120
+ /**
121
+ * Used by admins to change a user's password. Not saved to the database.
122
+ */
47
123
  passwordTemp?: string;
124
+ /**
125
+ * If set, this timestamp is the cutoff point for JWT issue dates. Any token
126
+ * issued before this date will not authenticate the user.
127
+ */
48
128
  revokeTokenDate?: number;
49
129
  };
50
130
  type InstanceStore = {
package/lib/User.js CHANGED
@@ -196,9 +196,9 @@ class User extends client_1.Entity {
196
196
  if (currentToken !== token) {
197
197
  if (token == null || token === '') {
198
198
  if (currentToken != null) {
199
- this.nymph.setXsrfToken(null);
199
+ delete this.nymph.headers['X-Xsrf-Token'];
200
200
  if (this.nymph.pubsub) {
201
- this.nymph.pubsub.setToken(null);
201
+ this.nymph.pubsub.authenticate(null);
202
202
  }
203
203
  currentToken = null;
204
204
  }
@@ -207,12 +207,12 @@ class User extends client_1.Entity {
207
207
  const base64Url = token.split('.')[1];
208
208
  const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
209
209
  const json = typeof atob === 'undefined'
210
- ? Buffer.from(base64, 'base64').toString('binary')
211
- : atob(base64);
210
+ ? Buffer.from(base64, 'base64').toString('binary') // node
211
+ : atob(base64); // browser
212
212
  const jwt = JSON.parse(json);
213
- this.nymph.setXsrfToken(jwt.xsrfToken);
213
+ this.nymph.headers['X-Xsrf-Token'] = jwt.xsrfToken;
214
214
  if (this.nymph.pubsub) {
215
- this.nymph.pubsub.setToken(token, switchToken);
215
+ this.nymph.pubsub.authenticate(token, switchToken);
216
216
  }
217
217
  currentToken = token;
218
218
  }
@@ -227,6 +227,7 @@ class User extends client_1.Entity {
227
227
  if (!(prop in store)) {
228
228
  throw new Error('Invalid event type.');
229
229
  }
230
+ // @ts-ignore: The callback should always be the right type here.
230
231
  store[prop].push(callback);
231
232
  return () => this.off(event, callback);
232
233
  }
@@ -239,14 +240,17 @@ class User extends client_1.Entity {
239
240
  if (!(prop in store)) {
240
241
  return false;
241
242
  }
243
+ // @ts-ignore: The callback should always be the right type here.
242
244
  const i = store[prop].indexOf(callback);
243
245
  if (i > -1) {
246
+ // @ts-ignore: The callback should always be the right type here.
244
247
  store[prop].splice(i, 1);
245
248
  }
246
249
  return true;
247
250
  }
248
251
  }
249
252
  User.stores = new WeakMap();
253
+ // The name of the server class
250
254
  User.class = 'User';
251
255
  exports.default = User;
252
256
  //# sourceMappingURL=User.js.map
package/lib/User.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"User.js","sourceRoot":"","sources":["../src/User.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"User.js","sourceRoot":"","sources":["../src/User.ts"],"names":[],"mappings":"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"}
package/lib/helpers.d.ts CHANGED
@@ -1,14 +1,41 @@
1
1
  import type UserClass from './User';
2
2
  import type { ClientConfig, CurrentUserData } from './User';
3
3
  export type RegistrationDetails = {
4
+ /**
5
+ * New user's username.
6
+ */
4
7
  username: string;
8
+ /**
9
+ * New user's password.
10
+ */
5
11
  password: string;
12
+ /**
13
+ * Repeat the password.
14
+ */
6
15
  password2: string;
16
+ /**
17
+ * Whether the username passed verification.
18
+ */
7
19
  usernameVerified: boolean;
20
+ /**
21
+ * The new user's email address.
22
+ */
8
23
  email?: string;
24
+ /**
25
+ * The new user's given name.
26
+ */
9
27
  nameFirst?: string;
28
+ /**
29
+ * The new user's surname.
30
+ */
10
31
  nameLast?: string;
32
+ /**
33
+ * The new user's phone number.
34
+ */
11
35
  phone?: string;
36
+ /**
37
+ * Additional data to be included in the request.
38
+ */
12
39
  additionalData?: {
13
40
  [k: string]: any;
14
41
  };
package/lib/helpers.js CHANGED
@@ -47,6 +47,7 @@ async function register(User, userDetails, clientConfig) {
47
47
  if (userDetails.password === '') {
48
48
  throw new Error('You need to enter a password');
49
49
  }
50
+ // Create a new user.
50
51
  let user = User.factorySync();
51
52
  user.username = userDetails.username;
52
53
  const config = clientConfig || (await User.getClientConfig());
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,243 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const express_1 = __importDefault(require("express"));
7
+ const driver_sqlite3_1 = __importDefault(require("@nymphjs/driver-sqlite3"));
8
+ const nymph_1 = require("@nymphjs/nymph");
9
+ const client_node_1 = require("@nymphjs/client-node");
10
+ const tilmeld_1 = require("@nymphjs/tilmeld");
11
+ const server_1 = __importDefault(require("@nymphjs/server"));
12
+ const index_1 = require("./index");
13
+ describe('Tilmeld Client', () => {
14
+ let server = undefined;
15
+ afterEach(() => {
16
+ if (server) {
17
+ server.close(); // avoid jest open handle error
18
+ }
19
+ });
20
+ function createNymphTilmeldServer(config, clientConfig) {
21
+ const sqliteConfig = {
22
+ filename: ':memory:',
23
+ };
24
+ const tilmeld = new tilmeld_1.Tilmeld({
25
+ jwtSecret: 'supersecrettestingsecret',
26
+ allowRegistration: true,
27
+ verifyEmail: false,
28
+ emailUsernames: false,
29
+ ...config,
30
+ });
31
+ const nymphServer = new nymph_1.Nymph({}, new driver_sqlite3_1.default(sqliteConfig), tilmeld);
32
+ const UserModel = nymphServer.addEntityClass(tilmeld_1.User);
33
+ const GroupModel = nymphServer.addEntityClass(tilmeld_1.Group);
34
+ const app = (0, express_1.default)();
35
+ app.use('/test', (0, server_1.default)(nymphServer));
36
+ server = app.listen(5084);
37
+ const nymph = new client_node_1.Nymph({
38
+ restUrl: 'http://localhost:5084/test/',
39
+ ...(clientConfig ?? {}),
40
+ });
41
+ const User = nymph.addEntityClass(index_1.User);
42
+ User.init(nymph);
43
+ const Group = nymph.addEntityClass(index_1.Group);
44
+ return {
45
+ tilmeld,
46
+ nymphServer,
47
+ UserModel,
48
+ GroupModel,
49
+ app,
50
+ nymph,
51
+ User,
52
+ Group,
53
+ };
54
+ }
55
+ async function createAdmin(User) {
56
+ const admin = User.factorySync();
57
+ admin.username = 'admin';
58
+ admin.email = 'root@localhost';
59
+ admin.nameFirst = 'Admin';
60
+ admin.nameLast = 'User';
61
+ const result = await admin.$register({
62
+ password: 'supersecretadminpassword',
63
+ });
64
+ return { result, admin };
65
+ }
66
+ async function createUser(User) {
67
+ const user = User.factorySync();
68
+ user.username = 'user';
69
+ user.email = 'user@localhost';
70
+ user.nameFirst = 'Some';
71
+ user.nameLast = 'User';
72
+ const result = await user.$register({
73
+ password: 'supersecretuserpassword',
74
+ });
75
+ return { result, user };
76
+ }
77
+ it('get client config', async () => {
78
+ const { User } = createNymphTilmeldServer();
79
+ const result = await User.getClientConfig();
80
+ expect(result).not.toBeNull();
81
+ expect(result.verifyEmail).toBeFalsy();
82
+ });
83
+ it('produce errors when register data is incorrect', async () => {
84
+ const { User } = createNymphTilmeldServer();
85
+ try {
86
+ const admin = User.factorySync();
87
+ let result = await admin.$register({
88
+ password: 'supersecretadminpassword',
89
+ });
90
+ expect(result.result).toBeFalsy();
91
+ expect(result.loggedin).toBeFalsy();
92
+ expect(result.message).toEqual('Please specify a username.');
93
+ expect(admin.guid).toBeNull();
94
+ admin.username = 'admin';
95
+ try {
96
+ expect((result = await admin.$register({
97
+ password: 'supersecretadminpassword',
98
+ }))).toThrow();
99
+ }
100
+ catch (e) {
101
+ expect(e.status).toEqual(400);
102
+ expect(e.message).toEqual('Please specify a valid email.');
103
+ }
104
+ admin.email = 'root@localhost';
105
+ try {
106
+ expect((result = await admin.$register({
107
+ password: 'supersecretadminpassword',
108
+ }))).toThrow();
109
+ }
110
+ catch (e) {
111
+ expect(e.status).toEqual(400);
112
+ expect(e.message).toEqual('Invalid User: "nameFirst" is required');
113
+ }
114
+ expect(admin.guid).toBeNull();
115
+ }
116
+ catch (e) {
117
+ console.error('Error creating admin: ', e);
118
+ throw e;
119
+ }
120
+ });
121
+ it('create admin user', async () => {
122
+ const { User } = createNymphTilmeldServer();
123
+ try {
124
+ const { result, admin } = await createAdmin(User);
125
+ expect(result.result).toBeTruthy();
126
+ expect(result.loggedin).toBeTruthy();
127
+ expect(result.message).toEqual("You're now registered and logged in!");
128
+ expect(admin.guid).not.toBeNull();
129
+ expect(typeof admin.guid).toEqual('string');
130
+ const permission = await admin.$gatekeeper('system/admin');
131
+ expect(permission).toBeTruthy();
132
+ }
133
+ catch (e) {
134
+ console.error('Error creating admin: ', e);
135
+ throw e;
136
+ }
137
+ });
138
+ it('logout', async () => {
139
+ const { User } = createNymphTilmeldServer();
140
+ try {
141
+ const { admin } = await createAdmin(User);
142
+ const user1 = await User.current();
143
+ expect(user1?.guid).toEqual(admin.guid);
144
+ expect((await admin.$logout()).result).toBeTruthy();
145
+ const user2 = await User.current();
146
+ expect(user2).toBeNull();
147
+ }
148
+ catch (e) {
149
+ console.error('Error running test: ', e);
150
+ throw e;
151
+ }
152
+ });
153
+ it('second user', async () => {
154
+ const { User } = createNymphTilmeldServer();
155
+ try {
156
+ const { admin } = await createAdmin(User);
157
+ expect((await admin.$logout()).result).toBeTruthy();
158
+ const { result, user } = await createUser(User);
159
+ expect(result.result).toBeTruthy();
160
+ expect(result.loggedin).toBeTruthy();
161
+ expect(result.message).toEqual("You're now registered and logged in!");
162
+ expect(user.guid).not.toBeNull();
163
+ expect(typeof user.guid).toEqual('string');
164
+ const permission = await user.$gatekeeper('system/admin');
165
+ expect(permission).toBeFalsy();
166
+ }
167
+ catch (e) {
168
+ console.error('Error running test: ', e);
169
+ throw e;
170
+ }
171
+ });
172
+ it("doesn't issue renewed token when not needed", async () => {
173
+ const { User, nymph } = createNymphTilmeldServer({
174
+ jwtExpire: 5,
175
+ jwtRenew: 0,
176
+ });
177
+ let responses = 0;
178
+ nymph.on('response', (response) => {
179
+ if (responses === 0) {
180
+ expect(response.headers.get('set-cookie')).toMatch(/^TILMELDAUTH=[^;]+; Max-Age=5; Domain=localhost; Path=\/; Expires=[^;]+; SameSite=Strict$/);
181
+ }
182
+ else {
183
+ expect(response.headers.has('set-cookie')).toBeFalsy();
184
+ }
185
+ responses++;
186
+ });
187
+ try {
188
+ const { admin } = await createAdmin(User);
189
+ expect(await admin.$gatekeeper()).toBeTruthy();
190
+ expect(responses).toEqual(2);
191
+ }
192
+ catch (e) {
193
+ console.error('Error running test: ', e);
194
+ throw e;
195
+ }
196
+ });
197
+ it('issues renewed token when needed', async () => {
198
+ const { User, nymph } = createNymphTilmeldServer({
199
+ jwtExpire: 5,
200
+ jwtRenew: 5,
201
+ });
202
+ let responses = 0;
203
+ nymph.on('response', (response) => {
204
+ expect(response.headers.get('set-cookie')).toMatch(/^TILMELDAUTH=[^;]+; Max-Age=5; Domain=localhost; Path=\/; Expires=[^;]+; SameSite=Strict$/);
205
+ responses++;
206
+ });
207
+ try {
208
+ const { admin } = await createAdmin(User);
209
+ expect(await admin.$gatekeeper()).toBeTruthy();
210
+ expect(responses).toEqual(2);
211
+ }
212
+ catch (e) {
213
+ console.error('Error running test: ', e);
214
+ throw e;
215
+ }
216
+ });
217
+ it("doesn't issue renewed token when requested", async () => {
218
+ const { User, nymph } = createNymphTilmeldServer({
219
+ jwtExpire: 5,
220
+ jwtRenew: 5,
221
+ }, { renewTokens: false });
222
+ let responses = 0;
223
+ nymph.on('response', (response) => {
224
+ if (responses === 0) {
225
+ expect(response.headers.get('set-cookie')).toMatch(/^TILMELDAUTH=[^;]+; Max-Age=5; Domain=localhost; Path=\/; Expires=[^;]+; SameSite=Strict$/);
226
+ }
227
+ else {
228
+ expect(response.headers.has('set-cookie')).toBeFalsy();
229
+ }
230
+ responses++;
231
+ });
232
+ try {
233
+ const { admin } = await createAdmin(User);
234
+ expect(await admin.$gatekeeper()).toBeTruthy();
235
+ expect(responses).toEqual(2);
236
+ }
237
+ catch (e) {
238
+ console.error('Error running test: ', e);
239
+ throw e;
240
+ }
241
+ });
242
+ });
243
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nymphjs/tilmeld-client",
3
- "version": "1.0.0-beta.55",
3
+ "version": "1.0.0-beta.57",
4
4
  "description": "Nymph.js - Tilmeld Client",
5
5
  "browser": "dist/index.js",
6
6
  "main": "lib/index.js",
@@ -36,6 +36,11 @@
36
36
  },
37
37
  "license": "Apache-2.0",
38
38
  "devDependencies": {
39
+ "@nymphjs/client-node": "^1.0.0-beta.57",
40
+ "@nymphjs/driver-sqlite3": "^1.0.0-beta.57",
41
+ "@nymphjs/nymph": "^1.0.0-beta.57",
42
+ "@nymphjs/server": "^1.0.0-beta.57",
43
+ "@nymphjs/tilmeld": "^1.0.0-beta.57",
39
44
  "@tsconfig/recommended": "^1.0.3",
40
45
  "@types/jest": "^29.5.12",
41
46
  "jest": "^29.7.0",
@@ -46,7 +51,7 @@
46
51
  "webpack-cli": "^5.1.4"
47
52
  },
48
53
  "dependencies": {
49
- "@nymphjs/client": "^1.0.0-beta.55"
54
+ "@nymphjs/client": "^1.0.0-beta.57"
50
55
  },
51
- "gitHead": "452a8744e000a1f1a68cb2f1e6b6f1c0253df0f6"
56
+ "gitHead": "607f647fe16fb04c9b661bd872cc6cda53b0f530"
52
57
  }
package/src/User.ts CHANGED
@@ -458,9 +458,9 @@ export default class User extends Entity<UserData> {
458
458
  if (currentToken !== token) {
459
459
  if (token == null || token === '') {
460
460
  if (currentToken != null) {
461
- this.nymph.setXsrfToken(null);
461
+ delete this.nymph.headers['X-Xsrf-Token'];
462
462
  if (this.nymph.pubsub) {
463
- this.nymph.pubsub.setToken(null);
463
+ this.nymph.pubsub.authenticate(null);
464
464
  }
465
465
  currentToken = null;
466
466
  }
@@ -472,9 +472,9 @@ export default class User extends Entity<UserData> {
472
472
  ? Buffer.from(base64, 'base64').toString('binary') // node
473
473
  : atob(base64); // browser
474
474
  const jwt = JSON.parse(json);
475
- this.nymph.setXsrfToken(jwt.xsrfToken);
475
+ this.nymph.headers['X-Xsrf-Token'] = jwt.xsrfToken;
476
476
  if (this.nymph.pubsub) {
477
- this.nymph.pubsub.setToken(token, switchToken);
477
+ this.nymph.pubsub.authenticate(token, switchToken);
478
478
  }
479
479
  currentToken = token;
480
480
  }
@@ -0,0 +1,319 @@
1
+ import { type Server } from 'node:http';
2
+ import express from 'express';
3
+ import SQLite3Driver from '@nymphjs/driver-sqlite3';
4
+ import { Nymph as NymphServer } from '@nymphjs/nymph';
5
+ import { Nymph } from '@nymphjs/client-node';
6
+ import { type NymphOptions } from '@nymphjs/client';
7
+ import {
8
+ Tilmeld,
9
+ type Config as TilmeldConfig,
10
+ User as UserModelClass,
11
+ Group as GroupModelClass,
12
+ } from '@nymphjs/tilmeld';
13
+ import createServer from '@nymphjs/server';
14
+
15
+ import {
16
+ User as UserClass,
17
+ UserData,
18
+ Group as GroupClass,
19
+ CurrentUserData,
20
+ } from './index';
21
+
22
+ describe('Tilmeld Client', () => {
23
+ let server: Server | undefined = undefined;
24
+
25
+ afterEach(() => {
26
+ if (server) {
27
+ server.close(); // avoid jest open handle error
28
+ }
29
+ });
30
+
31
+ function createNymphTilmeldServer(
32
+ config?: Partial<TilmeldConfig>,
33
+ clientConfig?: Partial<NymphOptions>,
34
+ ) {
35
+ const sqliteConfig = {
36
+ filename: ':memory:',
37
+ };
38
+
39
+ const tilmeld = new Tilmeld({
40
+ jwtSecret: 'supersecrettestingsecret',
41
+ allowRegistration: true,
42
+ verifyEmail: false,
43
+ emailUsernames: false,
44
+ ...config,
45
+ });
46
+ const nymphServer = new NymphServer(
47
+ {},
48
+ new SQLite3Driver(sqliteConfig),
49
+ tilmeld,
50
+ );
51
+ const UserModel = nymphServer.addEntityClass(UserModelClass);
52
+ const GroupModel = nymphServer.addEntityClass(GroupModelClass);
53
+
54
+ const app = express();
55
+ app.use('/test', createServer(nymphServer));
56
+ server = app.listen(5084);
57
+
58
+ const nymph = new Nymph({
59
+ restUrl: 'http://localhost:5084/test/',
60
+ ...(clientConfig ?? {}),
61
+ });
62
+ const User = nymph.addEntityClass(UserClass);
63
+ User.init(nymph);
64
+ const Group = nymph.addEntityClass(GroupClass);
65
+
66
+ return {
67
+ tilmeld,
68
+ nymphServer,
69
+ UserModel,
70
+ GroupModel,
71
+ app,
72
+ nymph,
73
+ User,
74
+ Group,
75
+ };
76
+ }
77
+
78
+ async function createAdmin(User: typeof UserClass) {
79
+ const admin = User.factorySync() as UserClass & UserData & CurrentUserData;
80
+ admin.username = 'admin';
81
+ admin.email = 'root@localhost';
82
+ admin.nameFirst = 'Admin';
83
+ admin.nameLast = 'User';
84
+
85
+ const result = await admin.$register({
86
+ password: 'supersecretadminpassword',
87
+ });
88
+
89
+ return { result, admin };
90
+ }
91
+
92
+ async function createUser(User: typeof UserClass) {
93
+ const user = User.factorySync() as UserClass & UserData & CurrentUserData;
94
+ user.username = 'user';
95
+ user.email = 'user@localhost';
96
+ user.nameFirst = 'Some';
97
+ user.nameLast = 'User';
98
+
99
+ const result = await user.$register({
100
+ password: 'supersecretuserpassword',
101
+ });
102
+
103
+ return { result, user };
104
+ }
105
+
106
+ it('get client config', async () => {
107
+ const { User } = createNymphTilmeldServer();
108
+
109
+ const result = await User.getClientConfig();
110
+
111
+ expect(result).not.toBeNull();
112
+ expect(result.verifyEmail).toBeFalsy();
113
+ });
114
+
115
+ it('produce errors when register data is incorrect', async () => {
116
+ const { User } = createNymphTilmeldServer();
117
+
118
+ try {
119
+ const admin = User.factorySync() as UserClass &
120
+ UserData &
121
+ CurrentUserData;
122
+
123
+ let result = await admin.$register({
124
+ password: 'supersecretadminpassword',
125
+ });
126
+
127
+ expect(result.result).toBeFalsy();
128
+ expect(result.loggedin).toBeFalsy();
129
+ expect(result.message).toEqual('Please specify a username.');
130
+ expect(admin.guid).toBeNull();
131
+
132
+ admin.username = 'admin';
133
+ try {
134
+ expect(
135
+ (result = await admin.$register({
136
+ password: 'supersecretadminpassword',
137
+ })),
138
+ ).toThrow();
139
+ } catch (e: any) {
140
+ expect(e.status).toEqual(400);
141
+ expect(e.message).toEqual('Please specify a valid email.');
142
+ }
143
+
144
+ admin.email = 'root@localhost';
145
+ try {
146
+ expect(
147
+ (result = await admin.$register({
148
+ password: 'supersecretadminpassword',
149
+ })),
150
+ ).toThrow();
151
+ } catch (e: any) {
152
+ expect(e.status).toEqual(400);
153
+ expect(e.message).toEqual('Invalid User: "nameFirst" is required');
154
+ }
155
+
156
+ expect(admin.guid).toBeNull();
157
+ } catch (e: any) {
158
+ console.error('Error creating admin: ', e);
159
+ throw e;
160
+ }
161
+ });
162
+
163
+ it('create admin user', async () => {
164
+ const { User } = createNymphTilmeldServer();
165
+
166
+ try {
167
+ const { result, admin } = await createAdmin(User);
168
+
169
+ expect(result.result).toBeTruthy();
170
+ expect(result.loggedin).toBeTruthy();
171
+ expect(result.message).toEqual("You're now registered and logged in!");
172
+
173
+ expect(admin.guid).not.toBeNull();
174
+ expect(typeof admin.guid).toEqual('string');
175
+
176
+ const permission = await admin.$gatekeeper('system/admin');
177
+
178
+ expect(permission).toBeTruthy();
179
+ } catch (e: any) {
180
+ console.error('Error creating admin: ', e);
181
+ throw e;
182
+ }
183
+ });
184
+
185
+ it('logout', async () => {
186
+ const { User } = createNymphTilmeldServer();
187
+
188
+ try {
189
+ const { admin } = await createAdmin(User);
190
+
191
+ const user1 = await User.current();
192
+
193
+ expect(user1?.guid).toEqual(admin.guid);
194
+
195
+ expect((await admin.$logout()).result).toBeTruthy();
196
+
197
+ const user2 = await User.current();
198
+
199
+ expect(user2).toBeNull();
200
+ } catch (e: any) {
201
+ console.error('Error running test: ', e);
202
+ throw e;
203
+ }
204
+ });
205
+
206
+ it('second user', async () => {
207
+ const { User } = createNymphTilmeldServer();
208
+
209
+ try {
210
+ const { admin } = await createAdmin(User);
211
+ expect((await admin.$logout()).result).toBeTruthy();
212
+
213
+ const { result, user } = await createUser(User);
214
+
215
+ expect(result.result).toBeTruthy();
216
+ expect(result.loggedin).toBeTruthy();
217
+ expect(result.message).toEqual("You're now registered and logged in!");
218
+
219
+ expect(user.guid).not.toBeNull();
220
+ expect(typeof user.guid).toEqual('string');
221
+
222
+ const permission = await user.$gatekeeper('system/admin');
223
+
224
+ expect(permission).toBeFalsy();
225
+ } catch (e: any) {
226
+ console.error('Error running test: ', e);
227
+ throw e;
228
+ }
229
+ });
230
+
231
+ it("doesn't issue renewed token when not needed", async () => {
232
+ const { User, nymph } = createNymphTilmeldServer({
233
+ jwtExpire: 5,
234
+ jwtRenew: 0,
235
+ });
236
+
237
+ let responses = 0;
238
+ nymph.on('response', (response) => {
239
+ if (responses === 0) {
240
+ expect(response.headers.get('set-cookie')).toMatch(
241
+ /^TILMELDAUTH=[^;]+; Max-Age=5; Domain=localhost; Path=\/; Expires=[^;]+; SameSite=Strict$/,
242
+ );
243
+ } else {
244
+ expect(response.headers.has('set-cookie')).toBeFalsy();
245
+ }
246
+ responses++;
247
+ });
248
+
249
+ try {
250
+ const { admin } = await createAdmin(User);
251
+
252
+ expect(await admin.$gatekeeper()).toBeTruthy();
253
+
254
+ expect(responses).toEqual(2);
255
+ } catch (e: any) {
256
+ console.error('Error running test: ', e);
257
+ throw e;
258
+ }
259
+ });
260
+
261
+ it('issues renewed token when needed', async () => {
262
+ const { User, nymph } = createNymphTilmeldServer({
263
+ jwtExpire: 5,
264
+ jwtRenew: 5,
265
+ });
266
+
267
+ let responses = 0;
268
+ nymph.on('response', (response) => {
269
+ expect(response.headers.get('set-cookie')).toMatch(
270
+ /^TILMELDAUTH=[^;]+; Max-Age=5; Domain=localhost; Path=\/; Expires=[^;]+; SameSite=Strict$/,
271
+ );
272
+ responses++;
273
+ });
274
+
275
+ try {
276
+ const { admin } = await createAdmin(User);
277
+
278
+ expect(await admin.$gatekeeper()).toBeTruthy();
279
+
280
+ expect(responses).toEqual(2);
281
+ } catch (e: any) {
282
+ console.error('Error running test: ', e);
283
+ throw e;
284
+ }
285
+ });
286
+
287
+ it("doesn't issue renewed token when requested", async () => {
288
+ const { User, nymph } = createNymphTilmeldServer(
289
+ {
290
+ jwtExpire: 5,
291
+ jwtRenew: 5,
292
+ },
293
+ { renewTokens: false },
294
+ );
295
+
296
+ let responses = 0;
297
+ nymph.on('response', (response) => {
298
+ if (responses === 0) {
299
+ expect(response.headers.get('set-cookie')).toMatch(
300
+ /^TILMELDAUTH=[^;]+; Max-Age=5; Domain=localhost; Path=\/; Expires=[^;]+; SameSite=Strict$/,
301
+ );
302
+ } else {
303
+ expect(response.headers.has('set-cookie')).toBeFalsy();
304
+ }
305
+ responses++;
306
+ });
307
+
308
+ try {
309
+ const { admin } = await createAdmin(User);
310
+
311
+ expect(await admin.$gatekeeper()).toBeTruthy();
312
+
313
+ expect(responses).toEqual(2);
314
+ } catch (e: any) {
315
+ console.error('Error running test: ', e);
316
+ throw e;
317
+ }
318
+ });
319
+ });
package/tsconfig.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "lib": ["DOM", "ES2021"],
6
6
  "target": "ES2021",
7
7
  "noImplicitAny": true,
8
- "removeComments": true,
8
+ "removeComments": false,
9
9
  "sourceMap": true,
10
10
  "outDir": "lib",
11
11
  "resolveJsonModule": true,