@tangle-network/sandbox 0.2.1 → 0.3.0

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.
@@ -1,271 +1 @@
1
- import { createHmac, timingSafeEqual } from "node:crypto";
2
- //#region src/auth/tokens.ts
3
- /**
4
- * JWT Token Utilities
5
- *
6
- * Token generation and verification using HMAC-SHA256. Server-only
7
- * (uses Node.js `crypto`).
8
- */
9
- /**
10
- * Base64URL encode (RFC 7515).
11
- */
12
- function base64UrlEncode(data) {
13
- return (typeof data === "string" ? Buffer.from(data) : data).toString("base64").replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
14
- }
15
- /**
16
- * Base64URL decode (RFC 7515) to raw bytes. Returns `null` if the
17
- * input contains characters outside the base64url alphabet.
18
- */
19
- function decodeBase64UrlToBuffer(input) {
20
- if (!/^[A-Za-z0-9_-]*$/.test(input)) return null;
21
- const padded = input + "=".repeat((4 - input.length % 4) % 4);
22
- return Buffer.from(padded.replace(/-/g, "+").replace(/_/g, "/"), "base64");
23
- }
24
- /**
25
- * Create HMAC-SHA256 signature.
26
- */
27
- function createSignature(data, secret) {
28
- return base64UrlEncode(createHmac("sha256", secret).update(data).digest());
29
- }
30
- /**
31
- * JWT header (always the same for our use case).
32
- */
33
- const JWT_HEADER = base64UrlEncode(JSON.stringify({
34
- alg: "HS256",
35
- typ: "JWT"
36
- }));
37
- function issueToken(signingSecret, payload, ttlMinutes) {
38
- const now = Math.floor(Date.now() / 1e3);
39
- const fullPayload = {
40
- ...payload,
41
- iat: now,
42
- exp: now + ttlMinutes * 60
43
- };
44
- const data = `${JWT_HEADER}.${base64UrlEncode(JSON.stringify(fullPayload))}`;
45
- return `${data}.${createSignature(data, signingSecret)}`;
46
- }
47
- /**
48
- * Issue a read token (JWT) for WebSocket authentication.
49
- *
50
- * @param signingSecret - The product's signing secret
51
- * @param payload - Token payload (without iat/exp/typ, those are added)
52
- * @param ttlMinutes - Token TTL in minutes
53
- */
54
- function issueReadToken(signingSecret, payload, ttlMinutes) {
55
- return issueToken(signingSecret, {
56
- ...payload,
57
- typ: "read"
58
- }, ttlMinutes);
59
- }
60
- /**
61
- * Issue a session-scoped token (JWT) for WebSocket authentication.
62
- * Grants access to a single session's events.
63
- */
64
- function issueSessionScopedToken(signingSecret, payload, ttlMinutes) {
65
- return issueReadToken(signingSecret, payload, ttlMinutes);
66
- }
67
- /**
68
- * Issue a project-scoped token (JWT) for WebSocket authentication.
69
- * Grants access to all sessions within a single project.
70
- */
71
- function issueProjectScopedToken(signingSecret, payload, ttlMinutes) {
72
- return issueReadToken(signingSecret, payload, ttlMinutes);
73
- }
74
- /**
75
- * Issue a batch-scoped token (JWT) for WebSocket authentication.
76
- * Grants access to multiple projects (organization-level access).
77
- */
78
- function issueBatchScopedToken(signingSecret, payload, ttlMinutes) {
79
- return issueReadToken(signingSecret, payload, ttlMinutes);
80
- }
81
- /**
82
- * Issue a collaboration-scoped token (JWT) for collaborative document access.
83
- * Grants read or write access to a single document in one project.
84
- */
85
- function issueCollaborationToken(signingSecret, payload, ttlMinutes) {
86
- return issueToken(signingSecret, {
87
- sub: payload.userId,
88
- sid: payload.sessionId,
89
- pid: payload.productId,
90
- cid: payload.sandboxId,
91
- typ: "collaboration",
92
- projectId: payload.projectId,
93
- documentId: payload.documentId,
94
- access: payload.access
95
- }, ttlMinutes);
96
- }
97
- /**
98
- * Decode a JWT **without verifying its signature**.
99
- *
100
- * The deliberately scary name is the API contract: an HMAC-signed token
101
- * whose signature has not been verified is a self-asserted blob of JSON,
102
- * not an authenticated claim. Treating its fields as authoritative
103
- * (e.g. `if (unsafeDecodeToken(t).sub === userId) grantAccess()`) is a
104
- * straightforward authorization bypass — an attacker can mint any
105
- * payload they like.
106
- *
107
- * Use this only when the signature has already been validated upstream
108
- * (e.g. by an API gateway that strips the token after verification),
109
- * for client-side `exp` peeking to decide whether to refresh, or for
110
- * routing/logging keyed off non-security-sensitive claims.
111
- *
112
- * For any access-control decision, use {@link verifyToken} instead.
113
- *
114
- * Returns `null` if the token is malformed.
115
- */
116
- function unsafeDecodeToken(token) {
117
- try {
118
- const parts = token.split(".");
119
- if (parts.length !== 3) return null;
120
- const padded = parts[1] + "=".repeat((4 - parts[1].length % 4) % 4);
121
- const decoded = Buffer.from(padded.replace(/-/g, "+").replace(/_/g, "/"), "base64").toString();
122
- return JSON.parse(decoded);
123
- } catch {
124
- return null;
125
- }
126
- }
127
- /**
128
- * Verify a JWT's HMAC-SHA256 signature against `signingSecret` and
129
- * check that it has not expired. Returns the decoded payload on
130
- * success, or `null` on any failure (malformed token, bad signature,
131
- * expired, or unexpected algorithm).
132
- *
133
- * Signature comparison is constant-time. Callers must use this — not
134
- * {@link unsafeDecodeToken} — for any authorization decision.
135
- *
136
- * @param token - The JWT to verify
137
- * @param signingSecret - The same secret used to issue the token
138
- * @param options.clockSkewSeconds - Tolerance for `exp` checks; default `0`
139
- */
140
- function verifyToken(token, signingSecret, options = {}) {
141
- try {
142
- const parts = token.split(".");
143
- if (parts.length !== 3) return null;
144
- const [headerB64, payloadB64, signatureB64] = parts;
145
- if (!headerB64 || !payloadB64 || !signatureB64) return null;
146
- let header;
147
- try {
148
- const headerPadded = headerB64 + "=".repeat((4 - headerB64.length % 4) % 4);
149
- const headerJson = Buffer.from(headerPadded.replace(/-/g, "+").replace(/_/g, "/"), "base64").toString();
150
- header = JSON.parse(headerJson);
151
- } catch {
152
- return null;
153
- }
154
- if (header.alg !== "HS256") return null;
155
- const expectedSig = createSignature(`${headerB64}.${payloadB64}`, signingSecret);
156
- const providedRaw = decodeBase64UrlToBuffer(signatureB64);
157
- const expectedRaw = decodeBase64UrlToBuffer(expectedSig);
158
- if (!providedRaw || !expectedRaw) return null;
159
- if (providedRaw.length !== expectedRaw.length) return null;
160
- if (!timingSafeEqual(providedRaw, expectedRaw)) return null;
161
- const payload = unsafeDecodeToken(token);
162
- if (!payload) return null;
163
- const now = Math.floor(Date.now() / 1e3);
164
- const skew = Math.max(0, options.clockSkewSeconds ?? 0);
165
- if (typeof payload.exp !== "number" || payload.exp + skew < now) return null;
166
- return payload;
167
- } catch {
168
- return null;
169
- }
170
- }
171
- /**
172
- * Get time until token expires (in seconds).
173
- * Returns negative if expired.
174
- */
175
- function getTokenTTL(payload) {
176
- const now = Math.floor(Date.now() / 1e3);
177
- return payload.exp - now;
178
- }
179
- /**
180
- * Check if token is expiring soon (within buffer seconds).
181
- */
182
- function isTokenExpiringSoon(payload, bufferSeconds = 60) {
183
- return getTokenTTL(payload) <= bufferSeconds;
184
- }
185
- //#endregion
186
- //#region src/auth/index.ts
187
- /**
188
- * Authentication Utilities
189
- *
190
- * Token issuance for application backends. Server-only (uses Node.js crypto).
191
- *
192
- * @example
193
- * ```typescript
194
- * import { ProductTokenIssuer } from "@tangle-network/sandbox/auth";
195
- *
196
- * const issuer = new ProductTokenIssuer({
197
- * productId: "my-product",
198
- * signingSecret: process.env.SANDBOX_SIGNING_SECRET!,
199
- * });
200
- *
201
- * const { token, expiresAt } = issuer.issue({
202
- * userId: "user_123",
203
- * sessionId: "sess_abc",
204
- * tier: "pro",
205
- * });
206
- * ```
207
- *
208
- * @packageDocumentation
209
- */
210
- /**
211
- * Token issuer for application backend services.
212
- *
213
- * Use this in your backend to issue read tokens for WebSocket connections.
214
- */
215
- var ProductTokenIssuer = class {
216
- productId;
217
- signingSecret;
218
- ttlMinutes;
219
- constructor(config) {
220
- this.productId = config.productId;
221
- this.signingSecret = config.signingSecret;
222
- this.ttlMinutes = {
223
- free: config.ttlMinutes?.free ?? 15,
224
- pro: config.ttlMinutes?.pro ?? 240,
225
- enterprise: config.ttlMinutes?.enterprise ?? 480
226
- };
227
- }
228
- /**
229
- * Issue a read token for a user session.
230
- */
231
- issue(params) {
232
- const tier = params.tier ?? "free";
233
- const ttl = this.ttlMinutes[tier] ?? this.ttlMinutes.free;
234
- return {
235
- token: issueReadToken(this.signingSecret, {
236
- sub: params.userId,
237
- sid: params.sessionId,
238
- pid: this.productId,
239
- cid: params.sandboxId
240
- }, ttl),
241
- expiresAt: Math.floor(Date.now() / 1e3) + ttl * 60
242
- };
243
- }
244
- /**
245
- * Issue a collaboration token for a single document.
246
- */
247
- issueCollaboration(params) {
248
- const tier = params.tier ?? "free";
249
- const ttl = this.ttlMinutes[tier] ?? this.ttlMinutes.free;
250
- return {
251
- token: issueCollaborationToken(this.signingSecret, {
252
- userId: params.userId,
253
- sessionId: params.sessionId,
254
- productId: this.productId,
255
- projectId: params.projectId,
256
- documentId: params.documentId,
257
- access: params.access,
258
- sandboxId: params.sandboxId
259
- }, ttl),
260
- expiresAt: Math.floor(Date.now() / 1e3) + ttl * 60
261
- };
262
- }
263
- /**
264
- * Get the TTL in minutes for a tier.
265
- */
266
- getTtlMinutes(tier = "free") {
267
- return this.ttlMinutes[tier] ?? this.ttlMinutes.free;
268
- }
269
- };
270
- //#endregion
271
- export { ProductTokenIssuer, getTokenTTL, isTokenExpiringSoon, issueBatchScopedToken, issueCollaborationToken, issueProjectScopedToken, issueReadToken, issueSessionScopedToken, unsafeDecodeToken, verifyToken };
1
+ const a0_0x3ba994=a0_0x413e;(function(_0x2d31d8,_0x8f3da2){const _0x486e9d=a0_0x413e,_0x4289cd=_0x2d31d8();while(!![]){try{const _0x4c6c68=-parseInt(_0x486e9d(0x20b))/0x1+-parseInt(_0x486e9d(0x216))/0x2+-parseInt(_0x486e9d(0x21d))/0x3*(parseInt(_0x486e9d(0x21f))/0x4)+-parseInt(_0x486e9d(0x1f8))/0x5*(parseInt(_0x486e9d(0x210))/0x6)+-parseInt(_0x486e9d(0x220))/0x7*(-parseInt(_0x486e9d(0x22a))/0x8)+parseInt(_0x486e9d(0x20f))/0x9+parseInt(_0x486e9d(0x1fd))/0xa;if(_0x4c6c68===_0x8f3da2)break;else _0x4289cd['push'](_0x4289cd['shift']());}catch(_0x4b1e60){_0x4289cd['push'](_0x4289cd['shift']());}}}(a0_0xc6f7,0x61fec));import{createHmac,timingSafeEqual}from'\x6e\x6f\x64\x65\x3a\x63\x72\x79\x70\x74\x6f';function base64UrlEncode(_0x5386e7){const _0x5e55e4=a0_0x413e,_0x3df189={'\x7a\x69\x4a\x67\x55':'\x73\x74\x72\x69\x6e\x67','\x43\x43\x44\x59\x59':'\x62\x61\x73\x65\x36\x34'};return(typeof _0x5386e7===_0x3df189[_0x5e55e4(0x1f1)]?Buffer['\x66\x72\x6f\x6d'](_0x5386e7):_0x5386e7)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](_0x3df189[_0x5e55e4(0x1fc)])[_0x5e55e4(0x213)](/\+/g,'\x2d')[_0x5e55e4(0x213)](/\//g,'\x5f')[_0x5e55e4(0x213)](/=+$/,'');}function decodeBase64UrlToBuffer(_0x27e4c6){const _0x5de3fc=a0_0x413e,_0x34990a={'\x67\x43\x61\x68\x61':function(_0x33955e,_0x3852a1){return _0x33955e+_0x3852a1;},'\x52\x54\x51\x77\x4a':function(_0x245545,_0x554c8a){return _0x245545%_0x554c8a;},'\x4e\x4b\x51\x6f\x47':'\x62\x61\x73\x65\x36\x34'};if(!/^[A-Za-z0-9_-]*$/['\x74\x65\x73\x74'](_0x27e4c6))return null;const _0x282ad2=_0x34990a[_0x5de3fc(0x1f7)](_0x27e4c6,'\x3d'[_0x5de3fc(0x1fe)](_0x34990a[_0x5de3fc(0x1f0)](0x4-_0x27e4c6[_0x5de3fc(0x214)]%0x4,0x4)));return Buffer[_0x5de3fc(0x22c)](_0x282ad2[_0x5de3fc(0x213)](/-/g,'\x2b')[_0x5de3fc(0x213)](/_/g,'\x2f'),_0x34990a[_0x5de3fc(0x201)]);}function createSignature(_0x50fa29,_0x150c48){const _0x56d9c0=a0_0x413e,_0x33aa41={'\x76\x46\x53\x65\x55':'\x73\x68\x61\x32\x35\x36'};return base64UrlEncode(createHmac(_0x33aa41['\x76\x46\x53\x65\x55'],_0x150c48)[_0x56d9c0(0x1f9)](_0x50fa29)[_0x56d9c0(0x1f5)]());}const JWT_HEADER=base64UrlEncode(JSON[a0_0x3ba994(0x209)]({'\x61\x6c\x67':a0_0x3ba994(0x1fb),'\x74\x79\x70':a0_0x3ba994(0x221)}));function issueToken(_0x502640,_0x268515,_0x4dab4e){const _0x5e36ee=a0_0x3ba994,_0x580a8f={'\x48\x6a\x41\x6a\x55':function(_0x4dbb64,_0x45fa15){return _0x4dbb64+_0x45fa15;},'\x6e\x55\x55\x62\x47':function(_0x4591fb,_0x599446){return _0x4591fb(_0x599446);}},_0x5cc8b9=Math[_0x5e36ee(0x224)](Date[_0x5e36ee(0x222)]()/0x3e8),_0x4e1c72={..._0x268515,'\x69\x61\x74':_0x5cc8b9,'\x65\x78\x70':_0x580a8f[_0x5e36ee(0x20d)](_0x5cc8b9,_0x4dab4e*0x3c)},_0x109a08=JWT_HEADER+'\x2e'+_0x580a8f[_0x5e36ee(0x223)](base64UrlEncode,JSON[_0x5e36ee(0x209)](_0x4e1c72));return _0x109a08+'\x2e'+createSignature(_0x109a08,_0x502640);}function issueReadToken(_0x7645ea,_0x29b7bb,_0x1ca4e8){return issueToken(_0x7645ea,{..._0x29b7bb,'\x74\x79\x70':'\x72\x65\x61\x64'},_0x1ca4e8);}function a0_0x413e(_0x113e8a,_0x234532){_0x113e8a=_0x113e8a-0x1f0;const _0xc6f7a2=a0_0xc6f7();let _0x413e1d=_0xc6f7a2[_0x113e8a];if(a0_0x413e['\x4c\x4e\x55\x64\x75\x76']===undefined){var _0x21ffd2=function(_0x5d8ec2){const _0x59afad='\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2b\x2f\x3d';let _0x1bdc10='',_0x17cc37='';for(let _0x138e1c=0x0,_0x187ba8,_0xf55bcc,_0x1639db=0x0;_0xf55bcc=_0x5d8ec2['\x63\x68\x61\x72\x41\x74'](_0x1639db++);~_0xf55bcc&&(_0x187ba8=_0x138e1c%0x4?_0x187ba8*0x40+_0xf55bcc:_0xf55bcc,_0x138e1c++%0x4)?_0x1bdc10+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](0xff&_0x187ba8>>(-0x2*_0x138e1c&0x6)):0x0){_0xf55bcc=_0x59afad['\x69\x6e\x64\x65\x78\x4f\x66'](_0xf55bcc);}for(let _0xe33635=0x0,_0x41cfb1=_0x1bdc10['\x6c\x65\x6e\x67\x74\x68'];_0xe33635<_0x41cfb1;_0xe33635++){_0x17cc37+='\x25'+('\x30\x30'+_0x1bdc10['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0xe33635)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](0x10))['\x73\x6c\x69\x63\x65'](-0x2);}return decodeURIComponent(_0x17cc37);};a0_0x413e['\x6c\x77\x68\x49\x59\x56']=_0x21ffd2,a0_0x413e['\x61\x43\x45\x4f\x4f\x46']={},a0_0x413e['\x4c\x4e\x55\x64\x75\x76']=!![];}const _0x3a1dc2=_0xc6f7a2[0x0],_0x396031=_0x113e8a+_0x3a1dc2,_0x2b6941=a0_0x413e['\x61\x43\x45\x4f\x4f\x46'][_0x396031];return!_0x2b6941?(_0x413e1d=a0_0x413e['\x6c\x77\x68\x49\x59\x56'](_0x413e1d),a0_0x413e['\x61\x43\x45\x4f\x4f\x46'][_0x396031]=_0x413e1d):_0x413e1d=_0x2b6941,_0x413e1d;}function issueSessionScopedToken(_0x5afe69,_0x345e59,_0x286fee){const _0x201922=a0_0x3ba994,_0x5b5f95={'\x6a\x57\x48\x45\x47':function(_0x47a0f9,_0x17c73e,_0xc392d8,_0x398ce6){return _0x47a0f9(_0x17c73e,_0xc392d8,_0x398ce6);}};return _0x5b5f95[_0x201922(0x227)](issueReadToken,_0x5afe69,_0x345e59,_0x286fee);}function issueProjectScopedToken(_0x4f7deb,_0xd599c4,_0x370d28){return issueReadToken(_0x4f7deb,_0xd599c4,_0x370d28);}function issueBatchScopedToken(_0x128abe,_0x45b626,_0x34760c){return issueReadToken(_0x128abe,_0x45b626,_0x34760c);}function issueCollaborationToken(_0x44b25f,_0x1f163b,_0x6e666e){const _0xc4564c=a0_0x3ba994;return issueToken(_0x44b25f,{'\x73\x75\x62':_0x1f163b[_0xc4564c(0x20a)],'\x73\x69\x64':_0x1f163b['\x73\x65\x73\x73\x69\x6f\x6e\x49\x64'],'\x70\x69\x64':_0x1f163b[_0xc4564c(0x22b)],'\x63\x69\x64':_0x1f163b[_0xc4564c(0x226)],'\x74\x79\x70':_0xc4564c(0x1f3),'\x70\x72\x6f\x6a\x65\x63\x74\x49\x64':_0x1f163b[_0xc4564c(0x1f4)],'\x64\x6f\x63\x75\x6d\x65\x6e\x74\x49\x64':_0x1f163b['\x64\x6f\x63\x75\x6d\x65\x6e\x74\x49\x64'],'\x61\x63\x63\x65\x73\x73':_0x1f163b['\x61\x63\x63\x65\x73\x73']},_0x6e666e);}function unsafeDecodeToken(_0xffcb8f){const _0x22d649=a0_0x3ba994,_0x4e6d60={'\x58\x41\x66\x42\x4f':function(_0xb30591,_0x4090ca){return _0xb30591+_0x4090ca;},'\x64\x6a\x64\x57\x68':'\x62\x61\x73\x65\x36\x34'};try{const _0xc9a5ec=_0xffcb8f[_0x22d649(0x22e)]('\x2e');if(_0xc9a5ec[_0x22d649(0x214)]!==0x3)return null;const _0x17d23c=_0x4e6d60[_0x22d649(0x217)](_0xc9a5ec[0x1],'\x3d'[_0x22d649(0x1fe)]((0x4-_0xc9a5ec[0x1][_0x22d649(0x214)]%0x4)%0x4)),_0x4a8e2a=Buffer[_0x22d649(0x22c)](_0x17d23c['\x72\x65\x70\x6c\x61\x63\x65'](/-/g,'\x2b')[_0x22d649(0x213)](/_/g,'\x2f'),_0x4e6d60[_0x22d649(0x202)])['\x74\x6f\x53\x74\x72\x69\x6e\x67']();return JSON[_0x22d649(0x206)](_0x4a8e2a);}catch{return null;}}function verifyToken(_0x216c3d,_0x1873cf,_0x14a5ce={}){const _0x17c0dd=a0_0x3ba994,_0x1cf145={'\x7a\x44\x67\x52\x58':function(_0x529703,_0x1fe9a7){return _0x529703!==_0x1fe9a7;},'\x77\x52\x57\x4e\x73':function(_0x22e969,_0x24de8f){return _0x22e969(_0x24de8f);},'\x4a\x43\x43\x4b\x43':function(_0x3d0f6d,_0x350e1a){return _0x3d0f6d/_0x350e1a;},'\x62\x57\x42\x69\x70':function(_0x2a8ab4,_0x5adba4){return _0x2a8ab4!==_0x5adba4;},'\x7a\x4c\x41\x74\x56':function(_0x162d2c,_0x4df47b){return _0x162d2c<_0x4df47b;}};try{const _0x4fd8a8=_0x216c3d['\x73\x70\x6c\x69\x74']('\x2e');if(_0x4fd8a8['\x6c\x65\x6e\x67\x74\x68']!==0x3)return null;const [_0x557ed2,_0x1deaf6,_0x3b2838]=_0x4fd8a8;if(!_0x557ed2||!_0x1deaf6||!_0x3b2838)return null;let _0x56a71f;try{const _0x4c83cd=_0x557ed2+'\x3d'[_0x17c0dd(0x1fe)]((0x4-_0x557ed2[_0x17c0dd(0x214)]%0x4)%0x4),_0x3160b6=Buffer[_0x17c0dd(0x22c)](_0x4c83cd[_0x17c0dd(0x213)](/-/g,'\x2b')[_0x17c0dd(0x213)](/_/g,'\x2f'),_0x17c0dd(0x1f2))[_0x17c0dd(0x21b)]();_0x56a71f=JSON[_0x17c0dd(0x206)](_0x3160b6);}catch{return null;}if(_0x56a71f[_0x17c0dd(0x207)]!==_0x17c0dd(0x1fb))return null;const _0x157580=createSignature(_0x557ed2+'\x2e'+_0x1deaf6,_0x1873cf),_0x5e6f32=decodeBase64UrlToBuffer(_0x3b2838),_0x38c682=decodeBase64UrlToBuffer(_0x157580);if(!_0x5e6f32||!_0x38c682)return null;if(_0x1cf145[_0x17c0dd(0x20c)](_0x5e6f32[_0x17c0dd(0x214)],_0x38c682[_0x17c0dd(0x214)]))return null;if(!timingSafeEqual(_0x5e6f32,_0x38c682))return null;const _0x19bd63=_0x1cf145[_0x17c0dd(0x20e)](unsafeDecodeToken,_0x216c3d);if(!_0x19bd63)return null;const _0x434519=Math[_0x17c0dd(0x224)](_0x1cf145['\x4a\x43\x43\x4b\x43'](Date['\x6e\x6f\x77'](),0x3e8)),_0x62fb90=Math[_0x17c0dd(0x229)](0x0,_0x14a5ce[_0x17c0dd(0x225)]??0x0);if(_0x1cf145['\x62\x57\x42\x69\x70'](typeof _0x19bd63[_0x17c0dd(0x218)],'\x6e\x75\x6d\x62\x65\x72')||_0x1cf145[_0x17c0dd(0x22d)](_0x19bd63['\x65\x78\x70']+_0x62fb90,_0x434519))return null;return _0x19bd63;}catch{return null;}}function getTokenTTL(_0x336a7a){const _0x42f189=a0_0x3ba994,_0x22fa52={'\x6a\x6e\x4a\x48\x48':function(_0x3378a3,_0x40c5b1){return _0x3378a3/_0x40c5b1;},'\x53\x5a\x75\x6f\x49':function(_0x33186a,_0x8b12e6){return _0x33186a-_0x8b12e6;}},_0x332ed3=Math[_0x42f189(0x224)](_0x22fa52[_0x42f189(0x203)](Date[_0x42f189(0x222)](),0x3e8));return _0x22fa52[_0x42f189(0x1fa)](_0x336a7a['\x65\x78\x70'],_0x332ed3);}function isTokenExpiringSoon(_0x213570,_0x2f4974=0x3c){const _0x8a22cd={'\x58\x58\x56\x48\x53':function(_0x37514f,_0x49695c){return _0x37514f(_0x49695c);}};return _0x8a22cd['\x58\x58\x56\x48\x53'](getTokenTTL,_0x213570)<=_0x2f4974;}var ProductTokenIssuer=class{[a0_0x3ba994(0x22b)];[a0_0x3ba994(0x204)];[a0_0x3ba994(0x21e)];constructor(_0x69c29f){const _0x23d566=a0_0x3ba994;this['\x70\x72\x6f\x64\x75\x63\x74\x49\x64']=_0x69c29f[_0x23d566(0x22b)],this[_0x23d566(0x204)]=_0x69c29f['\x73\x69\x67\x6e\x69\x6e\x67\x53\x65\x63\x72\x65\x74'],this['\x74\x74\x6c\x4d\x69\x6e\x75\x74\x65\x73']={'\x66\x72\x65\x65':_0x69c29f['\x74\x74\x6c\x4d\x69\x6e\x75\x74\x65\x73']?.['\x66\x72\x65\x65']??0xf,'\x70\x72\x6f':_0x69c29f[_0x23d566(0x21e)]?.[_0x23d566(0x215)]??0xf0,'\x65\x6e\x74\x65\x72\x70\x72\x69\x73\x65':_0x69c29f[_0x23d566(0x21e)]?.[_0x23d566(0x1f6)]??0x1e0};}[a0_0x3ba994(0x21c)](_0x1602fb){const _0x17b313=a0_0x3ba994,_0x14c987={'\x77\x51\x48\x4b\x52':'\x66\x72\x65\x65','\x6b\x4c\x5a\x68\x56':function(_0x32e332,_0x2bb638,_0x172418,_0xb754d1){return _0x32e332(_0x2bb638,_0x172418,_0xb754d1);}},_0x497989=_0x1602fb[_0x17b313(0x1ff)]??_0x14c987[_0x17b313(0x22f)],_0x2e10aa=this[_0x17b313(0x21e)][_0x497989]??this[_0x17b313(0x21e)][_0x17b313(0x219)];return{'\x74\x6f\x6b\x65\x6e':_0x14c987[_0x17b313(0x200)](issueReadToken,this['\x73\x69\x67\x6e\x69\x6e\x67\x53\x65\x63\x72\x65\x74'],{'\x73\x75\x62':_0x1602fb[_0x17b313(0x20a)],'\x73\x69\x64':_0x1602fb['\x73\x65\x73\x73\x69\x6f\x6e\x49\x64'],'\x70\x69\x64':this[_0x17b313(0x22b)],'\x63\x69\x64':_0x1602fb[_0x17b313(0x226)]},_0x2e10aa),'\x65\x78\x70\x69\x72\x65\x73\x41\x74':Math[_0x17b313(0x224)](Date['\x6e\x6f\x77']()/0x3e8)+_0x2e10aa*0x3c};}[a0_0x3ba994(0x228)](_0xa3af8b){const _0x29d586=a0_0x3ba994,_0x199166={'\x6f\x42\x48\x42\x6e':function(_0xc8e6e1,_0x629ede){return _0xc8e6e1+_0x629ede;},'\x69\x4a\x6c\x78\x50':function(_0x469808,_0x4c48fd){return _0x469808*_0x4c48fd;}},_0x289cb4=_0xa3af8b[_0x29d586(0x1ff)]??_0x29d586(0x219),_0xf52d48=this[_0x29d586(0x21e)][_0x289cb4]??this[_0x29d586(0x21e)][_0x29d586(0x219)];return{'\x74\x6f\x6b\x65\x6e':issueCollaborationToken(this[_0x29d586(0x204)],{'\x75\x73\x65\x72\x49\x64':_0xa3af8b[_0x29d586(0x20a)],'\x73\x65\x73\x73\x69\x6f\x6e\x49\x64':_0xa3af8b['\x73\x65\x73\x73\x69\x6f\x6e\x49\x64'],'\x70\x72\x6f\x64\x75\x63\x74\x49\x64':this[_0x29d586(0x22b)],'\x70\x72\x6f\x6a\x65\x63\x74\x49\x64':_0xa3af8b[_0x29d586(0x1f4)],'\x64\x6f\x63\x75\x6d\x65\x6e\x74\x49\x64':_0xa3af8b[_0x29d586(0x211)],'\x61\x63\x63\x65\x73\x73':_0xa3af8b[_0x29d586(0x212)],'\x73\x61\x6e\x64\x62\x6f\x78\x49\x64':_0xa3af8b['\x73\x61\x6e\x64\x62\x6f\x78\x49\x64']},_0xf52d48),'\x65\x78\x70\x69\x72\x65\x73\x41\x74':_0x199166[_0x29d586(0x205)](Math['\x66\x6c\x6f\x6f\x72'](Date[_0x29d586(0x222)]()/0x3e8),_0x199166[_0x29d586(0x208)](_0xf52d48,0x3c))};}[a0_0x3ba994(0x21a)](_0x1f19cd='\x66\x72\x65\x65'){const _0x25b148=a0_0x3ba994;return this[_0x25b148(0x21e)][_0x1f19cd]??this[_0x25b148(0x21e)][_0x25b148(0x219)];}};function a0_0xc6f7(){const _0x4e58a9=['\x41\x30\x58\x41\x41\x66\x79','\x74\x4b\x54\x72\x42\x30\x43','\x7a\x67\x50\x4b\x76\x32\x47','\x41\x4d\x35\x6b\x73\x65\x47','\x43\x32\x4c\x4e\x42\x4d\x4c\x55\x7a\x31\x6e\x4c\x79\x33\x6a\x4c\x44\x61','\x42\x30\x6a\x69\x71\x4d\x34','\x43\x67\x66\x59\x43\x32\x75','\x79\x77\x58\x4e','\x41\x75\x50\x53\x45\x66\x61','\x43\x33\x72\x59\x41\x77\x35\x4e\x41\x77\x7a\x35','\x44\x78\x6e\x4c\x43\x4b\x4c\x4b','\x6e\x5a\x61\x59\x6d\x64\x6d\x5a\x76\x67\x54\x4e\x71\x4d\x72\x55','\x45\x4b\x72\x4e\x75\x4c\x47','\x73\x67\x50\x62\x41\x4c\x75','\x44\x31\x6a\x78\x74\x4e\x6d','\x6d\x4a\x71\x57\x6e\x5a\x43\x59\x6e\x77\x50\x77\x76\x75\x58\x6a\x77\x71','\x6d\x74\x4b\x34\x77\x76\x62\x54\x42\x4b\x58\x57','\x7a\x67\x39\x4a\x44\x77\x31\x4c\x42\x4e\x72\x6a\x7a\x61','\x79\x77\x6e\x4a\x7a\x78\x6e\x5a','\x43\x4d\x76\x57\x42\x67\x66\x4a\x7a\x71','\x42\x67\x76\x55\x7a\x33\x72\x4f','\x43\x68\x6a\x56','\x6e\x5a\x47\x5a\x6e\x64\x79\x34\x41\x78\x66\x7a\x45\x75\x7a\x6a','\x77\x65\x66\x4d\x71\x4b\x38','\x7a\x78\x48\x57','\x7a\x4e\x6a\x4c\x7a\x71','\x7a\x32\x76\x30\x76\x68\x72\x53\x74\x77\x4c\x55\x44\x78\x72\x4c\x43\x57','\x44\x67\x39\x74\x44\x68\x6a\x50\x42\x4d\x43','\x41\x78\x6e\x5a\x44\x77\x75','\x6e\x74\x4b\x33\x6f\x78\x66\x4c\x72\x67\x50\x73\x43\x61','\x44\x68\x72\x53\x74\x77\x4c\x55\x44\x78\x72\x4c\x43\x57','\x6f\x74\x75\x32\x76\x32\x58\x71\x7a\x32\x35\x32','\x6e\x30\x58\x72\x42\x32\x54\x66\x44\x47','\x73\x4c\x44\x75','\x42\x4d\x39\x33','\x42\x4c\x76\x76\x79\x4b\x43','\x7a\x4d\x58\x56\x42\x33\x69','\x79\x32\x58\x56\x79\x32\x54\x74\x41\x32\x76\x33\x75\x32\x76\x4a\x42\x32\x35\x4b\x43\x57','\x43\x32\x66\x55\x7a\x67\x6a\x56\x45\x65\x4c\x4b','\x41\x4c\x44\x69\x72\x75\x43','\x41\x78\x6e\x5a\x44\x77\x76\x64\x42\x32\x58\x53\x79\x77\x6a\x56\x43\x4d\x66\x30\x41\x77\x39\x55','\x42\x77\x66\x34','\x6d\x5a\x71\x30\x6d\x64\x75\x57\x6e\x67\x66\x64\x42\x66\x6a\x64\x75\x71','\x43\x68\x6a\x56\x7a\x68\x76\x4a\x44\x65\x4c\x4b','\x7a\x4e\x6a\x56\x42\x71','\x45\x4b\x58\x62\x44\x66\x79','\x43\x33\x62\x53\x41\x78\x71','\x44\x31\x66\x69\x73\x31\x69','\x75\x4c\x72\x72\x44\x30\x4f','\x45\x4d\x4c\x6b\x7a\x31\x75','\x79\x4d\x66\x5a\x7a\x74\x79\x30','\x79\x32\x39\x53\x42\x67\x66\x49\x42\x33\x6a\x48\x44\x67\x4c\x56\x42\x47','\x43\x68\x6a\x56\x41\x4d\x76\x4a\x44\x65\x4c\x4b','\x7a\x67\x4c\x4e\x7a\x78\x6e\x30','\x7a\x77\x35\x30\x7a\x78\x6a\x57\x43\x4d\x4c\x5a\x7a\x71','\x7a\x30\x6e\x48\x41\x67\x65','\x6d\x4a\x71\x58\x6e\x64\x76\x73\x42\x75\x50\x53\x43\x66\x61','\x44\x78\x62\x4b\x79\x78\x72\x4c','\x75\x31\x50\x31\x42\x30\x4b','\x73\x66\x6d\x59\x6e\x74\x79','\x71\x30\x6e\x65\x77\x76\x4b','\x6d\x74\x71\x5a\x6d\x5a\x69\x31\x6d\x74\x62\x59\x77\x67\x39\x62\x71\x31\x47','\x43\x4d\x76\x57\x7a\x77\x66\x30','\x44\x67\x4c\x4c\x43\x47'];a0_0xc6f7=function(){return _0x4e58a9;};return a0_0xc6f7();}export{ProductTokenIssuer,getTokenTTL,isTokenExpiringSoon,issueBatchScopedToken,issueCollaborationToken,issueProjectScopedToken,issueReadToken,issueSessionScopedToken,unsafeDecodeToken,verifyToken};
@@ -1,4 +1,4 @@
1
- import { $ as FleetExecDispatchOptions, A as CreateIntelligenceReportOptions, An as SandboxFleetWorkspaceReconcileResult, Bt as PromptResult, C as BatchResult, Cn as SandboxFleetToken, Dn as SandboxFleetTraceOptions, G as ExecOptions, Gt as PublicTemplateInfo, Jn as SecretsManager, Jt as PublishPublicTemplateVersionOptions, K as ExecResult, Kt as PublicTemplateVersionInfo, M as CreateSandboxFleetTokenOptions, Mn as SandboxFleetWorkspaceSnapshotResult, N as CreateSandboxFleetWithCoordinatorOptions, Nn as SandboxInfo, On as SandboxFleetUsage, P as CreateSandboxOptions, Q as FleetDispatchStreamOptions, Qt as ReconcileSandboxFleetsResult, Rt as PromptInputPart, S as BatchOptions, X as FleetDispatchResultBuffer, Xt as ReapExpiredSandboxFleetsResult, Y as FleetDispatchCancelResult, Yt as ReapExpiredSandboxFleetsOptions, Z as FleetDispatchResultBufferOptions, Zt as ReconcileSandboxFleetsOptions, _n as SandboxFleetMachineRecord, _r as UsageInfo, a as TraceExportSink, bt as ListSandboxFleetOptions, cn as SandboxFleetCostEstimate, dn as SandboxFleetDriverCapability, et as FleetExecDispatchResult, fr as TokenRefreshHandler, gt as IntelligenceReportCompareTo, ht as IntelligenceReportBudget, i as TraceExportResult, in as SandboxEnvironment, ir as SubscriptionInfo, j as CreateSandboxFleetOptions, jn as SandboxFleetWorkspaceRestoreResult, m as AttachSandboxFleetMachineOptions, mt as IntelligenceReport, n as SandboxInstance, nn as SandboxClientConfig, nr as SshKeysManager, nt as FleetPromptDispatchOptions, on as SandboxFleetArtifact, pn as SandboxFleetInfo, qt as PublishPublicTemplateOptions, rt as FleetPromptDispatchResult, sn as SandboxFleetArtifactSpec, t as HttpClient, tt as FleetMachineId, un as SandboxFleetDispatchResponse, vt as IntelligenceReportWindow, w as BatchTask, wn as SandboxFleetTraceBundle, x as BatchEvent, xn as SandboxFleetOperationsSummary, xt as ListSandboxOptions, yn as SandboxFleetManifest, zt as PromptOptions } from "./sandbox-aBpWqler.js";
1
+ import { A as BatchTask, Ar as UsageInfo, Bn as SandboxFleetUsage, Cn as SandboxFleetDriverCapability, D as BatchEvent, Dt as IntelligenceReportCompareTo, Et as IntelligenceReportBudget, Fn as SandboxFleetToken, G as CreateSandboxOptions, Gn as SandboxInfo, H as CreateSandboxFleetOptions, Hn as SandboxFleetWorkspaceReconcileResult, In as SandboxFleetTraceBundle, Mt as ListSandboxFleetOptions, Nn as SandboxFleetOperationsSummary, Nt as ListSandboxOptions, O as BatchOptions, Qt as PromptResult, Sn as SandboxFleetDispatchResponse, Tn as SandboxFleetInfo, Tr as TokenRefreshHandler, Tt as IntelligenceReport, U as CreateSandboxFleetTokenOptions, Un as SandboxFleetWorkspaceRestoreResult, V as CreateIntelligenceReportOptions, W as CreateSandboxFleetWithCoordinatorOptions, Wn as SandboxFleetWorkspaceSnapshotResult, Xt as PromptInputPart, Zt as PromptOptions, _r as SubscriptionInfo, a as TraceExportSink, an as PublishPublicTemplateOptions, b as AttachSandboxFleetMachineOptions, bn as SandboxFleetCostEstimate, cn as ReapExpiredSandboxFleetsResult, ct as FleetDispatchResultBufferOptions, dt as FleetExecDispatchResult, ft as FleetMachineId, gn as SandboxEnvironment, hr as SshKeysManager, i as TraceExportResult, in as PublicTemplateVersionInfo, jn as SandboxFleetManifest, k as BatchResult, kn as SandboxFleetMachineRecord, kt as IntelligenceReportWindow, ln as ReconcileSandboxFleetsOptions, lt as FleetDispatchStreamOptions, mn as SandboxClientConfig, mt as FleetPromptDispatchResult, n as SandboxInstance, nt as ExecOptions, on as PublishPublicTemplateVersionOptions, or as SecretsManager, ot as FleetDispatchCancelResult, pt as FleetPromptDispatchOptions, rn as PublicTemplateInfo, rt as ExecResult, sn as ReapExpiredSandboxFleetsOptions, st as FleetDispatchResultBuffer, t as HttpClient, un as ReconcileSandboxFleetsResult, ut as FleetExecDispatchOptions, vn as SandboxFleetArtifact, yn as SandboxFleetArtifactSpec, zn as SandboxFleetTraceOptions } from "./sandbox-CpK8etqP.js";
2
2
 
3
3
  //#region src/lib/sse-parser.d.ts
4
4
  /**
@@ -1047,131 +1047,4 @@ declare class TeamsClient {
1047
1047
  * Alias for SandboxClient for cleaner imports.
1048
1048
  */
1049
1049
  //#endregion
1050
- //#region src/errors.d.ts
1051
- /**
1052
- * Sandbox SDK Errors
1053
- *
1054
- * Error classes for the Sandbox client SDK.
1055
- */
1056
- /**
1057
- * Base error class for all Sandbox SDK errors.
1058
- */
1059
- declare class SandboxError extends Error {
1060
- /** HTTP status code if applicable */
1061
- readonly status?: number;
1062
- /** Error code for programmatic handling */
1063
- readonly code: string;
1064
- /** Best-effort origin of the failing request */
1065
- readonly origin?: SandboxErrorOrigin;
1066
- /** Request path or endpoint when known */
1067
- readonly endpoint?: string;
1068
- /** Retry-after duration in ms when surfaced by the upstream */
1069
- readonly retryAfterMs?: number;
1070
- /** Sidecar version when the runtime emitted it */
1071
- readonly sidecarVersion?: string;
1072
- /** Sidecar image/tag/sha when the runtime emitted it */
1073
- readonly containerImage?: string;
1074
- constructor(message: string, code: string, status?: number, metadata?: SandboxErrorMetadata);
1075
- }
1076
- type SandboxErrorOrigin = "sidecar" | "sandbox-api" | "control-plane" | "runtime" | "unknown";
1077
- interface SandboxErrorMetadata {
1078
- origin?: SandboxErrorOrigin;
1079
- endpoint?: string;
1080
- retryAfterMs?: number;
1081
- sidecarVersion?: string;
1082
- containerImage?: string;
1083
- }
1084
- type SandboxErrorJson = string | number | boolean | null | {
1085
- [key: string]: SandboxErrorJson;
1086
- } | SandboxErrorJson[];
1087
- type SandboxFailureDetail = {
1088
- [key: string]: SandboxErrorJson;
1089
- };
1090
- /**
1091
- * Authentication failed or API key is invalid.
1092
- */
1093
- declare class AuthError extends SandboxError {
1094
- constructor(message?: string, metadata?: SandboxErrorMetadata);
1095
- }
1096
- /**
1097
- * The requested resource was not found.
1098
- */
1099
- declare class NotFoundError extends SandboxError {
1100
- /** The resource type that was not found */
1101
- readonly resourceType: string;
1102
- /** The resource ID that was not found */
1103
- readonly resourceId: string;
1104
- constructor(resourceType: string, resourceId: string, metadata?: SandboxErrorMetadata);
1105
- }
1106
- /**
1107
- * Account quota or rate limit exceeded.
1108
- */
1109
- declare class QuotaError extends SandboxError {
1110
- /** The type of quota that was exceeded */
1111
- readonly quotaType: string;
1112
- /** Current usage */
1113
- readonly current?: number;
1114
- /** Maximum allowed */
1115
- readonly limit?: number;
1116
- /** Suggested retry-after duration in ms */
1117
- readonly retryAfterMs?: number;
1118
- constructor(quotaType: string, message?: string, current?: number, limit?: number, metadata?: SandboxErrorMetadata, status?: number);
1119
- }
1120
- /**
1121
- * The requested capability is unavailable for the account, driver, or sandbox.
1122
- */
1123
- declare class CapabilityError extends SandboxError {
1124
- /** Capability or feature that was rejected when known */
1125
- readonly capability?: string;
1126
- constructor(message: string, code?: string, status?: number, metadata?: SandboxErrorMetadata, capability?: string);
1127
- }
1128
- /**
1129
- * A multi-resource operation failed for one or more branches.
1130
- */
1131
- declare class PartialFailureError extends SandboxError {
1132
- /** Per-resource failures returned by the API when available */
1133
- readonly failures?: SandboxFailureDetail[];
1134
- constructor(message: string, code?: string, status?: number, metadata?: SandboxErrorMetadata, failures?: SandboxFailureDetail[]);
1135
- }
1136
- /**
1137
- * The request was invalid or malformed.
1138
- */
1139
- declare class ValidationError extends SandboxError {
1140
- /** Field-level validation errors */
1141
- readonly fields?: Record<string, string>;
1142
- constructor(message: string, fields?: Record<string, string>, metadata?: SandboxErrorMetadata);
1143
- }
1144
- /**
1145
- * The sandbox is not in a valid state for the requested operation.
1146
- */
1147
- declare class StateError extends SandboxError {
1148
- /** Current state of the sandbox */
1149
- readonly currentState: string;
1150
- /** Required state for the operation */
1151
- readonly requiredState?: string;
1152
- constructor(message: string, currentState: string, requiredState?: string, metadata?: SandboxErrorMetadata);
1153
- }
1154
- /**
1155
- * The request timed out.
1156
- */
1157
- declare class TimeoutError extends SandboxError {
1158
- /** Timeout duration in milliseconds */
1159
- readonly timeoutMs: number;
1160
- constructor(timeoutMs: number, message?: string, metadata?: SandboxErrorMetadata);
1161
- }
1162
- /**
1163
- * A network or connection error occurred.
1164
- */
1165
- declare class NetworkError extends SandboxError {
1166
- /** The underlying error */
1167
- readonly cause?: Error;
1168
- constructor(message: string, causeOrMetadata?: Error | SandboxErrorMetadata, metadata?: SandboxErrorMetadata);
1169
- }
1170
- /**
1171
- * The server returned an unexpected error.
1172
- */
1173
- declare class ServerError extends SandboxError {
1174
- constructor(message: string, status?: number, metadata?: SandboxErrorMetadata);
1175
- }
1176
- //#endregion
1177
- export { IntegrationAction as A, TriggerRun as B, CreateAutomationInput as C, EndpointInfo as D, DeliveryAttempt as E, IntegrationScope as F, ParsedSSEEvent as G, SandboxFleet as H, IntegrationVerificationKind as I, parseSSEStream as K, IntegrationsManager as L, IntegrationDeliveryStatus as M, IntegrationPrincipalType as N, EndpointWithSecret as O, IntegrationProvider as P, RecipeManifest as R, ConnectionInfo as S, CreateTriggerInput as T, SandboxFleetClient as U, TriggerWithSecret as V, ParseSSEStreamOptions as W, SandboxClient as _, PartialFailureError as a, TeamMember as b, SandboxErrorJson as c, StateError as d, TimeoutError as f, InviteTeamMemberOptions as g, IntelligenceClient as h, NotFoundError as i, IntegrationActionKind as j, InstallRecipeInput as k, SandboxFailureDetail as l, CreateTeamOptions as m, CapabilityError as n, QuotaError as o, ValidationError as p, NetworkError as r, SandboxError as s, AuthError as t, ServerError as u, Team as v, CreateEndpointInput as w, AutomationInfo as x, TeamInvitation as y, TriggerInfo as z };
1050
+ export { SandboxFleetClient as A, IntegrationVerificationKind as C, TriggerRun as D, TriggerInfo as E, ParsedSSEEvent as M, parseSSEStream as N, TriggerWithSecret as O, IntegrationScope as S, RecipeManifest as T, IntegrationAction as _, Team as a, IntegrationPrincipalType as b, AutomationInfo as c, CreateEndpointInput as d, CreateTriggerInput as f, InstallRecipeInput as g, EndpointWithSecret as h, SandboxClient as i, ParseSSEStreamOptions as j, SandboxFleet as k, ConnectionInfo as l, EndpointInfo as m, IntelligenceClient as n, TeamInvitation as o, DeliveryAttempt as p, InviteTeamMemberOptions as r, TeamMember as s, CreateTeamOptions as t, CreateAutomationInput as u, IntegrationActionKind as v, IntegrationsManager as w, IntegrationProvider as x, IntegrationDeliveryStatus as y };