@sparkvault/sdk-mobile 7.1.4 → 7.1.5

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.
@@ -21,7 +21,9 @@ export function isResourceId(value: unknown): boolean;
21
21
  *
22
22
  * Core mints an id as its kind's prefix, an underscore and a body: the hex of a
23
23
  * UUIDv7 (apps/api lib/utils.js buildPrefixedIdFromBytes), or a hex digest for
24
- * an invitation and an inbox notification. The grammar admits the kind's
24
+ * an id derived from what it names (an invitation, an inbox notification, a
25
+ * Messaging or help-desk ingot, a help-desk event an inbound email records).
26
+ * The grammar admits the kind's
25
27
  * prefix, '_' and a body of the path-safe alphabet [A-Za-z0-9_-], 128
26
28
  * characters in all, so an id that passes is exactly one request-path segment
27
29
  * and one file-name component: it can never name a parent path, carry a
@@ -36,11 +38,19 @@ export function isResourceId(value: unknown): boolean;
36
38
  /** The prefix Core mints each resource kind's id with. */
37
39
  export const RESOURCE_ID_PREFIXES: Readonly<{
38
40
  account: "acc";
41
+ attachment: "hda";
39
42
  folder: "fld";
43
+ helpDeskJob: "hdj";
40
44
  ingot: "ing";
41
45
  invite: "inv";
42
46
  notification: "ntf";
47
+ requester: "hrq";
48
+ routingRule: "hdr";
49
+ savedReply: "hds";
43
50
  spark: "spk";
51
+ team: "team";
52
+ ticket: "tkt";
53
+ ticketEvent: "hdev";
44
54
  user: "usr";
45
55
  vault: "vlt";
46
56
  }>;
@@ -7,7 +7,9 @@
7
7
  *
8
8
  * Core mints an id as its kind's prefix, an underscore and a body: the hex of a
9
9
  * UUIDv7 (apps/api lib/utils.js buildPrefixedIdFromBytes), or a hex digest for
10
- * an invitation and an inbox notification. The grammar admits the kind's
10
+ * an id derived from what it names (an invitation, an inbox notification, a
11
+ * Messaging or help-desk ingot, a help-desk event an inbound email records).
12
+ * The grammar admits the kind's
11
13
  * prefix, '_' and a body of the path-safe alphabet [A-Za-z0-9_-], 128
12
14
  * characters in all, so an id that passes is exactly one request-path segment
13
15
  * and one file-name component: it can never name a parent path, carry a
@@ -22,11 +24,19 @@
22
24
  /** The prefix Core mints each resource kind's id with. */
