@companieshouse/ch-node-utils 1.3.10 → 1.3.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -106,7 +106,7 @@ The macro requires the following parameters:
106
106
  - `userEmailAddress`: The email address of the logged-in user
107
107
  - `chsMonitorGuiUrl`: The URL for the "Companies you follow" link
108
108
  - `lang`: An object containing language-specific strings for localization
109
- - `displayAuthorisedAgent`: A flag for displaying the "Authorised agent" menu item. If the logged user has ACSP membership, this flag should be set to `'yes'`
109
+ - `displayAuthorisedAgent`: A flag for displaying the "Authorised agent" menu item. If the logged user has ACSP membership, this flag should be set to `'yes'`. If your service uses i18 middleware provided in the `@companieshouse/ch-node-utils` package, then this flag will be set to the correct value automatically. If not, you can use `isAuthorisedAgent` function from `./utils/sessionUtils`.
110
110
 
111
111
  #### Localization
112
112
 
@@ -2,3 +2,4 @@ export declare const QUERY_PAR_LANG = "lang";
2
2
  export declare const NODE_MODULES_LOCALES_PATH = "node_modules/@companieshouse/ch-node-utils/locales";
3
3
  export declare const SHARED_NAVBAR_NAMESPACE = "ch-node-utils-navbar";
4
4
  export declare const SHARED_NUNJUCKS_TRANSLATION_NAMESPACES: Set<string>;
5
+ export declare const ACSP_NUMBER_REGEX: RegExp;
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SHARED_NUNJUCKS_TRANSLATION_NAMESPACES = exports.SHARED_NAVBAR_NAMESPACE = exports.NODE_MODULES_LOCALES_PATH = exports.QUERY_PAR_LANG = void 0;
3
+ exports.ACSP_NUMBER_REGEX = exports.SHARED_NUNJUCKS_TRANSLATION_NAMESPACES = exports.SHARED_NAVBAR_NAMESPACE = exports.NODE_MODULES_LOCALES_PATH = exports.QUERY_PAR_LANG = void 0;
4
4
  exports.QUERY_PAR_LANG = "lang";
5
5
  exports.NODE_MODULES_LOCALES_PATH = 'node_modules/@companieshouse/ch-node-utils/locales';
6
6
  exports.SHARED_NAVBAR_NAMESPACE = "ch-node-utils-navbar";
7
7
  exports.SHARED_NUNJUCKS_TRANSLATION_NAMESPACES = new Set([
8
8
  exports.SHARED_NAVBAR_NAMESPACE
9
9
  ]);
10
+ exports.ACSP_NUMBER_REGEX = /^[0-9A-Z-_]{0,32}$/i;
10
11
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,cAAc,GAAG,MAAM,CAAA;AACvB,QAAA,yBAAyB,GAAG,oDAAoD,CAAC;AACjF,QAAA,uBAAuB,GAAG,sBAAsB,CAAA;AAChD,QAAA,sCAAsC,GAAG,IAAI,GAAG,CAAC;IAC5D,+BAAuB;CACxB,CAAC,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,cAAc,GAAG,MAAM,CAAA;AACvB,QAAA,yBAAyB,GAAG,oDAAoD,CAAC;AACjF,QAAA,uBAAuB,GAAG,sBAAsB,CAAA;AAChD,QAAA,sCAAsC,GAAG,IAAI,GAAG,CAAC;IAC1D,+BAAuB;CAC1B,CAAC,CAAC;AACU,QAAA,iBAAiB,GAAG,qBAAqB,CAAC"}
package/lib/index.d.ts CHANGED
@@ -4,4 +4,5 @@ import i18nCh from "./utils/i18nCh";
4
4
  import LocalesService from "./services/locales/locales.service";
5
5
  import { LocalesMiddleware } from "./middleware/manageLocales.middleware";
6
6
  import { QUERY_PAR_LANG } from "./constants/constants";
7
- export { SubDirs, NamedIsoCode, LanguageNames, i18nCh, LocalesMiddleware, LocalesService, QUERY_PAR_LANG };
7
+ import { isAuthorisedAgent } from "./utils/sessionUtils";
8
+ export { SubDirs, NamedIsoCode, LanguageNames, i18nCh, LocalesMiddleware, LocalesService, QUERY_PAR_LANG, isAuthorisedAgent };
package/lib/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.QUERY_PAR_LANG = exports.LocalesService = exports.LocalesMiddleware = exports.i18nCh = exports.LanguageNames = exports.NamedIsoCode = exports.SubDirs = void 0;
3
+ exports.isAuthorisedAgent = exports.QUERY_PAR_LANG = exports.LocalesService = exports.LocalesMiddleware = exports.i18nCh = exports.LanguageNames = exports.NamedIsoCode = exports.SubDirs = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const subDirs_1 = tslib_1.__importDefault(require("./utils/subDirs"));
6
6
  exports.SubDirs = subDirs_1.default;
