@greensecurity/javascript-sdk 0.47.0-beta.8 → 0.47.0-beta.9

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.
Files changed (85) hide show
  1. package/dist/commonjs/__tests__/doAdmin.test.js +26 -0
  2. package/dist/commonjs/__tests__/doAdmin.test.js.map +1 -1
  3. package/dist/commonjs/__tests__/vendors.test.js +1 -1
  4. package/dist/commonjs/__tests__/webhooks.test.js +4 -5
  5. package/dist/commonjs/__tests__/webhooks.test.js.map +1 -1
  6. package/dist/commonjs/__tests__/zoneDevicesCreate.test.js +12 -1
  7. package/dist/commonjs/__tests__/zoneDevicesCreate.test.js.map +1 -1
  8. package/dist/commonjs/__tests__/zoneDevicesList.test.js +13 -1
  9. package/dist/commonjs/__tests__/zoneDevicesList.test.js.map +1 -1
  10. package/dist/commonjs/__tests__/zones.test.js +8 -30
  11. package/dist/commonjs/__tests__/zones.test.js.map +1 -1
  12. package/dist/commonjs/admin-funcs/doAdmin.d.ts +3 -1
  13. package/dist/commonjs/admin-funcs/doAdmin.d.ts.map +1 -1
  14. package/dist/commonjs/admin-funcs/doAdmin.js +11 -3
  15. package/dist/commonjs/admin-funcs/doAdmin.js.map +1 -1
  16. package/dist/commonjs/admin-funcs/zoneDevicesDelete.d.ts +3 -0
  17. package/dist/commonjs/admin-funcs/zoneDevicesDelete.d.ts.map +1 -0
  18. package/dist/commonjs/admin-funcs/zoneDevicesDelete.js +11 -0
  19. package/dist/commonjs/admin-funcs/zoneDevicesDelete.js.map +1 -0
  20. package/dist/commonjs/admin-funcs/zoneDevicesList.d.ts +1 -0
  21. package/dist/commonjs/admin-funcs/zoneDevicesList.d.ts.map +1 -1
  22. package/dist/commonjs/admin-funcs/zoneDevicesList.js +3 -0
  23. package/dist/commonjs/admin-funcs/zoneDevicesList.js.map +1 -1
  24. package/dist/commonjs/admin-funcs/zoneDevicesProvisioning.d.ts +3 -0
  25. package/dist/commonjs/admin-funcs/zoneDevicesProvisioning.d.ts.map +1 -0
  26. package/dist/commonjs/admin-funcs/zoneDevicesProvisioning.js +15 -0
  27. package/dist/commonjs/admin-funcs/zoneDevicesProvisioning.js.map +1 -0
  28. package/dist/commonjs/admin-funcs/zoneDevicesUpdate.js +2 -2
  29. package/dist/commonjs/admin-funcs/zoneDevicesUpdate.js.map +1 -1
  30. package/dist/commonjs/index.extras.d.ts +4 -0
  31. package/dist/commonjs/index.extras.d.ts.map +1 -1
  32. package/dist/commonjs/index.extras.js +4 -0
  33. package/dist/commonjs/index.extras.js.map +1 -1
  34. package/dist/commonjs/lib/config.d.ts +2 -2
  35. package/dist/commonjs/lib/config.js +2 -2
  36. package/dist/esm/__tests__/doAdmin.test.js +27 -1
  37. package/dist/esm/__tests__/doAdmin.test.js.map +1 -1
  38. package/dist/esm/__tests__/vendors.test.js +1 -1
  39. package/dist/esm/__tests__/webhooks.test.js +4 -5
  40. package/dist/esm/__tests__/webhooks.test.js.map +1 -1
  41. package/dist/esm/__tests__/zoneDevicesCreate.test.js +12 -1
  42. package/dist/esm/__tests__/zoneDevicesCreate.test.js.map +1 -1
  43. package/dist/esm/__tests__/zoneDevicesList.test.js +13 -1
  44. package/dist/esm/__tests__/zoneDevicesList.test.js.map +1 -1
  45. package/dist/esm/__tests__/zones.test.js +8 -30
  46. package/dist/esm/__tests__/zones.test.js.map +1 -1
  47. package/dist/esm/admin-funcs/doAdmin.d.ts +3 -1
  48. package/dist/esm/admin-funcs/doAdmin.d.ts.map +1 -1
  49. package/dist/esm/admin-funcs/doAdmin.js +10 -3
  50. package/dist/esm/admin-funcs/doAdmin.js.map +1 -1
  51. package/dist/esm/admin-funcs/zoneDevicesDelete.d.ts +3 -0
  52. package/dist/esm/admin-funcs/zoneDevicesDelete.d.ts.map +1 -0
  53. package/dist/esm/admin-funcs/zoneDevicesDelete.js +8 -0
  54. package/dist/esm/admin-funcs/zoneDevicesDelete.js.map +1 -0
  55. package/dist/esm/admin-funcs/zoneDevicesList.d.ts +1 -0
  56. package/dist/esm/admin-funcs/zoneDevicesList.d.ts.map +1 -1
  57. package/dist/esm/admin-funcs/zoneDevicesList.js +3 -0
  58. package/dist/esm/admin-funcs/zoneDevicesList.js.map +1 -1
  59. package/dist/esm/admin-funcs/zoneDevicesProvisioning.d.ts +3 -0
  60. package/dist/esm/admin-funcs/zoneDevicesProvisioning.d.ts.map +1 -0
  61. package/dist/esm/admin-funcs/zoneDevicesProvisioning.js +12 -0
  62. package/dist/esm/admin-funcs/zoneDevicesProvisioning.js.map +1 -0
  63. package/dist/esm/admin-funcs/zoneDevicesUpdate.js +2 -2
  64. package/dist/esm/admin-funcs/zoneDevicesUpdate.js.map +1 -1
  65. package/dist/esm/index.extras.d.ts +4 -0
  66. package/dist/esm/index.extras.d.ts.map +1 -1
  67. package/dist/esm/index.extras.js +4 -0
  68. package/dist/esm/index.extras.js.map +1 -1
  69. package/dist/esm/lib/config.d.ts +2 -2
  70. package/dist/esm/lib/config.js +2 -2
  71. package/jsr.json +1 -1
  72. package/package.json +1 -1
  73. package/src/__tests__/doAdmin.test.ts +35 -0
  74. package/src/__tests__/vendors.test.ts +1 -1
  75. package/src/__tests__/webhooks.test.ts +4 -5
  76. package/src/__tests__/zoneDevicesCreate.test.ts +16 -1
  77. package/src/__tests__/zoneDevicesList.test.ts +15 -1
  78. package/src/__tests__/zones.test.ts +8 -30
  79. package/src/admin-funcs/doAdmin.ts +20 -3
  80. package/src/admin-funcs/zoneDevicesDelete.ts +8 -0
  81. package/src/admin-funcs/zoneDevicesList.ts +4 -0
  82. package/src/admin-funcs/zoneDevicesProvisioning.ts +12 -0
  83. package/src/admin-funcs/zoneDevicesUpdate.ts +2 -2
  84. package/src/index.extras.ts +4 -0
  85. package/src/lib/config.ts +2 -2