23
25
  export const RESOURCE_ID_PREFIXES = Object.freeze({
24
26
  account: 'acc',
27
+ attachment: 'hda',
25
28
  folder: 'fld',
29
+ helpDeskJob: 'hdj',
26
30
  ingot: 'ing',
27
31
  invite: 'inv',
28
32
  notification: 'ntf',
33
+ requester: 'hrq',
34
+ routingRule: 'hdr',
35
+ savedReply: 'hds',
29
36
  spark: 'spk',
37
+ team: 'team',
38
+ ticket: 'tkt',
39
+ ticketEvent: 'hdev',
30
40
  user: 'usr',
31
41
  vault: 'vlt'
32
42
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ids.js","sourceRoot":"","sources":["../../src/app-sdk/ids.js"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,+CAA+C;AAC/C,8DAA8D;AAE9D;;;;;;;;;;;;;;;;;GAiBG;AAEH,0DAA0D;AAC1D,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC;IAChD,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,KAAK;IACb,YAAY,EAAE,KAAK;IACnB,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,KAAK;CACb,CAAC,CAAC;AAEH,uCAAuC;AACvC,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C,MAAM,OAAO,GAAG,kBAAkB,CAAC;AAEnC;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,IAAI,EAAE,KAAK;IACxC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,SAAS,CAAC,qBAAqB,IAAI,GAAG,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,MAAM,GAAG,GAAG,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC;IAChD,OAAO,OAAO,KAAK,KAAK,QAAQ;WAC3B,KAAK,CAAC,MAAM,IAAI,sBAAsB;WACtC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;WACxB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,KAAK;IAChC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"ids.js","sourceRoot":"","sources":["../../src/app-sdk/ids.js"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,+CAA+C;AAC/C,8DAA8D;AAE9D;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,0DAA0D;AAC1D,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC;IAChD,OAAO,EAAE,KAAK;IACd,UAAU,EAAE,KAAK;IACjB,MAAM,EAAE,KAAK;IACb,WAAW,EAAE,KAAK;IAClB,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,KAAK;IACb,YAAY,EAAE,KAAK;IACnB,SAAS,EAAE,KAAK;IAChB,WAAW,EAAE,KAAK;IAClB,UAAU,EAAE,KAAK;IACjB,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,KAAK;IACb,WAAW,EAAE,MAAM;IACnB,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,KAAK;CACb,CAAC,CAAC;AAEH,uCAAuC;AACvC,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C,MAAM,OAAO,GAAG,kBAAkB,CAAC;AAEnC;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,IAAI,EAAE,KAAK;IACxC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,SAAS,CAAC,qBAAqB,IAAI,GAAG,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,MAAM,GAAG,GAAG,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC;IAChD,OAAO,OAAO,KAAK,KAAK,QAAQ;WAC3B,KAAK,CAAC,MAAM,IAAI,sBAAsB;WACtC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;WACxB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,KAAK;IAChC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAC3D,CAAC"}
@@ -1,4 +1,10 @@
1
1
  export function isSparkVaultOwnedHostname(hostname: any): boolean;
2
+ /**
3
+ * Whether a domain is SparkVault's, so no organization may claim it as its
4
+ * own: every host the platform owns, and the help-desk domain with its whole
5
+ * subtree, whose hosts belong to SparkVault's tenants and to its custom-domain
6
+ * CNAME target without any of them being trusted as a platform host.
7
+ */
2
8
  export function isSparkVaultReservedDomain(hostname: any): boolean;
3
9
  export function sparkVaultPlatformSvOrigins(): string[];
4
10
  export function sparkVaultWebSocketOrigins(): string[];
@@ -6,8 +12,11 @@ export function sparkVaultWebSocketOrigins(): string[];
6
12
  * SparkVault-owned domain registry.
7
13
  *
8
14
  * Keep platform domain decisions centralized: CSP, redirect safety, custom
9
- * domain reservation, and Identity postMessage trust all depend on the same
10
- * ownership boundary.
15
+ * domain reservation, and Identity postMessage trust all read this registry.
16
+ * Trust follows the hosts the platform owns (isSparkVaultOwnedHostname);
17
+ * reservation covers those and the help-desk domain's subtree
18
+ * (isSparkVaultReservedDomain), whose hosts are SparkVault's to hand out but
19
+ * never trusted.
11
20
  */
12
21
  export const SPARKVAULT_ROOT_DOMAIN: "sparkvault.com";
13
22
  /** The person-facing Identity portal host (auth.sv shell + hosted login). */
@@ -24,6 +33,14 @@ export const SPARKVAULT_IDENTITY_HOST: "auth.sparkvault.com";
24
33
  export const SPARKVAULT_LINKS_HOST: "x.sv";
25
34
  /** The durable file-share and Secure Upload Portal host. */
26
35
  export const SPARKVAULT_FILES_HOST: "files.sv";
36
+ /**
37
+ * The help-desk domain: each organization's help desk lives at a host under
38
+ * it, and every custom help-desk domain points its CNAME at a name in it. The
39
+ * whole subtree is reserved — no organization claims a name in it as its own
40
+ * domain — but none of its hosts is owned: a tenant's help-desk host is never
41
+ * trusted the way a platform host is (isSparkVaultOwnedHostname).
42
+ */
43
+ export const SPARKVAULT_HELP_DESK_DOMAIN: "help.sv";
27
44
  export const SPARKVAULT_PLATFORM_SV_HOSTS: readonly string[];
28
45
  /** The SparkVault console. */
29
46
  export const SPARKVAULT_APP_HOST: "app.sparkvault.com";
@@ -5,8 +5,11 @@
5
5
  * SparkVault-owned domain registry.
6
6
  *
7
7
  * Keep platform domain decisions centralized: CSP, redirect safety, custom
8
- * domain reservation, and Identity postMessage trust all depend on the same
9
- * ownership boundary.
8
+ * domain reservation, and Identity postMessage trust all read this registry.
9
+ * Trust follows the hosts the platform owns (isSparkVaultOwnedHostname);
10
+ * reservation covers those and the help-desk domain's subtree
11
+ * (isSparkVaultReservedDomain), whose hosts are SparkVault's to hand out but
12
+ * never trusted.
10
13
  */
11
14
  export const SPARKVAULT_ROOT_DOMAIN = 'sparkvault.com';
12
15
  /** The person-facing Identity portal host (auth.sv shell + hosted login). */
@@ -23,6 +26,14 @@ export const SPARKVAULT_IDENTITY_HOST = 'auth.sparkvault.com';
23
26
  export const SPARKVAULT_LINKS_HOST = 'x.sv';
24
27
  /** The durable file-share and Secure Upload Portal host. */
25
28
  export const SPARKVAULT_FILES_HOST = 'files.sv';
29
+ /**
30
+ * The help-desk domain: each organization's help desk lives at a host under
31
+ * it, and every custom help-desk domain points its CNAME at a name in it. The
32
+ * whole subtree is reserved — no organization claims a name in it as its own
33
+ * domain — but none of its hosts is owned: a tenant's help-desk host is never
34
+ * trusted the way a platform host is (isSparkVaultOwnedHostname).
35
+ */
36
+ export const SPARKVAULT_HELP_DESK_DOMAIN = 'help.sv';
26
37
  export const SPARKVAULT_PLATFORM_SV_HOSTS = Object.freeze([
27
38
  SPARKVAULT_AUTH_HOST,
28
39
  SPARKVAULT_LINKS_HOST,
@@ -67,11 +78,21 @@ function isSparkVaultRootOrSubdomain(hostname) {
67
78
  function isSparkVaultPlatformSvHost(hostname) {
68
79
  return SPARKVAULT_PLATFORM_SV_HOSTS.includes(normalizeHostname(hostname));
69
80
  }
81
+ function isSparkVaultHelpDeskDomainOrSubdomain(hostname) {
82
+ const normalized = normalizeHostname(hostname);
83
+ return normalized === SPARKVAULT_HELP_DESK_DOMAIN || normalized.endsWith(`.${SPARKVAULT_HELP_DESK_DOMAIN}`);
84
+ }
70
85
  export function isSparkVaultOwnedHostname(hostname) {
71
86
  return isSparkVaultRootOrSubdomain(hostname) || isSparkVaultPlatformSvHost(hostname);
72
87
  }
88
+ /**
89
+ * Whether a domain is SparkVault's, so no organization may claim it as its
90
+ * own: every host the platform owns, and the help-desk domain with its whole
91
+ * subtree, whose hosts belong to SparkVault's tenants and to its custom-domain
92
+ * CNAME target without any of them being trusted as a platform host.
93
+ */
73
94
  export function isSparkVaultReservedDomain(hostname) {
74
- return isSparkVaultOwnedHostname(hostname);
95
+ return isSparkVaultOwnedHostname(hostname) || isSparkVaultHelpDeskDomainOrSubdomain(hostname);
75
96
  }
76
97
  export function sparkVaultPlatformSvOrigins() {
77
98
  return SPARKVAULT_PLATFORM_SV_HOSTS.map((host) => `https://${host}`);
@@ -1 +1 @@
1
- {"version":3,"file":"platform-domains.js","sourceRoot":"","sources":["../../src/app-sdk/platform-domains.js"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,4DAA4D;AAC5D,8DAA8D;AAE9D;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,gBAAgB,CAAC;AAEvD,6EAA6E;AAC7E,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,qBAAqB,CAAC;AAE9D,8FAA8F;AAC9F,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE5C,4DAA4D;AAC5D,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;AAEhD,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC,MAAM,CAAC;IACxD,oBAAoB;IACpB,qBAAqB;IACrB,qBAAqB;IACrB,SAAS;IACT,SAAS;IACT,UAAU;IACV,OAAO;IACP,OAAO;IACP,OAAO;CACR,CAAC,CAAC;AAEH,8BAA8B;AAC9B,MAAM,CAAC,MAAM,mBAAmB,GAAG,oBAAoB,CAAC;AAExD,sFAAsF;AACtF,MAAM,CAAC,MAAM,qBAAqB,GAAG,sBAAsB,CAAC;AAE5D,MAAM,0BAA0B,GAAG,MAAM,CAAC,MAAM,CAAC;IAC/C,mBAAmB;CACpB,CAAC,CAAC;AAEH,SAAS,YAAY,CAAC,KAAK;IACzB,OAAO,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1D,IAAI,MAAM,CAAC,UAAU,YAAY,CAAC,sBAAsB,CAAC,GAAG,EAAE,GAAG,CAAC;IAClE,IAAI,MAAM,CAAC,KAAK,4BAA4B,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;CACnF,CAAC,CAAC;AAEH,SAAS,iBAAiB,CAAC,QAAQ;IACjC,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IAC5C,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,2BAA2B,CAAC,QAAQ;IAC3C,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC/C,OAAO,UAAU,KAAK,sBAAsB,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,sBAAsB,EAAE,CAAC,CAAC;AACpG,CAAC;AAED,SAAS,0BAA0B,CAAC,QAAQ;IAC1C,OAAO,4BAA4B,CAAC,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,QAAQ;IAChD,OAAO,2BAA2B,CAAC,QAAQ,CAAC,IAAI,0BAA0B,CAAC,QAAQ,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,QAAQ;IACjD,OAAO,yBAAyB,CAAC,QAAQ,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,2BAA2B;IACzC,OAAO,4BAA4B,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,OAAO,0BAA0B,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;AACnE,CAAC"}
1
+ {"version":3,"file":"platform-domains.js","sourceRoot":"","sources":["../../src/app-sdk/platform-domains.js"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sparkvault/sdk-mobile",
3
- "version": "7.1.4",
3
+ "version": "7.1.5",
4
4
  "description": "Mobile SDK for SparkVault Identity, vault, folder, and ingot workflows",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -8,7 +8,9 @@
8
8
  *
9
9
  * Core mints an id as its kind's prefix, an underscore and a body: the hex of a
10
10
  * UUIDv7 (apps/api lib/utils.js buildPrefixedIdFromBytes), or a hex digest for
11
- * an invitation and an inbox notification. The grammar admits the kind's
11
+ * an id derived from what it names (an invitation, an inbox notification, a
12
+ * Messaging or help-desk ingot, a help-desk event an inbound email records).
13
+ * The grammar admits the kind's
12
14
  * prefix, '_' and a body of the path-safe alphabet [A-Za-z0-9_-], 128
13
15
  * characters in all, so an id that passes is exactly one request-path segment
14
16
  * and one file-name component: it can never name a parent path, carry a
@@ -24,11 +26,19 @@
24
26
  /** The prefix Core mints each resource kind's id with. */
25
27
  export const RESOURCE_ID_PREFIXES = Object.freeze({
26
28
  account: 'acc',
29
+ attachment: 'hda',
27
30
  folder: 'fld',
31
+ helpDeskJob: 'hdj',
28
32
  ingot: 'ing',
29
33
  invite: 'inv',
30
34
  notification: 'ntf',
35
+ requester: 'hrq',
36
+ routingRule: 'hdr',
37
+ savedReply: 'hds',
31
38
  spark: 'spk',
39
+ team: 'team',
40
+ ticket: 'tkt',
41
+ ticketEvent: 'hdev',
32
42
  user: 'usr',
33
43
  vault: 'vlt'
34
44
  });
@@ -6,8 +6,11 @@
6
6
  * SparkVault-owned domain registry.
7
7
  *
8
8
  * Keep platform domain decisions centralized: CSP, redirect safety, custom
9
- * domain reservation, and Identity postMessage trust all depend on the same
10
- * ownership boundary.
9
+ * domain reservation, and Identity postMessage trust all read this registry.
10
+ * Trust follows the hosts the platform owns (isSparkVaultOwnedHostname);
11
+ * reservation covers those and the help-desk domain's subtree
12
+ * (isSparkVaultReservedDomain), whose hosts are SparkVault's to hand out but
13
+ * never trusted.
11
14
  */
12
15
 
13
16
  export const SPARKVAULT_ROOT_DOMAIN = 'sparkvault.com';
@@ -30,6 +33,15 @@ export const SPARKVAULT_LINKS_HOST = 'x.sv';
30
33
  /** The durable file-share and Secure Upload Portal host. */
31
34
  export const SPARKVAULT_FILES_HOST = 'files.sv';
32
35
 
36
+ /**
37
+ * The help-desk domain: each organization's help desk lives at a host under
38
+ * it, and every custom help-desk domain points its CNAME at a name in it. The
39
+ * whole subtree is reserved — no organization claims a name in it as its own
40
+ * domain — but none of its hosts is owned: a tenant's help-desk host is never
41
+ * trusted the way a platform host is (isSparkVaultOwnedHostname).
42
+ */
43
+ export const SPARKVAULT_HELP_DESK_DOMAIN = 'help.sv';
44
+
33
45
  export const SPARKVAULT_PLATFORM_SV_HOSTS = Object.freeze([
34
46
  SPARKVAULT_AUTH_HOST,
35
47
  SPARKVAULT_LINKS_HOST,
@@ -82,12 +94,23 @@ function isSparkVaultPlatformSvHost(hostname) {
82
94
  return SPARKVAULT_PLATFORM_SV_HOSTS.includes(normalizeHostname(hostname));
83
95
  }
84
96
 
97
+ function isSparkVaultHelpDeskDomainOrSubdomain(hostname) {
98
+ const normalized = normalizeHostname(hostname);
99
+ return normalized === SPARKVAULT_HELP_DESK_DOMAIN || normalized.endsWith(`.${SPARKVAULT_HELP_DESK_DOMAIN}`);
100
+ }
101
+
85
102
  export function isSparkVaultOwnedHostname(hostname) {
86
103
  return isSparkVaultRootOrSubdomain(hostname) || isSparkVaultPlatformSvHost(hostname);
87
104
  }
88
105
 
106
+ /**
107
+ * Whether a domain is SparkVault's, so no organization may claim it as its
108
+ * own: every host the platform owns, and the help-desk domain with its whole
109
+ * subtree, whose hosts belong to SparkVault's tenants and to its custom-domain
110
+ * CNAME target without any of them being trusted as a platform host.
111
+ */
89
112
  export function isSparkVaultReservedDomain(hostname) {
90
- return isSparkVaultOwnedHostname(hostname);
113
+ return isSparkVaultOwnedHostname(hostname) || isSparkVaultHelpDeskDomainOrSubdomain(hostname);
91
114
  }
92
115
 
93
116
  export function sparkVaultPlatformSvOrigins() {