@@ -15,4 +15,6 @@ const manageLocales_middleware_1 = require("./middleware/manageLocales.middlewar
15
15
  Object.defineProperty(exports, "LocalesMiddleware", { enumerable: true, get: function () { return manageLocales_middleware_1.LocalesMiddleware; } });
16
16
  const constants_1 = require("./constants/constants");
17
17
  Object.defineProperty(exports, "QUERY_PAR_LANG", { enumerable: true, get: function () { return constants_1.QUERY_PAR_LANG; } });
18
+ const sessionUtils_1 = require("./utils/sessionUtils");
19
+ Object.defineProperty(exports, "isAuthorisedAgent", { enumerable: true, get: function () { return sessionUtils_1.isAuthorisedAgent; } });
18
20
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAAA,sEAAsC;AAQnC,kBARI,iBAAO,CAQJ;AAPV,+EAAkE;AAS/D,wBATI,uBAAa,CASJ;AADb,6FARoB,4BAAY,OAQpB;AAPf,oEAAoC;AASjC,iBATI,gBAAM,CASJ;AART,iGAA+D;AAU5D,yBAVI,yBAAc,CAUJ;AATjB,oFAAyE;AAQtE,kGARM,4CAAiB,OAQN;AAPpB,qDAAsD;AASnD,+FATM,0BAAc,OASN"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAAA,sEAAsC;AASlC,kBATG,iBAAO,CASH;AARX,+EAAoE;AAUhE,wBAVG,uBAAa,CAUH;AADb,6FAToB,4BAAY,OASpB;AARhB,oEAAoC;AAUhC,iBAVG,gBAAM,CAUH;AATV,iGAA+D;AAW3D,yBAXG,yBAAc,CAWH;AAVlB,oFAAyE;AASrE,kGATK,4CAAiB,OASL;AARrB,qDAAsD;AAUlD,+FAVK,0BAAc,OAUL;AATlB,uDAAyD;AAUrD,kGAVK,gCAAiB,OAUL"}
@@ -6,6 +6,7 @@ const constants_1 = require("../constants/constants");
6
6
  const locales_service_1 = tslib_1.__importDefault(require("../services/locales/locales.service"));
7
7
  const languageNames_1 = tslib_1.__importDefault(require("../utils/languageNames"));
8
8
  const log_1 = tslib_1.__importDefault(require("../utils/log"));
