@globiguard/sdk 1.0.0 → 1.0.1

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 (71) hide show
  1. package/LICENSE +128 -0
  2. package/README.md +80 -0
  3. package/dist/bootstrap.d.ts +5 -0
  4. package/dist/bootstrap.d.ts.map +1 -0
  5. package/dist/bootstrap.js +67 -0
  6. package/dist/bootstrap.js.map +1 -0
  7. package/dist/client.d.ts +61 -0
  8. package/dist/client.d.ts.map +1 -0
  9. package/dist/client.js +260 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/entitlements.node.d.ts +12 -0
  12. package/dist/entitlements.node.d.ts.map +1 -0
  13. package/dist/entitlements.node.js +215 -0
  14. package/dist/entitlements.node.js.map +1 -0
  15. package/dist/errors.d.ts +21 -0
  16. package/dist/errors.d.ts.map +1 -0
  17. package/dist/errors.js +46 -0
  18. package/dist/errors.js.map +1 -0
  19. package/dist/fetch.d.ts +21 -0
  20. package/dist/fetch.d.ts.map +1 -0
  21. package/dist/fetch.js +151 -0
  22. package/dist/fetch.js.map +1 -0
  23. package/dist/governed-actions.d.ts +34 -0
  24. package/dist/governed-actions.d.ts.map +1 -0
  25. package/dist/governed-actions.js +146 -0
  26. package/dist/governed-actions.js.map +1 -0
  27. package/dist/index.d.ts +14 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +14 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/realtime.d.ts +21 -0
  32. package/dist/realtime.d.ts.map +1 -0
  33. package/dist/realtime.js +265 -0
  34. package/dist/realtime.js.map +1 -0
  35. package/dist/resources/actions.d.ts +5 -0
  36. package/dist/resources/actions.d.ts.map +1 -0
  37. package/dist/resources/actions.js +48 -0
  38. package/dist/resources/actions.js.map +1 -0
  39. package/dist/resources/audit.d.ts +5 -0
  40. package/dist/resources/audit.d.ts.map +1 -0
  41. package/dist/resources/audit.js +62 -0
  42. package/dist/resources/audit.js.map +1 -0
  43. package/dist/resources/installs.d.ts +4 -0
  44. package/dist/resources/installs.d.ts.map +1 -0
  45. package/dist/resources/installs.js +19 -0
  46. package/dist/resources/installs.js.map +1 -0
  47. package/dist/resources/orgs.d.ts +4 -0
  48. package/dist/resources/orgs.d.ts.map +1 -0
  49. package/dist/resources/orgs.js +48 -0
  50. package/dist/resources/orgs.js.map +1 -0
  51. package/dist/resources/path-segments.d.ts +2 -0
  52. package/dist/resources/path-segments.d.ts.map +1 -0
  53. package/dist/resources/path-segments.js +4 -0
  54. package/dist/resources/path-segments.js.map +1 -0
  55. package/dist/resources/policies.d.ts +5 -0
  56. package/dist/resources/policies.d.ts.map +1 -0
  57. package/dist/resources/policies.js +64 -0
  58. package/dist/resources/policies.js.map +1 -0
  59. package/dist/resources/queue.d.ts +5 -0
  60. package/dist/resources/queue.d.ts.map +1 -0
  61. package/dist/resources/queue.js +36 -0
  62. package/dist/resources/queue.js.map +1 -0
  63. package/dist/resources/workflows.d.ts +5 -0
  64. package/dist/resources/workflows.d.ts.map +1 -0
  65. package/dist/resources/workflows.js +63 -0
  66. package/dist/resources/workflows.js.map +1 -0
  67. package/dist/server.d.ts +8 -0
  68. package/dist/server.d.ts.map +1 -0
  69. package/dist/server.js +128 -0
  70. package/dist/server.js.map +1 -0
  71. package/package.json +49 -3