@@ -35,8 +35,8 @@ export declare function serverURLFromOptions(options: SDKOptions): URL | null;
35
35
  export declare const SDK_METADATA: {
36
36
  readonly language: "typescript";
37
37
  readonly openapiDocVersion: "0.46.0";
38
- readonly sdkVersion: "0.47.0-beta.8";
38
+ readonly sdkVersion: "0.47.0-beta.9";
39
39
  readonly genVersion: "2.948.4";
40
- readonly userAgent: "speakeasy-sdk/typescript 0.47.0-beta.8 2.948.4 0.46.0 @greensecurity/javascript-sdk";
40
+ readonly userAgent: "speakeasy-sdk/typescript 0.47.0-beta.9 2.948.4 0.46.0 @greensecurity/javascript-sdk";
41
41
  };
42
42
  //# sourceMappingURL=config.d.ts.map
@@ -39,8 +39,8 @@ export function serverURLFromOptions(options) {
39
39
  export const SDK_METADATA = {
40
40
  language: "typescript",
41
41
  openapiDocVersion: "0.46.0",
42
- sdkVersion: "0.47.0-beta.8",
42
+ sdkVersion: "0.47.0-beta.9",
43
43
  genVersion: "2.948.4",
44
- userAgent: "speakeasy-sdk/typescript 0.47.0-beta.8 2.948.4 0.46.0 @greensecurity/javascript-sdk",
44
+ userAgent: "speakeasy-sdk/typescript 0.47.0-beta.9 2.948.4 0.46.0 @greensecurity/javascript-sdk",
45
45
  };
46
46
  //# sourceMappingURL=config.js.map
package/jsr.json CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  {
4
4
  "name": "@greensecurity/javascript-sdk",
5
- "version": "0.47.0-beta.8",
5
+ "version": "0.47.0-beta.9",
6
6
  "exports": {
7
7
  ".": "./src/index.ts",
8
8
  "./models/errors": "./src/models/errors/index.ts",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@greensecurity/javascript-sdk",
3
- "version": "0.47.0-beta.8",
3
+ "version": "0.47.0-beta.9",
4
4
  "author": "Green Security LLC",
5
5
  "type": "module",
6
6
  "tshy": {
@@ -2,6 +2,7 @@ import { afterEach, beforeEach, expect, test, vi } from "vitest";
2
2
  import type { HookContext } from "../hooks/types.js";
3
3
  import type { RetryConfig } from "../lib/retries.js";
4
4
  import {
5
+ $doDelete,
5
6
  $doPut,
6
7
  buildDoOptions,
7
8
  matchesInternalApiErrorStatusCode,
@@ -120,3 +121,37 @@ test("$doPut reports a network failure as a request-error", async () => {
120
121
  expect(result.ok).toBe(false);
121
122
  expect(call.status).toBe("request-error");
122
123
  });
124
+
125
+ test("$doDelete sends a DELETE with no body and returns the parsed success payload", async () => {
126
+ const fetchMock = vi.fn(async (request: Request) => {
127
+ expect(request.method).toBe("DELETE");
128
+ expect(request.url).toBe("https://internal.test/zone-devices/42");
129
+ expect(await request.text()).toBe("");
130
+ return new Response(JSON.stringify({ success: true }), {
131
+ status: 200,
132
+ headers: { "Content-Type": "application/json" },
133
+ });
134
+ });
135
+ globalThis.fetch = fetchMock as unknown as typeof fetch;
136
+
137
+ const [result, call] = await $doDelete("/zone-devices/42");
138
+
139
+ expect(fetchMock).toHaveBeenCalledTimes(1);
140
+ expect(result.ok).toBe(true);
141
+ expect(result.ok && result.value).toEqual({ success: true });
142
+ expect(call.status).toBe("complete");
143
+ });
144
+
145
+ test("$doDelete maps an API error response to an error result", async () => {
146
+ globalThis.fetch = vi.fn(async () =>
147
+ new Response(JSON.stringify({ success: false, error: "Invalid zone device ID" }), {
148
+ status: 404,
149
+ headers: { "Content-Type": "application/json" },
150
+ })
151
+ ) as unknown as typeof fetch;
152
+
153
+ const [result] = await $doDelete("/zone-devices/42");
154
+
155
+ expect(result.ok).toBe(false);
156
+ expect(!result.ok && result.error).toBeInstanceOf(ApiErrorResponse);
157
+ });
@@ -121,7 +121,7 @@ test("Vendors List Vendor Credits", async () => {
121
121
  page: 1,
122
122
  useUrlParams: false,
123
123
  },
124
- creditBalance: 8683.29,
124
+ creditBalance: 7787.66,
125
125
  });
126
126
  });
127
127
 
@@ -62,11 +62,10 @@ test("Webhooks Updates The Webhook Endpoint With The Given Id", async () => {
62
62
  id: 220782,
63
63
  webhookEndpointUpdate: {
64
64
  webhookUrl: "https://example.com/webhook/incoming",
65
- subscriptions: {
66
- model: "Vendor",
67
- action: "updated",
68
- expands: "vendor.company,vendor.user",
69
- },
65
+ subscriptions: [
66
+ "Vendor.updated",
67
+ "Vendor.created",
68
+ ],
70
69
  consumers: {
71
70
  systemId: 1,
72
71
  facilityId: 1,
@@ -1,7 +1,8 @@
1
1
  import { beforeEach, describe, expect, it, vi } from "vitest";
2
2
 
3
3
  // Typed parameters so mock.calls is the argument tuple; see smartBadgeGetPsks.test.ts.
4
- const { doPostMock, doGetSingleMock, doPutMock } = vi.hoisted(() => ({
4
+ const { doPostMock, doGetSingleMock, doPutMock, doDeleteMock } = vi.hoisted(() => ({
5
+ doDeleteMock: vi.fn((_route: string) => Promise.resolve([{ ok: true }, { status: "complete" }])),
5
6
  doPutMock: vi.fn((_route: string, _body: unknown) => Promise.resolve([{ ok: true }, { status: "complete" }])),
6
7
  doPostMock: vi.fn((_route: string, _body: unknown) => Promise.resolve([{ ok: true }, { status: "complete" }])),
7
8
  doGetSingleMock: vi.fn((_route: string, _query: unknown) =>
@@ -13,6 +14,7 @@ vi.mock("../admin-funcs/doAdmin.js", () => ({
13
14
  $doPost: doPostMock,
14
15
  $doGetSingle: doGetSingleMock,
15
16
  $doPut: doPutMock,
17
+ $doDelete: doDeleteMock,
16
18
  }));
17
19
 
18
20
  import { __internal } from "../index.extras.js";
@@ -22,6 +24,7 @@ describe("__internal.zoneDevices", () => {
22
24
  doPostMock.mockClear();
23
25
  doGetSingleMock.mockClear();
24
26
  doPutMock.mockClear();
27
+ doDeleteMock.mockClear();
25
28
  });
26
29
 
27
30
  it("puts only the changed fields to /zone-devices/:id", () => {
@@ -30,6 +33,18 @@ describe("__internal.zoneDevices", () => {
30
33
  expect(doPutMock).toHaveBeenCalledWith("/zone-devices/42", { zone_id: 7, connection_type: "wifi" });
31
34
  });
32
35
 
36
+ it("deletes /zone-devices/:id", () => {
37
+ __internal.zoneDevices.delete(42);
38
+
39
+ expect(doDeleteMock).toHaveBeenCalledWith("/zone-devices/42");
40
+ });
41
+
42
+ it("posts to /zone-devices/:id/provisioning", () => {
43
+ __internal.zoneDevices.provisioning(42);
44
+
45
+ expect(doPostMock).toHaveBeenCalledWith("/zone-devices/42/provisioning", {});
46
+ });
47
+
33
48
  it("posts the gateway body verbatim to /zone-devices", () => {
34
49
  const body = {
35
50
  zone_id: 7,
@@ -28,10 +28,24 @@ describe("zoneDevicesList", () => {
28
28
  expect(doGetSingleMock).toHaveBeenCalledWith("/zone-devices", { zone_id: 7, items_per_page: 1 });
29
29
  });
30
30
 
31
+ it("sends the network filter as network_id", () => {
32
+ zoneDevicesList({ networkId: 3 });
33
+
34
+ expect(doGetSingleMock).toHaveBeenCalledWith("/zone-devices", { network_id: 3 });
35
+ });
36
+
31
37
  // Gatekeeper's Networks and Devices tabs call these; dropping them from `__internal` once
32
38
  // broke both without failing a build here.
33
39
  it("keeps the gatekeeper funcs on __internal", () => {
34
- expect(__internal.zoneDevices).toEqual({ list: zoneDevicesList, get: zoneDevicesGet });
40
+ expect(__internal.zoneDevices).toEqual({
41
+ list: zoneDevicesList,
42
+ get: zoneDevicesGet,
43
+ create: expect.any(Function),
44
+ update: expect.any(Function),
45
+ macAvailability: expect.any(Function),
46
+ provisioning: expect.any(Function),
47
+ delete: expect.any(Function),
48
+ });
35
49
  expect(__internal.networks).toEqual({ list: networksList, get: networksGet, create: networksCreate });
36
50
  });
37
51
  });
@@ -35,6 +35,9 @@ test("Zones List Or Search Security Zones", async () => {
35
35
  useUrlParams: false,
36
36
  },
37
37
  items: [
38
+ {
39
+ facility: {},
40
+ },
38
41
  {
39
42
  facility: {
40
43
  contacts: {
@@ -47,47 +50,22 @@ test("Zones List Or Search Security Zones", async () => {
47
50
  department: 123,
48
51
  },
49
52
  techContact: {
50
- status: "Deleted",
51
- department: 123,
52
- },
53
- greenSecurityCsm: null,
54
- accountManager: {
55
- status: "Deleted",
56
- department: 123,
57
- },
58
- },
59
- vendorGuestPolicy: {
60
- enabled: false,
61
- vendorGuestLimitAndOr: "and",
62
- vendorGuestRequireEmail: false,
63
- },
64
- },
65
- },
66
- {
67
- facility: {
68
- contacts: {
69
- contact: {
70
53
  status: "Inactive",
71
54
  department: 123,
72
55
  },
73
- adminContact: {
74
- status: "Deleted",
75
- department: 123,
76
- },
77
- techContact: {
78
- status: "Deleted",
56
+ greenSecurityCsm: {
57
+ status: "Active",
79
58
  department: 123,
80
59
  },
81
- greenSecurityCsm: null,
82
60
  accountManager: {
83
- status: "Deleted",
61
+ status: "Inactive",
84
62
  department: 123,
85
63
  },
86
64
  },
87
65
  vendorGuestPolicy: {
88
66
  enabled: false,
89
67
  vendorGuestLimitAndOr: "and",
90
- vendorGuestRequireEmail: false,
68
+ vendorGuestRequireEmail: true,
91
69
  },
92
70
  },
93
71
  },
@@ -108,7 +86,7 @@ test("Zones Security Zone Checkin", async () => {
108
86
 
109
87
  const result = await greenSecurity.zones.securityZoneCheckin({
110
88
  qrCode: "<value>",
111
- zoneId: 362426,
89
+ zoneId: 931795,
112
90
  });
113
91
  expect(result).toBeDefined();
114
92
  expect(result).toEqual({});
@@ -341,10 +341,27 @@ export async function $doPostForm(
341
341
  return $doPostBody(route, form, {}, options);
342
342
  }
343
343
 
344
- export async function $doPut<T extends object>(
344
+ export function $doPut<T extends object>(
345
345
  route: string,
346
346
  putData: T,
347
347
  options?: RequestOptions,
348
+ ): ReturnType<typeof $doJsonRequest> {
349
+ return $doJsonRequest("PUT", route, putData, options);
350
+ }
351
+
352
+ export function $doDelete(
353
+ route: string,
354
+ options?: RequestOptions,
355
+ ): ReturnType<typeof $doJsonRequest> {
356
+ return $doJsonRequest("DELETE", route, undefined, options);
357
+ }
358
+
359
+ // PUT and DELETE share everything but the method; a DELETE sends no body.
360
+ async function $doJsonRequest(
361
+ method: "PUT" | "DELETE",
362
+ route: string,
363
+ data: object | undefined,
364
+ options?: RequestOptions,
348
365
  ): Promise<
349
366
  [
350
367
  Result<
@@ -367,7 +384,7 @@ export async function $doPut<T extends object>(
367
384
  throw new Error("GreenSecurityCore client is not initialized.");
368
385
  }
369
386
 
370
- const body = encodeJSON("body", putData, { explode: true });
387
+ const body = data === undefined ? undefined : encodeJSON("body", data, { explode: true });
371
388
 
372
389
  // Extract the path parameters from the request object
373
390
  const pathParams = {}; //extractRouteParameters(route, request);
@@ -399,7 +416,7 @@ export async function $doPut<T extends object>(
399
416
 
400
417
  const requestRes = client._createRequest(context, {
401
418
  security: requestSecurity,
402
- method: "PUT",
419
+ method,
403
420
  baseURL: options?.serverURL,
404
421
  path: path,
405
422
  headers: headers,
@@ -0,0 +1,8 @@
1
+ import { APIPromise } from "../types/async.js";
2
+ import { $doDelete, internalApiResult } from "./doAdmin.js";
3
+
4
+ // Removes a gateway from the Gatekeeper device details screen and revokes its AWS IoT thing.
5
+ // Internal for the same reason as zoneDevicesCreate. 404 covers a gateway outside the caller's scope.
6
+ export function zoneDevicesDelete(zoneDeviceId: number): internalApiResult {
7
+ return new APIPromise($doDelete(`/zone-devices/${zoneDeviceId}`));
8
+ }
@@ -6,6 +6,7 @@ export type zoneDevicesListSortField = "id" | "name";
6
6
  export type zoneDevicesListRequest = {
7
7
  facilityId?: number;
8
8
  zoneId?: number;
9
+ networkId?: number;
9
10
  page?: number;
10
11
  itemsPerPage?: number;
11
12
  sort?: zoneDevicesListSortField;
@@ -36,6 +37,9 @@ export function zoneDevicesList(
36
37
  if (request.zoneId !== undefined) {
37
38
  query["zone_id"] = request.zoneId;
38
39
  }
40
+ if (request.networkId !== undefined) {
41
+ query["network_id"] = request.networkId;
42
+ }
39
43
  if (request.page !== undefined) {
40
44
  query["page"] = request.page;
41
45
  }
@@ -0,0 +1,12 @@
1
+ import { APIPromise } from "../types/async.js";
2
+ import { $doPost, internalApiResult } from "./doAdmin.js";
3
+
4
+ // Everything the Gatekeeper app writes to a gateway when it provisions it over the gateway's own
5
+ // Wi-Fi: the admin password, the AWS IoT certificate and broker, and the settings and
6
+ // secrets of the network it joins. The first call mints the password and certificate, hence POST.
7
+ //
8
+ // Internal for the same reason as zoneDevicesCreate. The response carries secrets: callers keep it
9
+ // in memory for the provisioning run and never persist or log it.
10
+ export function zoneDevicesProvisioning(zoneDeviceId: number): internalApiResult {
11
+ return new APIPromise($doPost(`/zone-devices/${zoneDeviceId}/provisioning`, {}));
12
+ }
@@ -11,8 +11,8 @@ export type zoneDevicesUpdateRequest = {
11
11
  name?: string;
12
12
  };
13
13
 
14
- // Edits a gateway from the Gatekeeper device details screen (GSSD-7059). Pushing a new network to
15
- // the hardware is GSSD-7061; this only updates the record.
14
+ // Edits a gateway from the Gatekeeper device details screen. This only updates the record; the
15
+ // app pushes the new network to the hardware using zoneDevicesProvisioning.
16
16
  //
17
17
  // Internal for the same reason as zoneDevicesCreate. 404 covers a gateway, zone or network outside
18
18
  // the caller's scope, and a network not linked to the zone's facility.
@@ -67,6 +67,8 @@ import { zoneDevicesGet } from "./admin-funcs/zoneDevicesGet.js";
67
67
  import { zoneDevicesCreate } from "./admin-funcs/zoneDevicesCreate.js";
68
68
  import { zoneDevicesMacAvailability } from "./admin-funcs/zoneDevicesMacAvailability.js";
69
69
  import { zoneDevicesUpdate } from "./admin-funcs/zoneDevicesUpdate.js";
70
+ import { zoneDevicesProvisioning } from "./admin-funcs/zoneDevicesProvisioning.js";
71
+ import { zoneDevicesDelete } from "./admin-funcs/zoneDevicesDelete.js";
70
72
  import { lookupsAddressValidation } from "./admin-funcs/lookupsAddressValidation.js";
71
73
  import { lookupsAddressAutocomplete } from "./admin-funcs/lookupsAddressAutocomplete.js";
72
74
  import { lookupsAddressPlace } from "./admin-funcs/lookupsAddressPlace.js";
@@ -192,6 +194,8 @@ export const __internal = {
192
194
  get: zoneDevicesGet,
193
195
  create: zoneDevicesCreate,
194
196
  update: zoneDevicesUpdate,
197
+ provisioning: zoneDevicesProvisioning,
198
+ delete: zoneDevicesDelete,
195
199
  macAvailability: zoneDevicesMacAvailability
196
200
  }
197
201
  };
package/src/lib/config.ts CHANGED
@@ -80,8 +80,8 @@ export function serverURLFromOptions(options: SDKOptions): URL | null {
80
80
  export const SDK_METADATA = {
81
81
  language: "typescript",
82
82
  openapiDocVersion: "0.46.0",
83
- sdkVersion: "0.47.0-beta.8",
83
+ sdkVersion: "0.47.0-beta.9",
84
84
  genVersion: "2.948.4",
85
85
  userAgent:
86
- "speakeasy-sdk/typescript 0.47.0-beta.8 2.948.4 0.46.0 @greensecurity/javascript-sdk",
86
+ "speakeasy-sdk/typescript 0.47.0-beta.9 2.948.4 0.46.0 @greensecurity/javascript-sdk",
87
87
  } as const;