9
+ const sessionUtils_1 = require("../utils/sessionUtils");
9
10
  function LocalesMiddleware() {
10
11
  return (req, res, next) => {
11
12
  var _a;
@@ -34,6 +35,9 @@ function LocalesMiddleware() {
34
35
  res.locals.htmlLang = lang;
35
36
  res.locals.pageTitleLang = lang;
36
37
  res.locals.mainLang = lang;
38
+ if ((0, sessionUtils_1.isAuthorisedAgent)(req.session)) {
39
+ res.locals.displayAuthorisedAgent = "yes";
40
+ }
37
41
  return next();
38
42
  };
39
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"manageLocales.middleware.js","sourceRoot":"","sources":["../../src/middleware/manageLocales.middleware.ts"],"names":[],"mappings":";;;;AACA,sDAAuD;AACvD,kGAAiE;AACjE,mFAAoD;AACpD,+DAA+B;AAE/B,SAAgB,iBAAiB;IAC9B,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;;QAExD,IAAA,aAAG,EAAC,2CAA2C,CAAC,CAAA;QAChD,IAAI,IAAI,GAAuB,CAAS,GAAG,CAAC,KAAK,CAAC,0BAAc,CAAC;YAChC,GAAG,CAAC,IAAI,CAAC,IAAI;aACb,MAAA,GAAG,CAAC,OAAO,0CAAE,YAAY,CAAS,0BAAc,CAAC,CAAA,CAAC,CAAA;QACnF,IAAA,aAAG,EAAC,0DAA0D,IAAI,YAAY,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;QAC/F,IAAI,IAAI,KAAK,SAAS,IAAI,CAAE,uBAAa,CAAC,iBAAiB,CAAE,yBAAc,CAAC,WAAW,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC;YAC3G,IAAI,GAAG,IAAI,CAAA;QACjB,CAAC;QACD,IAAA,aAAG,EAAC,uCAAuC,IAAI,GAAG,CAAC,CAAA;QACnD,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACf,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,0BAAc,EAAE,IAAI,CAAC,CAAA;QACjD,CAAC;QACD,GAAG,CAAC,IAAI,GAAG,IAAI,CAAA;QAEf,IAAI,UAAU,GAAG,GAAG,CAAC,GAAG,CAAA;QACxB,IAAI,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,CAAC;YAInD,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,WAAW,GAAG,CAAC,GAAG,EAAE,CAAC,CAAA;YACxC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,0BAAc,CAAC,CAAA;YACxC,UAAU,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;YAC7C,IAAA,aAAG,EAAC,gCAAgC,0BAAc,2BAA2B,UAAU,GAAG,CAAC,CAAA;QAC9F,CAAC;QAED,GAAG,CAAC,GAAG,GAAG,UAAU,CAAA;QACpB,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,GAAG,GAAG,CAAC,QAAQ,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,UAAU,EAAE,CAAA;QAG3E,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAA;QAC1B,GAAG,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAA;QAC/B,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAA;QAE1B,OAAO,IAAI,EAAE,CAAA;IAChB,CAAC,CAAA;AACJ,CAAC;AAtCD,8CAsCC"}
1
+ {"version":3,"file":"manageLocales.middleware.js","sourceRoot":"","sources":["../../src/middleware/manageLocales.middleware.ts"],"names":[],"mappings":";;;;AACA,sDAAuD;AACvD,kGAAgE;AAChE,mFAAkD;AAClD,+DAA+B;AAC/B,wDAA0D;AAE1D,SAAgB,iBAAiB;IAC7B,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;;QAEvD,IAAA,aAAG,EAAC,2CAA2C,CAAC,CAAA;QAChD,IAAI,IAAI,GAAuB,CAAS,GAAG,CAAC,KAAK,CAAC,0BAAc,CAAC;YAC7D,GAAG,CAAC,IAAI,CAAC,IAAI;aACb,MAAA,GAAG,CAAC,OAAO,0CAAE,YAAY,CAAS,0BAAc,CAAC,CAAA,CAAC,CAAA;QACtD,IAAA,aAAG,EAAC,0DAA0D,IAAI,YAAY,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;QAC/F,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,uBAAa,CAAC,iBAAiB,CAAC,yBAAc,CAAC,WAAW,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC;YAC3G,IAAI,GAAG,IAAI,CAAA;QACf,CAAC;QACD,IAAA,aAAG,EAAC,uCAAuC,IAAI,GAAG,CAAC,CAAA;QACnD,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACd,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,0BAAc,EAAE,IAAI,CAAC,CAAA;QAClD,CAAC;QACD,GAAG,CAAC,IAAI,GAAG,IAAI,CAAA;QAEf,IAAI,UAAU,GAAG,GAAG,CAAC,GAAG,CAAA;QACxB,IAAI,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,CAAC;YAIlD,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,WAAW,GAAG,CAAC,GAAG,EAAE,CAAC,CAAA;YACxC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,0BAAc,CAAC,CAAA;YACxC,UAAU,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;YAC7C,IAAA,aAAG,EAAC,gCAAgC,0BAAc,2BAA2B,UAAU,GAAG,CAAC,CAAA;QAC/F,CAAC;QAED,GAAG,CAAC,GAAG,GAAG,UAAU,CAAA;QACpB,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,GAAG,GAAG,CAAC,QAAQ,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,UAAU,EAAE,CAAA;QAG3E,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAA;QAC1B,GAAG,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAA;QAC/B,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAA;QAG1B,IAAI,IAAA,gCAAiB,EAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,GAAG,CAAC,MAAM,CAAC,sBAAsB,GAAG,KAAK,CAAC;QAC9C,CAAC;QAED,OAAO,IAAI,EAAE,CAAA;IACjB,CAAC,CAAA;AACL,CAAC;AA3CD,8CA2CC"}
@@ -0,0 +1,2 @@
1
+ import { Session } from "@companieshouse/node-session-handler";
2
+ export declare function isAuthorisedAgent(session: Session | undefined): boolean;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isAuthorisedAgent = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const SessionKey_1 = require("@companieshouse/node-session-handler/lib/session/keys/SessionKey");
6
+ const SignInInfoKeys_1 = require("@companieshouse/node-session-handler/lib/session/keys/SignInInfoKeys");
7
+ const constants = tslib_1.__importStar(require("../constants/constants"));
8
+ function isAuthorisedAgent(session) {
9
+ var _a;
10
+ const signInInfo = (_a = session === null || session === void 0 ? void 0 : session.data) === null || _a === void 0 ? void 0 : _a[SessionKey_1.SessionKey.SignInInfo];
11
+ const acspNumber = signInInfo === null || signInInfo === void 0 ? void 0 : signInInfo[SignInInfoKeys_1.SignInInfoKeys.AcspNumber];
12
+ return !!acspNumber && constants.ACSP_NUMBER_REGEX.test(acspNumber);
13
+ }
14
+ exports.isAuthorisedAgent = isAuthorisedAgent;
15
+ ;
16
+ //# sourceMappingURL=sessionUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionUtils.js","sourceRoot":"","sources":["../../src/utils/sessionUtils.ts"],"names":[],"mappings":";;;;AACA,iGAA8F;AAC9F,yGAAsG;AACtG,0EAAoD;AAEpD,SAAgB,iBAAiB,CAAE,OAA4B;;IAC3D,MAAM,UAAU,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,0CAAG,uBAAU,CAAC,UAAU,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,+BAAc,CAAC,UAAU,CAAW,CAAC;IACrE,OAAO,CAAC,CAAC,UAAU,IAAI,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACxE,CAAC;AAJD,8CAIC;AAAA,CAAC"}
@@ -1,6 +1,6 @@
1
1
  {
2
- "mainNavbar": "The main navigation bar",
3
- "clickToExpandOrCollapse": "Click to expand or collapse",
2
+ "mainNavbar": "Menu",
3
+ "clickToExpandOrCollapse": "Select to show or hide",
4
4
  "signInOrRegister": "Sign in / Register",
5
5
  "yourCompanies": "Your companies",
6
6
  "authorisedAgent": "Authorised agent",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@companieshouse/ch-node-utils",
3
- "version": "1.3.10",
3
+ "version": "1.3.12",
4
4
  "author": "companieshouse",
5
5
  "main": "./lib/index.js",
6
6
  "types": "./lib/index.d.ts",
@@ -36,16 +36,18 @@
36
36
  },
37
37
  "license": "MIT",
38
38
  "dependencies": {
39
- "@companieshouse/node-session-handler": "^5.0.1",
39
+ "@companieshouse/node-session-handler": "^5.1.4",
40
40
  "express": "^4.18.3",
41
41
  "i18next": "^23.10.1",
42
42
  "i18next-fs-backend": "^2.3.1",
43
+ "ioredis": "^5.4.1",
43
44
  "iso-639-1": "^3.1.2",
44
45
  "tslib": "^2.3.0"
45
46
  },
46
47
  "devDependencies": {
47
48
  "@types/express": "^4.17.21",
48
49
  "@types/i18next": "^13.0.0",
50
+ "@types/ioredis": "4.28.10",
49
51
  "@types/node": "^20.11.28",
50
52
  "typescript": "^5.4.2"
51
53
  },
@@ -30,10 +30,10 @@ It receives:
30
30
  #}
31
31
  {% macro addNavbar(signInHref, menuItems, userDisplayText, lang) %}
32
32
  <div class="js-toggle-nav" id="global-nav">
33
- <nav role="navigation" class="content" aria-label="{{ lang.mainNavbar or 'The main navigation bar' }}">
33
+ <nav role="navigation" class="content" aria-label="{{ lang.mainNavbar }}">
34
34
  {% if userDisplayText %}
35
35
  <a href="#navigation" class="js-header-toggle menu">{{ userDisplayText }}
36
- <span class="govuk-visually-hidden">{{ lang.clickToExpandOrCollapse or 'Click to expand or collapse' }}</span>
36
+ <span class="govuk-visually-hidden">{{ lang.clickToExpandOrCollapse }}</span>
37
37
  </a>
38
38
  {% else %}
39
39
  <a id="user-signin-mobile" href="{{ signInHref }}" class="sign-in govuk-link">{{ lang.signInOrRegister or 'Sign in / Register' }}</a>