diff --git a/src/ClientBuilder.js b/src/ClientBuilder.js
index 8fa8b37..d510f2e 100644
--- a/src/ClientBuilder.js
+++ b/src/ClientBuilder.js
@@ -2,9 +2,12 @@ const HttpSender = require("./HttpSender");
const SigningSender = require("./SigningSender");
const BaseUrlSender = require("./BaseUrlSender");
const AgentSender = require("./AgentSender");
-const StaticCredentials = require("./StaticCredentials");
-const SharedCredentials = require("./SharedCredentials");
-const BasicAuthCredentials = require("./BasicAuthCredentials");
+const _StaticCredentials = require("./StaticCredentials");
+const StaticCredentials = _StaticCredentials.default || _StaticCredentials;
+const _SharedCredentials = require("./SharedCredentials");
+const SharedCredentials = _SharedCredentials.default || _SharedCredentials;
+const _BasicAuthCredentials = require("./BasicAuthCredentials");
+const BasicAuthCredentials = _BasicAuthCredentials.default || _BasicAuthCredentials;
const CustomHeaderSender = require("./CustomHeaderSender");
const StatusCodeSender = require("./StatusCodeSender");
const LicenseSender = require("./LicenseSender");
@@ -194,13 +197,8 @@ class ClientBuilder {
* @return ClientBuilder this to accommodate method chaining.
*/
withCustomCommaSeperatedQuery(key, value) {
- let values = this.customQueries.get(key);
- if (values === "") {
- values = value;
- } else {
- values += "," + value;
- }
- this.customQueries.set(key, values);
+ const existing = this.customQueries.get(key);
+ this.customQueries.set(key, existing ? existing + "," + value : value);
return this;
}
@@ -228,6 +226,13 @@ class ClientBuilder {
return this.withCustomCommaSeperatedQuery("features", "occupant-use");
}
+ /**
+ * Adds to the request query to use the IANA timezone feature.
+ * @return ClientBuilder this to accommodate method chaining.
+ */
+ withFeatureIANATimeZone() {
+ return this.withCustomCommaSeperatedQuery("features", "iana-timezone");
+ }
buildSender() {
if (this.httpSender) return this.httpSender;
diff --git a/src/us_street/Candidate.js b/src/us_street/Candidate.js
index eb160cf..5ccfe3c 100644
--- a/src/us_street/Candidate.js
+++ b/src/us_street/Candidate.js
@@ -64,6 +64,9 @@ class Candidate {
this.metadata.timeZone = responseData.metadata.time_zone;
this.metadata.utcOffset = responseData.metadata.utc_offset;
this.metadata.obeysDst = responseData.metadata.dst;
+ this.metadata.ianaTimeZone = responseData.metadata.iana_time_zone;
+ this.metadata.ianaUtcOffset = responseData.metadata.iana_utc_offset;
+ this.metadata.ianaDst = responseData.metadata.iana_dst;
this.metadata.isEwsMatch = responseData.metadata.ews_match;
}
diff --git a/tests/test_ClientBuilder.ts b/tests/test_ClientBuilder.ts
new file mode 100644
index 0000000..57354bc
--- /dev/null
+++ b/tests/test_ClientBuilder.ts
@@ -0,0 +1,23 @@
+import { expect } from "chai";
+import StaticCredentials from "../src/StaticCredentials.js";
+// eslint-disable-next-line @typescript-eslint/no-require-imports
+const ClientBuilder = require("../src/ClientBuilder");
+
+describe("ClientBuilder", function () {
+ const credentials = new StaticCredentials("test-id", "test-token");
+
+ it("sets the iana-timezone feature flag.", function () {
+ const builder = new ClientBuilder(credentials);
+ builder.withFeatureIANATimeZone();
+
+ expect(builder.customQueries.get("features")).to.equal("iana-timezone");
+ });
+
+ it("appends iana-timezone when combined with component-analysis.", function () {
+ const builder = new ClientBuilder(credentials);
+ builder.withFeatureComponentAnalysis();
+ builder.withFeatureIANATimeZone();
+
+ expect(builder.customQueries.get("features")).to.equal("component-analysis,iana-timezone");
+ });
+});
diff --git a/tests/us_street/test_Candidate.js b/tests/us_street/test_Candidate.js
index 2bfd515..1211d00 100644
--- a/tests/us_street/test_Candidate.js
+++ b/tests/us_street/test_Candidate.js
@@ -52,6 +52,9 @@ describe("A match candidate", function () {
time_zone: "39",
utc_offset: 40.0,
dst: "41",
+ iana_time_zone: "68",
+ iana_utc_offset: 69.0,
+ iana_dst: "70",
ews_match: "47",
},
analysis: {
@@ -132,6 +135,9 @@ describe("A match candidate", function () {
expect(candidate.metadata.timeZone).to.equal("39");
expect(candidate.metadata.utcOffset).to.equal(40.0);
expect(candidate.metadata.obeysDst).to.equal("41");
+ expect(candidate.metadata.ianaTimeZone).to.equal("68");
+ expect(candidate.metadata.ianaUtcOffset).to.equal(69.0);
+ expect(candidate.metadata.ianaDst).to.equal("70");
expect(candidate.metadata.isEwsMatch).to.equal("47");
expect(candidate.analysis.dpvMatchCode).to.equal("42");