@turnkey/sdk-browser 0.0.1 → 0.2.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.
- package/CHANGELOG.md +19 -0
- package/dist/__generated__/sdk-client-base.d.ts.map +1 -1
- package/dist/__generated__/sdk-client-base.js +173 -43
- package/dist/__generated__/sdk-client-base.js.map +1 -1
- package/dist/__generated__/sdk-client-base.mjs +173 -43
- package/dist/__generated__/sdk-client-base.mjs.map +1 -1
- package/dist/__generated__/version.d.ts +1 -1
- package/dist/__generated__/version.js +1 -1
- package/dist/__generated__/version.mjs +1 -1
- package/dist/__polyfills__/window.d.ts +15 -0
- package/dist/__polyfills__/window.d.ts.map +1 -0
- package/dist/__polyfills__/window.js +30 -0
- package/dist/__polyfills__/window.js.map +1 -0
- package/dist/__polyfills__/window.mjs +28 -0
- package/dist/__polyfills__/window.mjs.map +1 -0
- package/dist/__types__/base.d.ts +5 -1
- package/dist/__types__/base.d.ts.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/models.d.ts +0 -5
- package/dist/models.d.ts.map +1 -1
- package/dist/sdk-client.d.ts +23 -23
- package/dist/sdk-client.d.ts.map +1 -1
- package/dist/sdk-client.js +87 -133
- package/dist/sdk-client.js.map +1 -1
- package/dist/sdk-client.mjs +86 -134
- package/dist/sdk-client.mjs.map +1 -1
- package/dist/storage.d.ts +2 -6
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +5 -9
- package/dist/storage.js.map +1 -1
- package/dist/storage.mjs +5 -9
- package/dist/storage.mjs.map +1 -1
- package/dist/turnkey-helpers.d.ts +2 -0
- package/dist/turnkey-helpers.d.ts.map +1 -1
- package/dist/turnkey-helpers.js +13 -0
- package/dist/turnkey-helpers.js.map +1 -1
- package/dist/turnkey-helpers.mjs +12 -1
- package/dist/turnkey-helpers.mjs.map +1 -1
- package/package.json +4 -3
- package/dist/constants.d.ts +0 -4
- package/dist/constants.d.ts.map +0 -1
- package/dist/constants.js +0 -18
- package/dist/constants.js.map +0 -1
- package/dist/constants.mjs +0 -15
- package/dist/constants.mjs.map +0 -1
package/dist/sdk-client.js
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var apiKeyStamper = require('@turnkey/api-key-stamper');
|
|
4
3
|
var webauthnStamper = require('@turnkey/webauthn-stamper');
|
|
5
4
|
var iframeStamper = require('@turnkey/iframe-stamper');
|
|
6
5
|
var http = require('@turnkey/http');
|
|
7
6
|
var version = require('./__generated__/version.js');
|
|
7
|
+
var window = require('./__polyfills__/window.js');
|
|
8
8
|
var base = require('./__types__/base.js');
|
|
9
9
|
var sdkClientBase = require('./__generated__/sdk-client-base.js');
|
|
10
|
-
var elliptic = require('elliptic');
|
|
11
10
|
var storage = require('./storage.js');
|
|
12
11
|
var utils = require('./utils.js');
|
|
13
|
-
var constants = require('./constants.js');
|
|
14
12
|
|
|
15
13
|
class TurnkeyBrowserSDK {
|
|
16
14
|
constructor(config) {
|
|
@@ -20,10 +18,11 @@ class TurnkeyBrowserSDK {
|
|
|
20
18
|
return;
|
|
21
19
|
}
|
|
22
20
|
if (currentUser?.readOnlySession?.sessionExpiry > Date.now()) {
|
|
23
|
-
return new
|
|
21
|
+
return new TurnkeyBrowserClient({
|
|
24
22
|
readOnlySession: currentUser?.readOnlySession?.session,
|
|
25
23
|
apiBaseUrl: this.config.apiBaseUrl,
|
|
26
|
-
organizationId:
|
|
24
|
+
organizationId: currentUser?.organization?.organizationId ??
|
|
25
|
+
this.config.defaultOrganizationId,
|
|
27
26
|
});
|
|
28
27
|
}
|
|
29
28
|
else {
|
|
@@ -31,50 +30,37 @@ class TurnkeyBrowserSDK {
|
|
|
31
30
|
}
|
|
32
31
|
return;
|
|
33
32
|
};
|
|
34
|
-
this.
|
|
33
|
+
this.passkeyClient = (rpId) => {
|
|
35
34
|
const targetRpId = rpId ?? this.config.rpId ?? window.location.hostname;
|
|
36
35
|
if (!targetRpId) {
|
|
37
|
-
throw new Error("Tried to initialize a passkey
|
|
36
|
+
throw new Error("Tried to initialize a passkey client with no rpId defined");
|
|
38
37
|
}
|
|
39
38
|
const webauthnStamper$1 = new webauthnStamper.WebauthnStamper({
|
|
40
39
|
rpId: targetRpId,
|
|
41
40
|
});
|
|
42
|
-
return new
|
|
41
|
+
return new TurnkeyPasskeyClient({
|
|
43
42
|
stamper: webauthnStamper$1,
|
|
44
43
|
apiBaseUrl: this.config.apiBaseUrl,
|
|
45
44
|
organizationId: this.config.defaultOrganizationId,
|
|
46
45
|
});
|
|
47
46
|
};
|
|
48
|
-
this.
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
throw new Error("Tried to initialize iframeSigner with no iframeUrl defined");
|
|
47
|
+
this.iframeClient = async (params) => {
|
|
48
|
+
if (!params.iframeUrl) {
|
|
49
|
+
throw new Error("Tried to initialize iframeClient with no iframeUrl defined");
|
|
52
50
|
}
|
|
53
|
-
const TurnkeyIframeElementId = "turnkey-
|
|
51
|
+
const TurnkeyIframeElementId = params.iframeElementId ?? "turnkey-default-iframe-element-id";
|
|
54
52
|
const iframeStamper$1 = new iframeStamper.IframeStamper({
|
|
55
|
-
|
|
53
|
+
iframeContainer: params.iframeContainer,
|
|
54
|
+
iframeUrl: params.iframeUrl,
|
|
56
55
|
iframeElementId: TurnkeyIframeElementId,
|
|
57
|
-
iframeContainer: iframeContainer,
|
|
58
56
|
});
|
|
59
57
|
await iframeStamper$1.init();
|
|
60
|
-
return new
|
|
58
|
+
return new TurnkeyIframeClient({
|
|
61
59
|
stamper: iframeStamper$1,
|
|
62
60
|
apiBaseUrl: this.config.apiBaseUrl,
|
|
63
61
|
organizationId: this.config.defaultOrganizationId,
|
|
64
62
|
});
|
|
65
63
|
};
|
|
66
|
-
this.sessionSigner = async () => {
|
|
67
|
-
const signingSession = await storage.getStorageValue(storage.StorageKeys.CurrentSigningSession);
|
|
68
|
-
const sessionStamper = new apiKeyStamper.ApiKeyStamper({
|
|
69
|
-
apiPublicKey: signingSession.publicKey,
|
|
70
|
-
apiPrivateKey: signingSession.privateKey,
|
|
71
|
-
});
|
|
72
|
-
return new TurnkeySDKBrowserClient({
|
|
73
|
-
stamper: sessionStamper,
|
|
74
|
-
apiBaseUrl: this.config.apiBaseUrl,
|
|
75
|
-
organizationId: this.config.defaultOrganizationId,
|
|
76
|
-
});
|
|
77
|
-
};
|
|
78
64
|
this.serverSign = async (methodName, params, serverSignUrl) => {
|
|
79
65
|
const targetServerSignUrl = serverSignUrl ?? this.config.serverSignUrl;
|
|
80
66
|
if (!targetServerSignUrl) {
|
|
@@ -107,14 +93,62 @@ class TurnkeyBrowserSDK {
|
|
|
107
93
|
return data;
|
|
108
94
|
};
|
|
109
95
|
// Local
|
|
96
|
+
this.getCurrentSubOrganization = async () => {
|
|
97
|
+
const currentUser = await this.getCurrentUser();
|
|
98
|
+
return currentUser?.organization;
|
|
99
|
+
};
|
|
100
|
+
this.getCurrentUser = async () => {
|
|
101
|
+
return await storage.getStorageValue(storage.StorageKeys.CurrentUser);
|
|
102
|
+
};
|
|
103
|
+
this.logoutUser = async () => {
|
|
104
|
+
await storage.removeStorageValue(storage.StorageKeys.CurrentUser);
|
|
105
|
+
return true;
|
|
106
|
+
};
|
|
107
|
+
this.config = config;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
class TurnkeyBrowserClient extends sdkClientBase.TurnkeySDKClientBase {
|
|
111
|
+
constructor(config) {
|
|
112
|
+
super(config);
|
|
113
|
+
this.login = async () => {
|
|
114
|
+
const readOnlySessionResult = await this.createReadOnlySession({});
|
|
115
|
+
const org = {
|
|
116
|
+
organizationId: readOnlySessionResult.organizationId,
|
|
117
|
+
organizationName: readOnlySessionResult.organizationName,
|
|
118
|
+
};
|
|
119
|
+
const currentUser = {
|
|
120
|
+
userId: readOnlySessionResult.userId,
|
|
121
|
+
username: readOnlySessionResult.username,
|
|
122
|
+
organization: org,
|
|
123
|
+
readOnlySession: {
|
|
124
|
+
session: readOnlySessionResult.session,
|
|
125
|
+
sessionExpiry: Number(readOnlySessionResult.sessionExpiry),
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
await storage.setStorageValue(storage.StorageKeys.CurrentUser, currentUser);
|
|
129
|
+
return readOnlySessionResult;
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
class TurnkeyPasskeyClient extends TurnkeyBrowserClient {
|
|
134
|
+
constructor(config) {
|
|
135
|
+
super(config);
|
|
110
136
|
this.createUserPasskey = async (config = {}) => {
|
|
111
137
|
const challenge = utils.generateRandomBuffer();
|
|
112
138
|
const encodedChallenge = utils.base64UrlEncode(challenge);
|
|
113
139
|
const authenticatorUserId = utils.generateRandomBuffer();
|
|
140
|
+
// WebAuthn credential options options can be found here:
|
|
141
|
+
// https://www.w3.org/TR/webauthn-2/#sctn-sample-registration
|
|
142
|
+
//
|
|
143
|
+
// All pubkey algorithms can be found here: https://www.iana.org/assignments/cose/cose.xhtml#algorithms
|
|
144
|
+
// Turnkey only supports ES256 (-7) and RS256 (-257)
|
|
145
|
+
//
|
|
146
|
+
// The pubkey type only supports one value, "public-key"
|
|
147
|
+
// See https://www.w3.org/TR/webauthn-2/#enumdef-publickeycredentialtype for more details
|
|
114
148
|
const webauthnConfig = {
|
|
115
149
|
publicKey: {
|
|
116
150
|
rp: {
|
|
117
|
-
id: config.publicKey?.rp?.id ??
|
|
151
|
+
id: config.publicKey?.rp?.id ?? this.rpId,
|
|
118
152
|
name: config.publicKey?.rp?.name ?? "",
|
|
119
153
|
},
|
|
120
154
|
challenge: config.publicKey?.challenge ?? challenge,
|
|
@@ -126,8 +160,8 @@ class TurnkeyBrowserSDK {
|
|
|
126
160
|
],
|
|
127
161
|
user: {
|
|
128
162
|
id: config.publicKey?.user?.id ?? authenticatorUserId,
|
|
129
|
-
name: config.publicKey?.user?.name ?? "",
|
|
130
|
-
displayName: config.publicKey?.user?.displayName ?? "",
|
|
163
|
+
name: config.publicKey?.user?.name ?? "Default User",
|
|
164
|
+
displayName: config.publicKey?.user?.displayName ?? "Default User",
|
|
131
165
|
},
|
|
132
166
|
authenticatorSelection: {
|
|
133
167
|
requireResidentKey: config.publicKey?.authenticatorSelection?.requireResidentKey ??
|
|
@@ -146,118 +180,38 @@ class TurnkeyBrowserSDK {
|
|
|
146
180
|
attestation: attestation,
|
|
147
181
|
};
|
|
148
182
|
};
|
|
149
|
-
this.
|
|
150
|
-
const currentUser = await this.getCurrentUser();
|
|
151
|
-
return currentUser?.organization;
|
|
152
|
-
};
|
|
153
|
-
this.getCurrentUser = async () => {
|
|
154
|
-
return await storage.getStorageValue(storage.StorageKeys.CurrentUser);
|
|
155
|
-
};
|
|
156
|
-
this.getCurrentSigningSession = async () => {
|
|
157
|
-
return await storage.getStorageValue(storage.StorageKeys.CurrentSigningSession);
|
|
158
|
-
};
|
|
159
|
-
this.isSigningSessionActive = async () => {
|
|
160
|
-
const signingSession = await this.getCurrentSigningSession();
|
|
161
|
-
if (signingSession && signingSession.expiration > Date.now()) {
|
|
162
|
-
return true;
|
|
163
|
-
}
|
|
164
|
-
return false;
|
|
165
|
-
};
|
|
166
|
-
this.logoutUser = async () => {
|
|
167
|
-
await storage.removeStorageValue(storage.StorageKeys.CurrentUser);
|
|
168
|
-
await storage.removeStorageValue(storage.StorageKeys.CurrentSubOrganization);
|
|
169
|
-
return true;
|
|
170
|
-
};
|
|
171
|
-
this.config = config;
|
|
183
|
+
this.rpId = config.stamper.rpId;
|
|
172
184
|
}
|
|
173
185
|
}
|
|
174
|
-
class
|
|
186
|
+
class TurnkeyIframeClient extends TurnkeyBrowserClient {
|
|
175
187
|
constructor(config) {
|
|
176
188
|
super(config);
|
|
177
|
-
this.
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
return await this.createWallet({
|
|
181
|
-
walletName: params.walletName,
|
|
182
|
-
accounts: [constants.DEFAULT_SOLANA_WALLET_ACCOUNT],
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
|
-
default: {
|
|
186
|
-
return await this.createWallet({
|
|
187
|
-
walletName: params.walletName,
|
|
188
|
-
accounts: [constants.DEFAULT_ETHEREUM_WALLET_ACCOUNT],
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
}
|
|
189
|
+
this.injectCredentialBundle = async (credentialBundle) => {
|
|
190
|
+
const stamper = this.config.stamper;
|
|
191
|
+
return await stamper.injectCredentialBundle(credentialBundle);
|
|
192
192
|
};
|
|
193
|
-
this.
|
|
194
|
-
const
|
|
195
|
-
|
|
196
|
-
});
|
|
197
|
-
const lastAccount = walletAccounts.accounts[walletAccounts.accounts.length - 1];
|
|
198
|
-
const lastAccountPath = lastAccount.path.split("/");
|
|
199
|
-
const lastAccountPathIndex = lastAccountPath[3].replace(/[^0-9]/g, "");
|
|
200
|
-
const nextPathIndex = Number(lastAccountPathIndex) + 1;
|
|
201
|
-
lastAccountPath[3] = `${nextPathIndex}'`;
|
|
202
|
-
const nextAccountPath = lastAccountPath.join("/");
|
|
203
|
-
return await this.createWalletAccounts({
|
|
204
|
-
walletId: params.walletId,
|
|
205
|
-
accounts: [
|
|
206
|
-
{
|
|
207
|
-
curve: lastAccount.curve,
|
|
208
|
-
pathFormat: lastAccount.pathFormat,
|
|
209
|
-
addressFormat: lastAccount.addressFormat,
|
|
210
|
-
path: nextAccountPath,
|
|
211
|
-
},
|
|
212
|
-
],
|
|
213
|
-
});
|
|
193
|
+
this.injectWalletExportBundle = async (credentialBundle, organizationId) => {
|
|
194
|
+
const stamper = this.config.stamper;
|
|
195
|
+
return await stamper.injectWalletExportBundle(credentialBundle, organizationId);
|
|
214
196
|
};
|
|
215
|
-
this.
|
|
216
|
-
const
|
|
217
|
-
|
|
218
|
-
organizationId: readOnlySessionResult.organizationId,
|
|
219
|
-
organizationName: readOnlySessionResult.organizationName,
|
|
220
|
-
};
|
|
221
|
-
const currentUser = {
|
|
222
|
-
userId: readOnlySessionResult.userId,
|
|
223
|
-
username: readOnlySessionResult.username,
|
|
224
|
-
organization: org,
|
|
225
|
-
readOnlySession: {
|
|
226
|
-
session: readOnlySessionResult.session,
|
|
227
|
-
sessionExpiry: Number(readOnlySessionResult.sessionExpiry),
|
|
228
|
-
},
|
|
229
|
-
};
|
|
230
|
-
await storage.setStorageValue(storage.StorageKeys.CurrentUser, currentUser);
|
|
231
|
-
await storage.setStorageValue(storage.StorageKeys.CurrentSubOrganization, org);
|
|
232
|
-
return readOnlySessionResult;
|
|
197
|
+
this.injectKeyExportBundle = async (credentialBundle, organizationId) => {
|
|
198
|
+
const stamper = this.config.stamper;
|
|
199
|
+
return await stamper.injectKeyExportBundle(credentialBundle, organizationId);
|
|
233
200
|
};
|
|
234
|
-
this.
|
|
235
|
-
const
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
expiration: Date.now() + params.duration * 1000,
|
|
242
|
-
};
|
|
243
|
-
const response = await this.createApiKeys({
|
|
244
|
-
apiKeys: [
|
|
245
|
-
{
|
|
246
|
-
apiKeyName: `Short-lived Signing Session Key ${Date.now()}`,
|
|
247
|
-
publicKey: signingSession.publicKey,
|
|
248
|
-
expirationSeconds: `${params.duration}`,
|
|
249
|
-
},
|
|
250
|
-
],
|
|
251
|
-
userId: currentUser.userId,
|
|
252
|
-
});
|
|
253
|
-
if (response) {
|
|
254
|
-
storage.setStorageValue(storage.StorageKeys.CurrentSigningSession, signingSession);
|
|
255
|
-
}
|
|
256
|
-
return response;
|
|
201
|
+
this.injectImportBundle = async (bundle, organizationId, userId) => {
|
|
202
|
+
const stamper = this.config.stamper;
|
|
203
|
+
return await stamper.injectImportBundle(bundle, organizationId, userId);
|
|
204
|
+
};
|
|
205
|
+
this.extractWalletEncryptedBundle = async () => {
|
|
206
|
+
const stamper = this.config.stamper;
|
|
207
|
+
return await stamper.extractWalletEncryptedBundle();
|
|
257
208
|
};
|
|
209
|
+
this.iframePublicKey = config.stamper.iframePublicKey;
|
|
258
210
|
}
|
|
259
211
|
}
|
|
260
212
|
|
|
213
|
+
exports.TurnkeyBrowserClient = TurnkeyBrowserClient;
|
|
261
214
|
exports.TurnkeyBrowserSDK = TurnkeyBrowserSDK;
|
|
262
|
-
exports.
|
|
215
|
+
exports.TurnkeyIframeClient = TurnkeyIframeClient;
|
|
216
|
+
exports.TurnkeyPasskeyClient = TurnkeyPasskeyClient;
|
|
263
217
|
//# sourceMappingURL=sdk-client.js.map
|
package/dist/sdk-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-client.js","sources":["../src/sdk-client.ts"],"sourcesContent":[null],"names":["webauthnStamper","WebauthnStamper","iframeStamper","IframeStamper","
|
|
1
|
+
{"version":3,"file":"sdk-client.js","sources":["../src/sdk-client.ts"],"sourcesContent":[null],"names":["WindowWrapper","webauthnStamper","WebauthnStamper","iframeStamper","IframeStamper","VERSION","TurnkeyRequestError","getStorageValue","StorageKeys","removeStorageValue","TurnkeySDKClientBase","setStorageValue","generateRandomBuffer","base64UrlEncode","getWebAuthnAttestation"],"mappings":";;;;;;;;;;;;MA4Ba,iBAAiB,CAAA;AAG5B,IAAA,WAAA,CAAY,MAA+B,EAAA;QAI3C,IAAkB,CAAA,kBAAA,GAAG,YAAsD;AACzE,YAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;AAChD,YAAA,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE;gBACjC,OAAO;AACR,aAAA;YACD,IAAI,WAAW,EAAE,eAAe,EAAE,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE;gBAC5D,OAAO,IAAI,oBAAoB,CAAC;AAC9B,oBAAA,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,OAAQ;AACvD,oBAAA,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;AAClC,oBAAA,cAAc,EACZ,WAAW,EAAE,YAAY,EAAE,cAAc;wBACzC,IAAI,CAAC,MAAM,CAAC,qBAAqB;AACpC,iBAAA,CAAC,CAAC;AACJ,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,UAAU,EAAE,CAAC;AACnB,aAAA;YACD,OAAO;AACT,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,aAAa,GAAG,CAAC,IAAa,KAA0B;AACtD,YAAA,MAAM,UAAU,GACd,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAIA,MAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAE9D,IAAI,CAAC,UAAU,EAAE;AACf,gBAAA,MAAM,IAAI,KAAK,CACb,2DAA2D,CAC5D,CAAC;AACH,aAAA;AAED,YAAA,MAAMC,iBAAe,GAAG,IAAIC,+BAAe,CAAC;AAC1C,gBAAA,IAAI,EAAE,UAAU;AACjB,aAAA,CAAC,CAAC;YAEH,OAAO,IAAI,oBAAoB,CAAC;AAC9B,gBAAA,OAAO,EAAED,iBAAe;AACxB,gBAAA,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;AAClC,gBAAA,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,qBAAqB;AAClD,aAAA,CAAC,CAAC;AACL,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,YAAY,GAAG,OACb,MAA0B,KACM;AAChC,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AACrB,gBAAA,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;AACH,aAAA;AAED,YAAA,MAAM,sBAAsB,GAC1B,MAAM,CAAC,eAAe,IAAI,mCAAmC,CAAC;AAEhE,YAAA,MAAME,eAAa,GAAG,IAAIC,2BAAa,CAAC;gBACtC,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,SAAS,EAAE,MAAM,CAAC,SAAS;AAC3B,gBAAA,eAAe,EAAE,sBAAsB;AACxC,aAAA,CAAC,CAAC;AAEH,YAAA,MAAMD,eAAa,CAAC,IAAI,EAAE,CAAC;YAE3B,OAAO,IAAI,mBAAmB,CAAC;AAC7B,gBAAA,OAAO,EAAEA,eAAa;AACtB,gBAAA,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;AAClC,gBAAA,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,qBAAqB;AAClD,aAAA,CAAC,CAAC;AACL,SAAC,CAAC;QAEF,IAAU,CAAA,UAAA,GAAG,OACX,UAAkB,EAClB,MAAa,EACb,aAAsB,KACI;YAC1B,MAAM,mBAAmB,GAAG,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;YAEvE,IAAI,CAAC,mBAAmB,EAAE;AACxB,gBAAA,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;AAC3E,aAAA;AAED,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC;AACrC,gBAAA,UAAU,EAAE,UAAU;AACtB,gBAAA,MAAM,EAAE,MAAM;AACf,aAAA,CAAC,CAAC;AAEH,YAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,mBAAmB,EAAE;AAChD,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,OAAO,EAAE;AACP,oBAAA,cAAc,EAAE,kBAAkB;AAClC,oBAAA,kBAAkB,EAAEE,eAAO;AAC5B,iBAAA;AACD,gBAAA,IAAI,EAAE,eAAe;AACrB,gBAAA,QAAQ,EAAE,QAAQ;AACnB,aAAA,CAAC,CAAC;AAEH,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;AAChB,gBAAA,IAAI,GAAe,CAAC;gBACpB,IAAI;AACF,oBAAA,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC7B,iBAAA;AAAC,gBAAA,OAAO,CAAC,EAAE;AACV,oBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,EAAG,QAAQ,CAAC,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAC,UAAU,CAAA,CAAE,CAAC,CAAC;AAC9D,iBAAA;AAED,gBAAA,MAAM,IAAIC,wBAAmB,CAAC,GAAG,CAAC,CAAC;AACpC,aAAA;AAED,YAAA,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;AACnC,YAAA,OAAO,IAAqB,CAAC;AAC/B,SAAC,CAAC;;QAGF,IAAyB,CAAA,yBAAA,GAAG,YAExB;AACF,YAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAChD,OAAO,WAAW,EAAE,YAAY,CAAC;AACnC,SAAC,CAAC;QAEF,IAAc,CAAA,cAAA,GAAG,YAAsC;AACrD,YAAA,OAAO,MAAMC,uBAAe,CAACC,mBAAW,CAAC,WAAW,CAAC,CAAC;AACxD,SAAC,CAAC;QAEF,IAAU,CAAA,UAAA,GAAG,YAA6B;AACxC,YAAA,MAAMC,0BAAkB,CAACD,mBAAW,CAAC,WAAW,CAAC,CAAC;AAElD,YAAA,OAAO,IAAI,CAAC;AACd,SAAC,CAAC;AA/HA,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;KACtB;AA+HF,CAAA;AAEK,MAAO,oBAAqB,SAAQE,kCAAoB,CAAA;AAC5D,IAAA,WAAA,CAAY,MAA8B,EAAA;QACxC,KAAK,CAAC,MAAM,CAAC,CAAC;QAGhB,IAAK,CAAA,KAAA,GAAG,YAAoD;YAC1D,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;AACnE,YAAA,MAAM,GAAG,GAAG;gBACV,cAAc,EAAE,qBAAsB,CAAC,cAAc;gBACrD,gBAAgB,EAAE,qBAAsB,CAAC,gBAAgB;aAC1D,CAAC;AACF,YAAA,MAAM,WAAW,GAAS;gBACxB,MAAM,EAAE,qBAAsB,CAAC,MAAM;gBACrC,QAAQ,EAAE,qBAAsB,CAAC,QAAQ;AACzC,gBAAA,YAAY,EAAE,GAAG;AACjB,gBAAA,eAAe,EAAE;oBACf,OAAO,EAAE,qBAAsB,CAAC,OAAO;AACvC,oBAAA,aAAa,EAAE,MAAM,CAAC,qBAAsB,CAAC,aAAa,CAAC;AAC5D,iBAAA;aACF,CAAC;YACF,MAAMC,uBAAe,CAACH,mBAAW,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAC5D,YAAA,OAAO,qBAAsB,CAAC;AAChC,SAAC,CAAC;KAnBD;AAoBF,CAAA;AAEK,MAAO,oBAAqB,SAAQ,oBAAoB,CAAA;AAG5D,IAAA,WAAA,CAAY,MAA8B,EAAA;QACxC,KAAK,CAAC,MAAM,CAAC,CAAC;AAIhB,QAAA,IAAA,CAAA,iBAAiB,GAAG,OAAO,MAA2B,GAAA,EAAE,KAAI;AAC1D,YAAA,MAAM,SAAS,GAAGI,0BAAoB,EAAE,CAAC;AACzC,YAAA,MAAM,gBAAgB,GAAGC,qBAAe,CAAC,SAAS,CAAC,CAAC;AACpD,YAAA,MAAM,mBAAmB,GAAGD,0BAAoB,EAAE,CAAC;;;;;;;;;AAUnD,YAAA,MAAM,cAAc,GAA8B;AAChD,gBAAA,SAAS,EAAE;AACT,oBAAA,EAAE,EAAE;wBACF,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC,IAAI;wBACzC,IAAI,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE;AACvC,qBAAA;AACD,oBAAA,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,IAAI,SAAS;AACnD,oBAAA,gBAAgB,EAAE,MAAM,CAAC,SAAS,EAAE,gBAAgB,IAAI;AACtD,wBAAA;AACE,4BAAA,IAAI,EAAE,YAAY;4BAClB,GAAG,EAAE,CAAC,CAAC;AACR,yBAAA;AACF,qBAAA;AACD,oBAAA,IAAI,EAAE;wBACJ,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,IAAI,mBAAmB;wBACrD,IAAI,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,IAAI,cAAc;wBACpD,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,IAAI,cAAc;AACnE,qBAAA;AACD,oBAAA,sBAAsB,EAAE;AACtB,wBAAA,kBAAkB,EAChB,MAAM,CAAC,SAAS,EAAE,sBAAsB,EAAE,kBAAkB;4BAC5D,IAAI;wBACN,WAAW,EACT,MAAM,CAAC,SAAS,EAAE,sBAAsB,EAAE,WAAW,IAAI,UAAU;AACrE,wBAAA,gBAAgB,EACd,MAAM,CAAC,SAAS,EAAE,sBAAsB,EAAE,gBAAgB;4BAC1D,WAAW;AACd,qBAAA;AACF,iBAAA;aACF,CAAC;AAEF,YAAA,MAAM,WAAW,GAAG,MAAME,2BAAsB,CAAC,cAAc,CAAC,CAAC;YAEjE,OAAO;AACL,gBAAA,gBAAgB,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS;sBACzCD,qBAAe,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC;AAC9C,sBAAE,gBAAgB;AACpB,gBAAA,WAAW,EAAE,WAAW;aACzB,CAAC;AACJ,SAAC,CAAC;QAvDA,IAAI,CAAC,IAAI,GAAI,MAAM,CAAC,OAA4B,CAAC,IAAI,CAAC;KACvD;AAuDF,CAAA;AAEK,MAAO,mBAAoB,SAAQ,oBAAoB,CAAA;AAG3D,IAAA,WAAA,CAAY,MAA8B,EAAA;QACxC,KAAK,CAAC,MAAM,CAAC,CAAC;AAIhB,QAAA,IAAA,CAAA,sBAAsB,GAAG,OACvB,gBAAwB,KACJ;AACpB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAwB,CAAC;AACrD,YAAA,OAAO,MAAM,OAAO,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;AAChE,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,wBAAwB,GAAG,OACzB,gBAAwB,EACxB,cAAsB,KACF;AACpB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAwB,CAAC;YACrD,OAAO,MAAM,OAAO,CAAC,wBAAwB,CAC3C,gBAAgB,EAChB,cAAc,CACf,CAAC;AACJ,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,qBAAqB,GAAG,OACtB,gBAAwB,EACxB,cAAsB,KACF;AACpB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAwB,CAAC;YACrD,OAAO,MAAM,OAAO,CAAC,qBAAqB,CACxC,gBAAgB,EAChB,cAAc,CACf,CAAC;AACJ,SAAC,CAAC;QAEF,IAAkB,CAAA,kBAAA,GAAG,OACnB,MAAc,EACd,cAAsB,EACtB,MAAc,KACM;AACpB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAwB,CAAC;YACrD,OAAO,MAAM,OAAO,CAAC,kBAAkB,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;AAC1E,SAAC,CAAC;QAEF,IAA4B,CAAA,4BAAA,GAAG,YAA4B;AACzD,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAwB,CAAC;AACrD,YAAA,OAAO,MAAM,OAAO,CAAC,4BAA4B,EAAE,CAAC;AACtD,SAAC,CAAC;QA5CA,IAAI,CAAC,eAAe,GAAI,MAAM,CAAC,OAAyB,CAAC,eAAe,CAAC;KAC1E;AA4CF;;;;;;;"}
|