@@ -0,0 +1,146 @@
1
+ import { GlobiguardAuthorityError, GlobiguardConfigError } from "./errors.js";
2
+ export function createGovernedActionsClient(config) {
3
+ return {
4
+ authorizeAction(request) {
5
+ return config.actions.authorize(request);
6
+ },
7
+ async authorizeActionOrThrow(request) {
8
+ const decision = await config.actions.authorize(request);
9
+ if (decision.decision === "BLOCK") {
10
+ throw new GlobiguardAuthorityError({
11
+ kind: "POLICY_BLOCKED",
12
+ message: "GlobiGuard blocked the governed action.",
13
+ authorizationId: decision.authorizationId,
14
+ queueEntryId: decision.queueEntryId,
15
+ safeDetails: {
16
+ decision: decision.decision,
17
+ reason: decision.reason ?? null
18
+ }
19
+ });
20
+ }
21
+ if (decision.decision === "QUEUE") {
22
+ throw new GlobiguardAuthorityError({
23
+ kind: "QUEUED_FOR_REVIEW",
24
+ message: "GlobiGuard queued the governed action for review; do not perform the downstream business action yet.",
25
+ authorizationId: decision.authorizationId,
26
+ queueEntryId: decision.queueEntryId,
27
+ safeDetails: {
28
+ decision: decision.decision,
29
+ approvalState: decision.approvalState
30
+ }
31
+ });
32
+ }
33
+ return decision;
34
+ },
35
+ requestApproval(request) {
36
+ return config.actions.createApproval(request);
37
+ },
38
+ getApprovalStatus(approvalId) {
39
+ return config.actions.getApproval(approvalId);
40
+ },
41
+ getEvidenceReferences(request) {
42
+ return config.actions.listEvidence(request);
43
+ },
44
+ exportEvidencePackage(request) {
45
+ return config.audit.export(request);
46
+ },
47
+ getEvidencePackageSummary(evidencePackageId) {
48
+ return config.audit.getEvidencePackageSummary(evidencePackageId);
49
+ },
50
+ getIncidentReplay(request) {
51
+ return config.audit.getIncidentReplay(request);
52
+ },
53
+ waitForApproval(options) {
54
+ return waitForApproval(config.queue, options);
55
+ }
56
+ };
57
+ }
58
+ export async function deriveActionIdempotencyKey(input) {
59
+ assertNonEmpty("stableSeed", input.stableSeed);
60
+ assertNonEmpty("actionType", input.actionType);
61
+ const payload = JSON.stringify({
62
+ stableSeed: input.stableSeed,
63
+ actionType: input.actionType,
64
+ actorId: input.actorId ?? null,
65
+ payloadSha256: input.payloadSha256 ?? null,
66
+ windowBucket: input.windowBucket ?? null
67
+ });
68
+ const digest = await digestSha256(payload);
69
+ return `gg_idem_${digest.slice(0, 48)}`;
70
+ }
71
+ export function generateCorrelationId() {
72
+ const cryptoImpl = globalThis.crypto;
73
+ if (!cryptoImpl?.getRandomValues) {
74
+ throw new GlobiguardConfigError("A Web Crypto getRandomValues implementation is required to generate correlation IDs.");
75
+ }
76
+ const bytes = new Uint8Array(16);
77
+ cryptoImpl.getRandomValues(bytes);
78
+ return [...bytes].map((byte) => byte.toString(16).padStart(2, "0")).join("");
79
+ }
80
+ async function waitForApproval(queue, options) {
81
+ const maxAttempts = options.maxAttempts ?? 60;
82
+ const intervalMs = options.intervalMs ?? 1000;
83
+ if (maxAttempts < 1) {
84
+ throw new GlobiguardConfigError("maxAttempts must be at least 1.");
85
+ }
86
+ for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
87
+ if (options.signal?.aborted) {
88
+ throw new GlobiguardAuthorityError({
89
+ kind: "QUEUED_FOR_REVIEW",
90
+ message: "Approval wait was aborted while the action remained queued.",
91
+ queueEntryId: options.queueEntryId
92
+ });
93
+ }
94
+ const entry = await queue.get(options.queueEntryId);
95
+ if (entry.status === "APPROVED" || entry.status === "AUTO_APPROVED") {
96
+ return entry;
97
+ }
98
+ if (entry.status === "REJECTED" || entry.status === "EXPIRED") {
99
+ throw new GlobiguardAuthorityError({
100
+ kind: "POLICY_BLOCKED",
101
+ message: `Queued action resolved as ${entry.status}; do not perform the downstream business action.`,
102
+ queueEntryId: entry.id,
103
+ safeDetails: {
104
+ status: entry.status
105
+ }
106
+ });
107
+ }
108
+ if (attempt < maxAttempts) {
109
+ await sleep(intervalMs, options.signal);
110
+ }
111
+ }
112
+ throw new GlobiguardAuthorityError({
113
+ kind: "QUEUED_FOR_REVIEW",
114
+ message: "Queued action is still pending after the configured wait attempts; do not perform the downstream business action yet.",
115
+ queueEntryId: options.queueEntryId
116
+ });
117
+ }
118
+ async function digestSha256(value) {
119
+ const cryptoImpl = globalThis.crypto;
120
+ if (!cryptoImpl?.subtle) {
121
+ throw new GlobiguardConfigError("A Web Crypto subtle implementation is required to derive idempotency keys.");
122
+ }
123
+ const digest = await cryptoImpl.subtle.digest("SHA-256", new TextEncoder().encode(value));
124
+ return bytesToHex(new Uint8Array(digest));
125
+ }
126
+ function assertNonEmpty(name, value) {
127
+ if (!value.trim()) {
128
+ throw new GlobiguardConfigError(`${name} must be a non-empty string.`);
129
+ }
130
+ }
131
+ function sleep(ms, signal) {
132
+ return new Promise((resolve, reject) => {
133
+ const timeout = setTimeout(resolve, ms);
134
+ signal?.addEventListener("abort", () => {
135
+ clearTimeout(timeout);
136
+ reject(new GlobiguardAuthorityError({
137
+ kind: "QUEUED_FOR_REVIEW",
138
+ message: "Approval wait was aborted while the action remained queued."
139
+ }));
140
+ }, { once: true });
141
+ });
142
+ }
143
+ function bytesToHex(bytes) {
144
+ return [...bytes].map((byte) => byte.toString(16).padStart(2, "0")).join("");
145
+ }
146
+ //# sourceMappingURL=governed-actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"governed-actions.js","sourceRoot":"","sources":["../src/governed-actions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export * from "./client.js";
2
+ export * from "./bootstrap.js";
3
+ export * from "./errors.js";
4
+ export * from "./fetch.js";
5
+ export * from "./realtime.js";
6
+ export * from "./resources/actions.js";
7
+ export * from "./resources/audit.js";
8
+ export * from "./resources/installs.js";
9
+ export * from "./resources/orgs.js";
10
+ export * from "./resources/path-segments.js";
11
+ export * from "./resources/policies.js";
12
+ export * from "./resources/queue.js";
13
+ export * from "./resources/workflows.js";
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,14 @@
1
+ export * from "./client.js";
2
+ export * from "./bootstrap.js";
3
+ export * from "./errors.js";
4
+ export * from "./fetch.js";
5
+ export * from "./realtime.js";
6
+ export * from "./resources/actions.js";
7
+ export * from "./resources/audit.js";
8
+ export * from "./resources/installs.js";
9
+ export * from "./resources/orgs.js";
10
+ export * from "./resources/path-segments.js";
11
+ export * from "./resources/policies.js";
12
+ export * from "./resources/queue.js";
13
+ export * from "./resources/workflows.js";
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { GlobiguardRealtimeClient, GlobiguardRealtimeConnectionConfig } from "@globiguard/contracts";
2
+ export type { GlobiguardRealtimeAuth, GlobiguardRealtimeClient, GlobiguardRealtimeConnectionConfig, GlobiguardRealtimeEvent, GlobiguardRealtimeSubscribeOptions, GlobiguardRealtimeSubscription } from "@globiguard/contracts";
3
+ export interface GlobiguardRealtimeSocketLike {
4
+ connected: boolean;
5
+ on(event: string, listener: (payload: unknown) => void): this;
6
+ off(event: string, listener: (payload: unknown) => void): this;
7
+ emit(event: string, payload?: unknown): this;
8
+ connect(): this;
9
+ disconnect(): this;
10
+ }
11
+ export interface GlobiguardRealtimeSocketFactoryArgs {
12
+ baseUrl: string;
13
+ path: string;
14
+ auth: Record<string, string>;
15
+ }
16
+ export type GlobiguardRealtimeSocketFactory = (args: GlobiguardRealtimeSocketFactoryArgs) => GlobiguardRealtimeSocketLike;
17
+ export interface GlobiguardSdkRealtimeConfig extends GlobiguardRealtimeConnectionConfig {
18
+ socketFactory?: GlobiguardRealtimeSocketFactory;
19
+ }
20
+ export declare function createRealtimeClient(baseUrl: string, config: GlobiguardSdkRealtimeConfig): GlobiguardRealtimeClient;
21
+ //# sourceMappingURL=realtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../src/realtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,wBAAwB,EACxB,kCAAkC,EAInC,MAAM,uBAAuB,CAAC;AAK/B,YAAY,EACV,sBAAsB,EACtB,wBAAwB,EACxB,kCAAkC,EAClC,uBAAuB,EACvB,kCAAkC,EAClC,8BAA8B,EAC/B,MAAM,uBAAuB,CAAC;AAK/B,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;IAC9D,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;IAC/D,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7C,OAAO,IAAI,IAAI,CAAC;IAChB,UAAU,IAAI,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,mCAAmC;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,MAAM,+BAA+B,GAAG,CAC5C,IAAI,EAAE,mCAAmC,KACtC,4BAA4B,CAAC;AAElC,MAAM,WAAW,2BACf,SAAQ,kCAAkC;IAC1C,aAAa,CAAC,EAAE,+BAA+B,CAAC;CACjD;AAwXD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,2BAA2B,GAClC,wBAAwB,CAO1B"}
@@ -0,0 +1,265 @@
1
+ import { io } from "socket.io-client";
2
+ import { GlobiguardConfigError } from "./errors.js";
3
+ const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
4
+ function defaultSocketFactory({ baseUrl, path, auth }) {
5
+ return io(baseUrl, {
6
+ path,
7
+ transports: ["websocket"],
8
+ autoConnect: false,
9
+ auth
10
+ });
11
+ }
12
+ function extractErrorMessage(payload, fallback) {
13
+ if (payload instanceof Error && payload.message.trim()) {
14
+ return payload.message;
15
+ }
16
+ if (payload &&
17
+ typeof payload === "object" &&
18
+ "message" in payload &&
19
+ typeof payload.message === "string" &&
20
+ payload.message.trim()) {
21
+ return payload.message;
22
+ }
23
+ return fallback;
24
+ }
25
+ function validateRealtimePath(path) {
26
+ const normalizedPath = path?.trim() || "/ws";
27
+ if (!normalizedPath.startsWith("/")) {
28
+ throw new GlobiguardConfigError("Realtime path must start with '/'.");
29
+ }
30
+ if (normalizedPath.includes("?") || normalizedPath.includes("#")) {
31
+ throw new GlobiguardConfigError("Realtime path must not include query strings or fragments.");
32
+ }
33
+ return normalizedPath;
34
+ }
35
+ function buildRealtimeAuthHeaders(auth) {
36
+ const token = auth.token?.trim();
37
+ if (!token) {
38
+ throw new GlobiguardConfigError("Realtime auth requires a non-empty token.");
39
+ }
40
+ switch (auth.kind) {
41
+ case "bearer":
42
+ return { token: `Bearer ${token}` };
43
+ case "apiKey":
44
+ if (!token.startsWith("gg_")) {
45
+ throw new GlobiguardConfigError("Realtime API key auth requires a gg_ token.");
46
+ }
47
+ return { token };
48
+ default:
49
+ throw new GlobiguardConfigError("Realtime auth requires a recognized bearer or apiKey kind.");
50
+ }
51
+ }
52
+ function assertNonEmptyRealtimeIdentifier(kind, value) {
53
+ const normalizedValue = value.trim();
54
+ if (!normalizedValue) {
55
+ throw new GlobiguardConfigError(`${kind} must be a non-empty string.`);
56
+ }
57
+ if (normalizedValue.includes("/") || normalizedValue.includes("?") || normalizedValue.includes("#")) {
58
+ throw new GlobiguardConfigError(`${kind} must not contain path or URL separators.`);
59
+ }
60
+ return normalizedValue;
61
+ }
62
+ function assertRealtimeIdentifier(kind, value) {
63
+ const normalizedValue = value.trim();
64
+ if (!UUID_RE.test(normalizedValue)) {
65
+ throw new GlobiguardConfigError(`${kind} must be a valid UUID.`);
66
+ }
67
+ return normalizedValue;
68
+ }
69
+ class SDKRealtimeClient {
70
+ baseUrl;
71
+ path;
72
+ auth;
73
+ socketFactory;
74
+ socket = null;
75
+ listeners = new Map();
76
+ subscriptions = new Map();
77
+ hasEstablishedConnection = false;
78
+ awaitingReconnect = false;
79
+ handleSocketEvent = (payload) => {
80
+ if (!payload || typeof payload !== "object") {
81
+ return;
82
+ }
83
+ const eventPayload = payload;
84
+ if (typeof eventPayload.channel !== "string") {
85
+ return;
86
+ }
87
+ const listeners = this.listeners.get(eventPayload.channel);
88
+ if (!listeners?.size) {
89
+ return;
90
+ }
91
+ const event = {
92
+ channel: eventPayload.channel,
93
+ data: eventPayload.data && typeof eventPayload.data === "object"
94
+ ? eventPayload.data
95
+ : {}
96
+ };
97
+ listeners.forEach((listener) => {
98
+ listener.onEvent(event);
99
+ });
100
+ };
101
+ handleSocketError = (payload) => {
102
+ const error = new Error(extractErrorMessage(payload, "GlobiGuard realtime request failed."));
103
+ this.listeners.forEach((listeners) => {
104
+ listeners.forEach((listener) => {
105
+ listener.onError?.(error);
106
+ });
107
+ });
108
+ };
109
+ handleSocketConnect = () => {
110
+ if (!this.socket) {
111
+ return;
112
+ }
113
+ const shouldReplay = this.hasEstablishedConnection;
114
+ this.hasEstablishedConnection = true;
115
+ this.awaitingReconnect = false;
116
+ if (!shouldReplay) {
117
+ return;
118
+ }
119
+ this.subscriptions.forEach((descriptor) => {
120
+ this.socket?.emit(descriptor.subscribeEvent, descriptor.payload);
121
+ });
122
+ };
123
+ constructor(baseUrl, path, auth, socketFactory) {
124
+ this.baseUrl = baseUrl;
125
+ this.path = path;
126
+ this.auth = auth;
127
+ this.socketFactory = socketFactory;
128
+ }
129
+ subscribeTransparency(sessionId, options) {
130
+ const normalizedSessionId = assertRealtimeIdentifier("sessionId", sessionId);
131
+ return this.subscribe({
132
+ subscribeEvent: "subscribe:transparency",
133
+ channel: `transparency:${normalizedSessionId}`,
134
+ payload: {
135
+ session_id: normalizedSessionId
136
+ }
137
+ }, options);
138
+ }
139
+ subscribeWorkflow(runId, options) {
140
+ const normalizedRunId = assertRealtimeIdentifier("runId", runId);
141
+ return this.subscribe({
142
+ subscribeEvent: "subscribe:workflow",
143
+ channel: `workflow:${normalizedRunId}`,
144
+ payload: {
145
+ run_id: normalizedRunId
146
+ }
147
+ }, options);
148
+ }
149
+ subscribeQueue(orgId, options) {
150
+ const normalizedOrgId = assertRealtimeIdentifier("orgId", orgId);
151
+ return this.subscribe({
152
+ subscribeEvent: "subscribe:queue",
153
+ channel: `queue:${normalizedOrgId}`,
154
+ payload: {
155
+ org_id: normalizedOrgId
156
+ }
157
+ }, options);
158
+ }
159
+ subscribeDecision(authorizationId, options) {
160
+ const normalizedAuthorizationId = assertNonEmptyRealtimeIdentifier("authorizationId", authorizationId);
161
+ return this.subscribe({
162
+ subscribeEvent: "subscribe:decision",
163
+ channel: `decision:${normalizedAuthorizationId}`,
164
+ payload: {
165
+ authorization_id: normalizedAuthorizationId
166
+ }
167
+ }, options);
168
+ }
169
+ disconnect() {
170
+ if (this.socket) {
171
+ this.socket.off("connect", this.handleSocketConnect);
172
+ this.socket.off("event", this.handleSocketEvent);
173
+ this.socket.off("error", this.handleSocketError);
174
+ this.socket.off("connect_error", this.handleSocketError);
175
+ this.socket.disconnect();
176
+ this.socket = null;
177
+ }
178
+ this.listeners.clear();
179
+ this.subscriptions.clear();
180
+ this.hasEstablishedConnection = false;
181
+ this.awaitingReconnect = false;
182
+ }
183
+ rebuildSocket() {
184
+ if (this.socket) {
185
+ this.socket.off("connect", this.handleSocketConnect);
186
+ this.socket.off("event", this.handleSocketEvent);
187
+ this.socket.off("error", this.handleSocketError);
188
+ this.socket.off("connect_error", this.handleSocketError);
189
+ this.socket.disconnect();
190
+ this.socket = null;
191
+ }
192
+ if (this.listeners.size === 0) {
193
+ this.hasEstablishedConnection = false;
194
+ this.awaitingReconnect = false;
195
+ return;
196
+ }
197
+ this.hasEstablishedConnection = true;
198
+ this.awaitingReconnect = true;
199
+ this.ensureSocket();
200
+ }
201
+ subscribe(descriptor, options) {
202
+ const socket = this.ensureSocket();
203
+ const listener = {
204
+ onEvent: options.onEvent,
205
+ onError: options.onError
206
+ };
207
+ const channelListeners = this.listeners.get(descriptor.channel) ?? new Set();
208
+ const shouldEmitSubscribe = channelListeners.size === 0;
209
+ channelListeners.add(listener);
210
+ this.listeners.set(descriptor.channel, channelListeners);
211
+ if (shouldEmitSubscribe) {
212
+ this.subscriptions.set(descriptor.channel, descriptor);
213
+ if (!this.awaitingReconnect && (socket.connected || !this.hasEstablishedConnection)) {
214
+ socket.emit(descriptor.subscribeEvent, descriptor.payload);
215
+ }
216
+ }
217
+ return {
218
+ channel: descriptor.channel,
219
+ unsubscribe: () => {
220
+ const listeners = this.listeners.get(descriptor.channel);
221
+ if (!listeners) {
222
+ return;
223
+ }
224
+ listeners.delete(listener);
225
+ if (listeners.size === 0) {
226
+ this.listeners.delete(descriptor.channel);
227
+ this.subscriptions.delete(descriptor.channel);
228
+ }
229
+ if (this.listeners.size === 0) {
230
+ this.disconnect();
231
+ }
232
+ else if (listeners.size === 0) {
233
+ this.rebuildSocket();
234
+ }
235
+ }
236
+ };
237
+ }
238
+ ensureSocket() {
239
+ if (this.socket) {
240
+ if (!this.socket.connected) {
241
+ if (this.hasEstablishedConnection) {
242
+ this.awaitingReconnect = true;
243
+ }
244
+ this.socket.connect();
245
+ }
246
+ return this.socket;
247
+ }
248
+ const socket = this.socketFactory({
249
+ baseUrl: this.baseUrl,
250
+ path: this.path,
251
+ auth: this.auth
252
+ });
253
+ this.socket = socket;
254
+ socket.on("connect", this.handleSocketConnect);
255
+ socket.on("event", this.handleSocketEvent);
256
+ socket.on("error", this.handleSocketError);
257
+ socket.on("connect_error", this.handleSocketError);
258
+ socket.connect();
259
+ return socket;
260
+ }
261
+ }
262
+ export function createRealtimeClient(baseUrl, config) {
263
+ return new SDKRealtimeClient(baseUrl, validateRealtimePath(config.path), buildRealtimeAuthHeaders(config.auth), config.socketFactory ?? defaultSocketFactory);
264
+ }
265
+ //# sourceMappingURL=realtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realtime.js","sourceRoot":"","sources":["../src/realtime.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,EAAE,EAAe,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAWpD,MAAM,OAAO,GACX,iEAAiE,CAAC;AAqCpE,SAAS,oBAAoB,CAAC,EAC5B,OAAO,EACP,IAAI,EACJ,IAAI,EACgC;IACpC,OAAO,EAAE,CAAC,OAAO,EAAE;QACjB,IAAI;QACJ,UAAU,EAAE,CAAC,WAAW,CAAC;QACzB,WAAW,EAAE,KAAK;QAClB,IAAI;KACL,CAAsB,CAAC;AAC1B,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAgB,EAAE,QAAgB;IAC7D,IAAI,OAAO,YAAY,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACvD,OAAO,OAAO,CAAC,OAAO,CAAC;IACzB,CAAC;IAED,IACE,OAAO;QACP,OAAO,OAAO,KAAK,QAAQ;QAC3B,SAAS,IAAI,OAAO;QACpB,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ;QACnC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EACtB,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC;IACzB,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAa;IACzC,MAAM,cAAc,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,CAAC;IAE7C,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,qBAAqB,CAC7B,oCAAoC,CACrC,CAAC;IACJ,CAAC;IAED,IAAI,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,qBAAqB,CAC7B,4DAA4D,CAC7D,CAAC;IACJ,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,wBAAwB,CAAC,IAA4B;IAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;IAEjC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,qBAAqB,CAC7B,2CAA2C,CAC5C,CAAC;IACJ,CAAC;IAED,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,QAAQ;YACX,OAAO,EAAE,KAAK,EAAE,UAAU,KAAK,EAAE,EAAE,CAAC;QACtC,KAAK,QAAQ;YACX,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,qBAAqB,CAC7B,6CAA6C,CAC9C,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,CAAC;QACnB;YACE,MAAM,IAAI,qBAAqB,CAC7B,4DAA4D,CAC7D,CAAC;IACN,CAAC;AACH,CAAC;AAED,SAAS,gCAAgC,CAAC,IAAY,EAAE,KAAa;IACnE,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAErC,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,qBAAqB,CAC7B,GAAG,IAAI,8BAA8B,CACtC,CAAC;IACJ,CAAC;IAED,IAAI,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACpG,MAAM,IAAI,qBAAqB,CAC7B,GAAG,IAAI,2CAA2C,CACnD,CAAC;IACJ,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAY,EAAE,KAAa;IAC3D,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAErC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,qBAAqB,CAC7B,GAAG,IAAI,wBAAwB,CAChC,CAAC;IACJ,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,MAAM,iBAAiB;IAkEF;IACA;IACA;IACA;IApEX,MAAM,GAAwC,IAAI,CAAC;IAC1C,SAAS,GAAG,IAAI,GAAG,EAA+B,CAAC;IACnD,aAAa,GAAG,IAAI,GAAG,EAAkC,CAAC;IACnE,wBAAwB,GAAG,KAAK,CAAC;IACjC,iBAAiB,GAAG,KAAK,CAAC;IAEjB,iBAAiB,GAAG,CAAC,OAAgB,EAAE,EAAE;QACxD,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,MAAM,YAAY,GAAG,OAA2C,CAAC;QACjE,IAAI,OAAO,YAAY,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC7C,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC3D,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAA4B;YACrC,OAAO,EAAE,YAAY,CAAC,OAAO;YAC7B,IAAI,EACF,YAAY,CAAC,IAAI,IAAI,OAAO,YAAY,CAAC,IAAI,KAAK,QAAQ;gBACxD,CAAC,CAAE,YAAY,CAAC,IAAgC;gBAChD,CAAC,CAAC,EAAE;SACT,CAAC;QAEF,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC7B,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEe,iBAAiB,GAAG,CAAC,OAAgB,EAAE,EAAE;QACxD,MAAM,KAAK,GAAG,IAAI,KAAK,CACrB,mBAAmB,CAAC,OAAO,EAAE,qCAAqC,CAAC,CACpE,CAAC;QAEF,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YACnC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAC7B,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEe,mBAAmB,GAAG,GAAG,EAAE;QAC1C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,wBAAwB,CAAC;QACnD,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;QACrC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAE/B,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;YACxC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,YACmB,OAAe,EACf,IAAY,EACZ,IAA4B,EAC5B,aAA8C;QAH9C,YAAO,GAAP,OAAO,CAAQ;QACf,SAAI,GAAJ,IAAI,CAAQ;QACZ,SAAI,GAAJ,IAAI,CAAwB;QAC5B,kBAAa,GAAb,aAAa,CAAiC;IAC9D,CAAC;IAEJ,qBAAqB,CACnB,SAAiB,EACjB,OAA2C;QAE3C,MAAM,mBAAmB,GAAG,wBAAwB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAE7E,OAAO,IAAI,CAAC,SAAS,CACnB;YACE,cAAc,EAAE,wBAAwB;YACxC,OAAO,EAAE,gBAAgB,mBAAmB,EAAE;YAC9C,OAAO,EAAE;gBACP,UAAU,EAAE,mBAAmB;aAChC;SACF,EACD,OAAO,CACR,CAAC;IACJ,CAAC;IAED,iBAAiB,CACf,KAAa,EACb,OAA2C;QAE3C,MAAM,eAAe,GAAG,wBAAwB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAEjE,OAAO,IAAI,CAAC,SAAS,CACnB;YACE,cAAc,EAAE,oBAAoB;YACpC,OAAO,EAAE,YAAY,eAAe,EAAE;YACtC,OAAO,EAAE;gBACP,MAAM,EAAE,eAAe;aACxB;SACF,EACD,OAAO,CACR,CAAC;IACJ,CAAC;IAED,cAAc,CACZ,KAAa,EACb,OAA2C;QAE3C,MAAM,eAAe,GAAG,wBAAwB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAEjE,OAAO,IAAI,CAAC,SAAS,CACnB;YACE,cAAc,EAAE,iBAAiB;YACjC,OAAO,EAAE,SAAS,eAAe,EAAE;YACnC,OAAO,EAAE;gBACP,MAAM,EAAE,eAAe;aACxB;SACF,EACD,OAAO,CACR,CAAC;IACJ,CAAC;IAED,iBAAiB,CACf,eAAuB,EACvB,OAA2C;QAE3C,MAAM,yBAAyB,GAAG,gCAAgC,CAChE,iBAAiB,EACjB,eAAe,CAChB,CAAC;QAEF,OAAO,IAAI,CAAC,SAAS,CACnB;YACE,cAAc,EAAE,oBAAoB;YACpC,OAAO,EAAE,YAAY,yBAAyB,EAAE;YAChD,OAAO,EAAE;gBACP,gBAAgB,EAAE,yBAAyB;aAC5C;SACF,EACD,OAAO,CACR,CAAC;IACJ,CAAC;IAED,UAAU;QACR,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACrD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACjD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACjD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACzD,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;QACtC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACjC,CAAC;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACrD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACjD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACjD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACzD,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;YACtC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;QACrC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAEO,SAAS,CACf,UAAkC,EAClC,OAA2C;QAE3C,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAmB;YAC/B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC;QACF,MAAM,gBAAgB,GACpB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,EAAkB,CAAC;QACtE,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,IAAI,KAAK,CAAC,CAAC;QAExD,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC/B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QACzD,IAAI,mBAAmB,EAAE,CAAC;YACxB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YACvD,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC;gBACpF,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,WAAW,EAAE,GAAG,EAAE;gBAChB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBACzD,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,OAAO;gBACT,CAAC;gBAED,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC3B,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;oBACzB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;oBAC1C,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBAChD,CAAC;gBAED,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;oBAC9B,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,CAAC;qBAAM,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;oBAChC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;IAEO,YAAY;QAClB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBAC3B,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;oBAClC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;gBAChC,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACxB,CAAC;YAED,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;YAChC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC/C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC3C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC3C,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,EAAE,CAAC;QAEjB,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED,MAAM,UAAU,oBAAoB,CAClC,OAAe,EACf,MAAmC;IAEnC,OAAO,IAAI,iBAAiB,CAC1B,OAAO,EACP,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,EACjC,wBAAwB,CAAC,MAAM,CAAC,IAAI,CAAC,EACrC,MAAM,CAAC,aAAa,IAAI,oBAAoB,CAC7C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { GlobiguardActionsClient, GlobiguardActionsReadClient } from "@globiguard/contracts";
2
+ import type { GlobiguardTransport } from "../client.js";
3
+ export declare function createActionsReadClient(transport: GlobiguardTransport): GlobiguardActionsReadClient;
4
+ export declare function createActionsClient(transport: GlobiguardTransport): GlobiguardActionsClient;
5
+ //# sourceMappingURL=actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/resources/actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,uBAAuB,EACvB,2BAA2B,EAK5B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGxD,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,mBAAmB,GAC7B,2BAA2B,CAwC7B;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,mBAAmB,GAC7B,uBAAuB,CAuBzB"}
@@ -0,0 +1,48 @@
1
+ import { encodePathSegment } from "./path-segments.js";
2
+ export function createActionsReadClient(transport) {
3
+ return {
4
+ getAuthorization(authorizationId) {
5
+ const encodedAuthorizationId = encodePathSegment(authorizationId);
6
+ return transport.request(`/v1/actions/authorizations/${encodedAuthorizationId}`);
7
+ },
8
+ getApproval(approvalId) {
9
+ const encodedApprovalId = encodePathSegment(approvalId);
10
+ return transport.request(`/v1/actions/approvals/${encodedApprovalId}`);
11
+ },
12
+ listEvidence(request) {
13
+ const query = request
14
+ ? {
15
+ authorizationId: request.authorizationId,
16
+ approvalId: request.approvalId,
17
+ workflowRunId: request.workflowRunId
18
+ }
19
+ : undefined;
20
+ return transport.request("/v1/actions/evidence", {
21
+ query
22
+ });
23
+ },
24
+ getEvidence(evidenceRefId) {
25
+ const encodedEvidenceRefId = encodePathSegment(evidenceRefId);
26
+ return transport.request(`/v1/actions/evidence/${encodedEvidenceRefId}`);
27
+ }
28
+ };
29
+ }
30
+ export function createActionsClient(transport) {
31
+ const readClient = createActionsReadClient(transport);
32
+ return {
33
+ ...readClient,
34
+ authorize(request) {
35
+ return transport.request("/v1/actions/authorize", {
36
+ method: "POST",
37
+ body: request
38
+ });
39
+ },
40
+ createApproval(request) {
41
+ return transport.request("/v1/actions/approvals", {
42
+ method: "POST",
43
+ body: request
44
+ });
45
+ }
46
+ };
47
+ }
48
+ //# sourceMappingURL=actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/resources/actions.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,UAAU,uBAAuB,CACrC,SAA8B;IAE9B,OAAO;QACL,gBAAgB,CAAC,eAAuB;YACtC,MAAM,sBAAsB,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAC;YAElE,OAAO,SAAS,CAAC,OAAO,CACtB,8BAA8B,sBAAsB,EAAE,CACvD,CAAC;QACJ,CAAC;QAED,WAAW,CAAC,UAAkB;YAC5B,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;YAExD,OAAO,SAAS,CAAC,OAAO,CACtB,yBAAyB,iBAAiB,EAAE,CAC7C,CAAC;QACJ,CAAC;QAED,YAAY,CAAC,OAAuC;YAClD,MAAM,KAAK,GAAG,OAAO;gBACnB,CAAC,CAAC;oBACE,eAAe,EAAE,OAAO,CAAC,eAAe;oBACxC,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,aAAa,EAAE,OAAO,CAAC,aAAa;iBACrC;gBACH,CAAC,CAAC,SAAS,CAAC;YAEd,OAAO,SAAS,CAAC,OAAO,CAA0B,sBAAsB,EAAE;gBACxE,KAAK;aACN,CAAC,CAAC;QACL,CAAC;QAED,WAAW,CAAC,aAAqB;YAC/B,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;YAE9D,OAAO,SAAS,CAAC,OAAO,CACtB,wBAAwB,oBAAoB,EAAE,CAC/C,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,SAA8B;IAE9B,MAAM,UAAU,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAEtD,OAAO;QACL,GAAG,UAAU;QAEb,SAAS,CAAC,OAA6C;YACrD,OAAO,SAAS,CAAC,OAAO,CACtB,uBAAuB,EACvB;gBACE,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,OAAO;aACd,CACF,CAAC;QACJ,CAAC;QAED,cAAc,CAAC,OAAwC;YACrD,OAAO,SAAS,CAAC,OAAO,CAAqB,uBAAuB,EAAE;gBACpE,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,OAAO;aACd,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { GlobiguardAuditClient, GlobiguardAuditReadClient } from "@globiguard/contracts";
2
+ import type { GlobiguardTransport } from "../client.js";
3
+ export declare function createAuditReadClient(transport: GlobiguardTransport): GlobiguardAuditReadClient;
4
+ export declare function createAuditClient(transport: GlobiguardTransport): GlobiguardAuditClient;
5
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/resources/audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EAOrB,yBAAyB,EAI1B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAaxD,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,mBAAmB,GAC7B,yBAAyB,CA+C3B;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,mBAAmB,GAC7B,qBAAqB,CAuBvB"}
@@ -0,0 +1,62 @@
1
+ import { encodePathSegment } from "./path-segments.js";
2
+ export function createAuditReadClient(transport) {
3
+ return {
4
+ list(request) {
5
+ const query = request
6
+ ? {
7
+ from: request.from,
8
+ to: request.to,
9
+ decision: request.decision,
10
+ workflow: request.workflowRunId,
11
+ page: request.page,
12
+ limit: request.limit
13
+ }
14
+ : undefined;
15
+ return transport.request("/v1/audit", {
16
+ query
17
+ });
18
+ },
19
+ get(auditEventId) {
20
+ const encodedAuditEventId = encodePathSegment(auditEventId);
21
+ return transport.request(`/v1/audit/${encodedAuditEventId}`);
22
+ },
23
+ getEvidencePackageSummary(evidencePackageId) {
24
+ const encodedEvidencePackageId = encodePathSegment(evidencePackageId);
25
+ return transport.request(`/v1/audit/evidence-packages/${encodedEvidencePackageId}/summary`);
26
+ },
27
+ getIncidentReplay(request) {
28
+ return transport.request("/v1/audit/incident-replay", {
29
+ query: {
30
+ workflowRunId: request.workflowRunId,
31
+ correlationId: request.correlationId,
32
+ queueEntryId: request.queueEntryId,
33
+ auditEventId: request.auditEventId,
34
+ authorizationId: request.authorizationId
35
+ }
36
+ });
37
+ }
38
+ };
39
+ }
40
+ export function createAuditClient(transport) {
41
+ const readClient = createAuditReadClient(transport);
42
+ return {
43
+ ...readClient,
44
+ export(request) {
45
+ return transport
46
+ .request("/v1/audit/export", {
47
+ method: "POST",
48
+ body: request ?? {}
49
+ })
50
+ .then((response) => ({
51
+ status: response.status,
52
+ artifactExportId: response.artifact_export_id,
53
+ evidencePackageId: response.evidence_package_id,
54
+ format: response.format,
55
+ checksum: response.checksum,
56
+ artifactJson: response.artifact_json,
57
+ artifact: response.artifact
58
+ }));
59
+ }
60
+ };
61
+ }
62
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/resources/audit.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAYvD,MAAM,UAAU,qBAAqB,CACnC,SAA8B;IAE9B,OAAO;QACL,IAAI,CAAC,OAAoC;YACvC,MAAM,KAAK,GAAG,OAAO;gBACnB,CAAC,CAAC;oBACE,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,EAAE,EAAE,OAAO,CAAC,EAAE;oBACd,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,QAAQ,EAAE,OAAO,CAAC,aAAa;oBAC/B,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,KAAK,EAAE,OAAO,CAAC,KAAK;iBACrB;gBACH,CAAC,CAAC,SAAS,CAAC;YAEd,OAAO,SAAS,CAAC,OAAO,CAA8B,WAAW,EAAE;gBACjE,KAAK;aACN,CAAC,CAAC;QACL,CAAC;QAED,GAAG,CAAC,YAAoB;YACtB,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAE5D,OAAO,SAAS,CAAC,OAAO,CACtB,aAAa,mBAAmB,EAAE,CACnC,CAAC;QACJ,CAAC;QAED,yBAAyB,CAAC,iBAAyB;YACjD,MAAM,wBAAwB,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;YAEtE,OAAO,SAAS,CAAC,OAAO,CACtB,+BAA+B,wBAAwB,UAAU,CAClE,CAAC;QACJ,CAAC;QAED,iBAAiB,CAAC,OAA8C;YAC9D,OAAO,SAAS,CAAC,OAAO,CAA2B,2BAA2B,EAAE;gBAC9E,KAAK,EAAE;oBACL,aAAa,EAAE,OAAO,CAAC,aAAa;oBACpC,aAAa,EAAE,OAAO,CAAC,aAAa;oBACpC,YAAY,EAAE,OAAO,CAAC,YAAY;oBAClC,YAAY,EAAE,OAAO,CAAC,YAAY;oBAClC,eAAe,EAAE,OAAO,CAAC,eAAe;iBACzC;aACF,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,SAA8B;IAE9B,MAAM,UAAU,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAEpD,OAAO;QACL,GAAG,UAAU;QAEb,MAAM,CAAC,OAAsC;YAC3C,OAAO,SAAS;iBACb,OAAO,CAAmC,kBAAkB,EAAE;gBAC7D,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,OAAO,IAAI,EAAE;aACpB,CAAC;iBACD,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,gBAAgB,EAAE,QAAQ,CAAC,kBAAkB;gBAC7C,iBAAiB,EAAE,QAAQ,CAAC,mBAAmB;gBAC/C,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,YAAY,EAAE,QAAQ,CAAC,aAAa;gBACpC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;aAC5B,CAAC,CAAC,CAAC;QACR,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { GlobiguardInstallsClient } from "@globiguard/contracts";
2
+ import type { GlobiguardTransport } from "../client.js";
3
+ export declare function createInstallsClient(transport: GlobiguardTransport): GlobiguardInstallsClient;
4
+ //# sourceMappingURL=installs.d.ts.map