claude-code-sync 0.1.7 → 0.1.8

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/README.md CHANGED
@@ -186,6 +186,7 @@ claude-code-sync login
186
186
  ```
187
187
 
188
188
  See [troubleshooting guide](docs/commands.md#troubleshooting) for more solutions.
189
+ See [docs](https://www.opensync.dev/docs)
189
190
 
190
191
  ### Need Help?
191
192
 
package/dist/index.d.ts CHANGED
@@ -120,6 +120,8 @@ export declare class SyncClient {
120
120
  private sessionCache;
121
121
  constructor(config: Config);
122
122
  private request;
123
+ private transformSession;
124
+ private transformMessage;
123
125
  syncSession(session: SessionData): Promise<void>;
124
126
  syncMessage(message: MessageData): Promise<void>;
125
127
  syncBatch(sessions: SessionData[], messages: MessageData[]): Promise<void>;
package/dist/index.js CHANGED
@@ -137,28 +137,80 @@ class SyncClient {
137
137
  }
138
138
  return response.json();
139
139
  }
140
+ // Transform session data to backend format
141
+ transformSession(session) {
142
+ return {
143
+ externalId: session.sessionId,
144
+ title: session.title,
145
+ projectPath: session.projectPath || session.cwd,
146
+ projectName: session.projectName,
147
+ model: session.model,
148
+ source: session.source,
149
+ promptTokens: session.tokenUsage?.input,
150
+ completionTokens: session.tokenUsage?.output,
151
+ cost: session.costEstimate,
152
+ durationMs: session.endedAt && session.startedAt
153
+ ? new Date(session.endedAt).getTime() - new Date(session.startedAt).getTime()
154
+ : undefined,
155
+ };
156
+ }
157
+ // Transform message data to backend format
158
+ transformMessage(message) {
159
+ return {
160
+ sessionExternalId: message.sessionId,
161
+ externalId: message.messageId,
162
+ role: message.role,
163
+ textContent: message.content || message.toolResult,
164
+ model: undefined,
165
+ durationMs: message.durationMs,
166
+ source: message.source,
167
+ // Tool use info stored in parts
168
+ parts: message.toolName
169
+ ? [
170
+ {
171
+ type: "tool_use",
172
+ content: {
173
+ toolName: message.toolName,
174
+ args: message.toolArgs,
175
+ result: message.toolResult,
176
+ },
177
+ },
178
+ ]
179
+ : undefined,
180
+ };
181
+ }
140
182
  async syncSession(session) {
141
183
  try {
142
- await this.request("/sync/session", session);
184
+ const payload = this.transformSession(session);
185
+ await this.request("/sync/session", payload);
143
186
  }
144
187
  catch (error) {
145
188
  console.error("Failed to sync session:", error);
189
+ throw error;
146
190
  }
147
191
  }
148
192
  async syncMessage(message) {
149
193
  try {
150
- await this.request("/sync/message", message);
194
+ const payload = this.transformMessage(message);
195
+ await this.request("/sync/message", payload);
151
196
  }
152
197
  catch (error) {
153
198
  console.error("Failed to sync message:", error);
199
+ throw error;
154
200
  }
155
201
  }
156
202
  async syncBatch(sessions, messages) {
157
203
  try {
158
- await this.request("/sync/batch", { sessions, messages });
204
+ const transformedSessions = sessions.map((s) => this.transformSession(s));
205
+ const transformedMessages = messages.map((m) => this.transformMessage(m));
206
+ await this.request("/sync/batch", {
207
+ sessions: transformedSessions,
208
+ messages: transformedMessages,
209
+ });
159
210
  }
160
211
  catch (error) {
161
212
  console.error("Failed to sync batch:", error);
213
+ throw error;
162
214
  }
163
215
  }
164
216
  async testConnection() {
@@ -335,4 +387,4 @@ function createPlugin() {
335
387
  }
336
388
  // Default export for Claude Code plugin system
337
389
  exports.default = createPlugin;
338
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvSUgsZ0NBNEJDO0FBRUQsZ0NBVUM7QUFFRCxrQ0FRQztBQTRHRCxvQ0FxS0M7QUFyY0QsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3Qix1Q0FBeUI7QUF5SHpCLCtFQUErRTtBQUMvRSxnQkFBZ0I7QUFDaEIsK0VBQStFO0FBRS9FLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQzFFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBRXpELFNBQWdCLFVBQVU7SUFDeEIsb0NBQW9DO0lBQ3BDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUM7SUFDbEQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztJQUUvQyxJQUFJLE1BQU0sSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNyQixPQUFPO1lBQ0wsU0FBUyxFQUFFLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztZQUNyQyxNQUFNLEVBQUUsTUFBTTtZQUNkLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixLQUFLLE9BQU87WUFDdkQsYUFBYSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEtBQUssT0FBTztZQUM3RCxZQUFZLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsS0FBSyxNQUFNO1NBQzFELENBQUM7SUFDSixDQUFDO0lBRUQsMkJBQTJCO0lBQzNCLElBQUksQ0FBQztRQUNILElBQUksRUFB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akMsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO2dCQUNoQyxPQUFPLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDbEMsQ0FBQztZQUVGLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNsQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRTFDLE9BQU8sQ0FBQyxHQUFHLENBQ1Qsc0NBQXNDLEtBQUssQ0FBQyxZQUFZLGNBQWMsS0FBSyxDQUFDLGFBQWEsYUFBYSxDQUN2RyxDQUFDO1FBQ0osQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsK0NBQStDO0FBQy9DLGtCQUFlLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2xhdWRlIENvZGUgU3luYyBQbHVnaW5cbiAqXG4gKiBTeW5jcyBDbGF1ZGUgQ29kZSBzZXNzaW9ucyB0byBPcGVuU3luYyBkYXNoYm9hcmQuXG4gKiBVc2VzIEFQSSBLZXkgYXV0aGVudGljYXRpb24gKG5vIGJyb3dzZXIgT0F1dGggcmVxdWlyZWQpLlxuICpcbiAqIEluc3RhbGw6IG5wbSBpbnN0YWxsIC1nIGNsYXVkZS1jb2RlLXN5bmNcbiAqIENvbmZpZ3VyZTogY2xhdWRlLWNvZGUtc3luYyBsb2dpblxuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0ICogYXMgb3MgZnJvbSBcIm9zXCI7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFR5cGVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnIHtcbiAgY29udmV4VXJsOiBzdHJpbmc7XG4gIGFwaUtleTogc3RyaW5nO1xuICBhdXRvU3luYz86IGJvb2xlYW47XG4gIHN5bmNUb29sQ2FsbHM/OiBib29sZWFuO1xuICBzeW5jVGhpbmtpbmc/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25EYXRhIHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHNvdXJjZTogXCJjbGF1ZGUtY29kZVwiO1xuICB0aXRsZT86IHN0cmluZztcbiAgcHJvamVjdFBhdGg/OiBzdHJpbmc7XG4gIHByb2plY3ROYW1lPzogc3RyaW5nO1xuICBjd2Q/OiBzdHJpbmc7XG4gIGdpdEJyYW5jaD86IHN0cmluZztcbiAgZ2l0UmVwbz86IHN0cmluZztcbiAgbW9kZWw/OiBzdHJpbmc7XG4gIHN0YXJ0VHlwZT86IFwibmV3XCIgfCBcInJlc3VtZVwiIHwgXCJjb250aW51ZVwiO1xuICBlbmRSZWFzb24/OiBcInVzZXJfc3RvcFwiIHwgXCJtYXhfdHVybnNcIiB8IFwiZXJyb3JcIiB8IFwiY29tcGxldGVkXCI7XG4gIHRoaW5raW5nRW5hYmxlZD86IGJvb2xlYW47XG4gIHBlcm1pc3Npb25Nb2RlPzogc3RyaW5nO1xuICBtY3BTZXJ2ZXJzPzogc3RyaW5nW107XG4gIG1lc3NhZ2VDb3VudD86IG51bWJlcjtcbiAgdG9vbENhbGxDb3VudD86IG51bWJlcjtcbiAgdG9rZW5Vc2FnZT86IHtcbiAgICBpbnB1dDogbnVtYmVyO1xuICAgIG91dHB1dDogbnVtYmVyO1xuICB9O1xuICBjb3N0RXN0aW1hdGU/OiBudW1iZXI7XG4gIHN0YXJ0ZWRBdD86IHN0cmluZztcbiAgZW5kZWRBdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlRGF0YSB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBtZXNzYWdlSWQ6IHN0cmluZztcbiAgc291cmNlOiBcImNsYXVkZS1jb2RlXCI7XG4gIHJvbGU6IFwidXNlclwiIHwgXCJhc3Npc3RhbnRcIiB8IFwic3lzdGVtXCI7XG4gIGNvbnRlbnQ/OiBzdHJpbmc7XG4gIHRoaW5raW5nQ29udGVudD86IHN0cmluZztcbiAgdG9vbE5hbWU/OiBzdHJpbmc7XG4gIHRvb2xBcmdzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHRvb2xSZXN1bHQ/OiBzdHJpbmc7XG4gIGR1cmF0aW9uTXM/OiBudW1iZXI7XG4gIHRva2VuQ291bnQ/OiBudW1iZXI7XG4gIHRpbWVzdGFtcD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb29sVXNlRGF0YSB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICB0b29sTmFtZTogc3RyaW5nO1xuICB0b29sQXJncz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICByZXN1bHQ/OiBzdHJpbmc7XG4gIHN1Y2Nlc3M/OiBib29sZWFuO1xuICBkdXJhdGlvbk1zPzogbnVtYmVyO1xuICB0aW1lc3RhbXA/OiBzdHJpbmc7XG59XG5cbi8vIENsYXVkZSBDb2RlIEhvb2sgVHlwZXNcbmV4cG9ydCBpbnRlcmZhY2UgQ2xhdWRlQ29kZUhvb2tzIHtcbiAgU2Vzc2lvblN0YXJ0PzogKGRhdGE6IFNlc3Npb25TdGFydEV2ZW50KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgVXNlclByb21wdFN1Ym1pdD86IChkYXRhOiBVc2VyUHJvbXB0RXZlbnQpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICBQb3N0VG9vbFVzZT86IChkYXRhOiBUb29sVXNlRXZlbnQpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICBTdG9wPzogKGRhdGE6IFN0b3BFdmVudCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gIFNlc3Npb25FbmQ/OiAoZGF0YTogU2Vzc2lvbkVuZEV2ZW50KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uU3RhcnRFdmVudCB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBjd2Q6IHN0cmluZztcbiAgbW9kZWw6IHN0cmluZztcbiAgc3RhcnRUeXBlOiBcIm5ld1wiIHwgXCJyZXN1bWVcIiB8IFwiY29udGludWVcIjtcbiAgdGhpbmtpbmdFbmFibGVkPzogYm9vbGVhbjtcbiAgcGVybWlzc2lvbk1vZGU/OiBzdHJpbmc7XG4gIG1jcFNlcnZlcnM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VyUHJvbXB0RXZlbnQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJvbXB0OiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xVc2VFdmVudCB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICB0b29sTmFtZTogc3RyaW5nO1xuICBhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmVzdWx0OiBzdHJpbmc7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIGR1cmF0aW9uTXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdG9wRXZlbnQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgcmVzcG9uc2U6IHN0cmluZztcbiAgdG9rZW5Vc2FnZToge1xuICAgIGlucHV0OiBudW1iZXI7XG4gICAgb3V0cHV0OiBudW1iZXI7XG4gIH07XG4gIGR1cmF0aW9uTXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uRW5kRXZlbnQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgZW5kUmVhc29uOiBcInVzZXJfc3RvcFwiIHwgXCJtYXhfdHVybnNcIiB8IFwiZXJyb3JcIiB8IFwiY29tcGxldGVkXCI7XG4gIG1lc3NhZ2VDb3VudDogbnVtYmVyO1xuICB0b29sQ2FsbENvdW50OiBudW1iZXI7XG4gIHRvdGFsVG9rZW5Vc2FnZToge1xuICAgIGlucHV0OiBudW1iZXI7XG4gICAgb3V0cHV0OiBudW1iZXI7XG4gIH07XG4gIGNvc3RFc3RpbWF0ZTogbnVtYmVyO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb25maWd1cmF0aW9uXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmNvbnN0IENPTkZJR19ESVIgPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCBcIi5jb25maWdcIiwgXCJjbGF1ZGUtY29kZS1zeW5jXCIpO1xuY29uc3QgQ09ORklHX0ZJTEUgPSBwYXRoLmpvaW4oQ09ORklHX0RJUiwgXCJjb25maWcuanNvblwiKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb25maWcoKTogQ29uZmlnIHwgbnVsbCB7XG4gIC8vIENoZWNrIGVudmlyb25tZW50IHZhcmlhYmxlcyBmaXJzdFxuICBjb25zdCBlbnZVcmwgPSBwcm9jZXNzLmVudi5DTEFVREVfU1lOQ19DT05WRVhfVVJMO1xuICBjb25zdCBlbnZLZXkgPSBwcm9jZXNzLmVudi5DTEFVREVfU1lOQ19BUElfS0VZO1xuXG4gIGlmIChlbnZVcmwgJiYgZW52S2V5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnZleFVybDogbm9ybWFsaXplQ29udmV4VXJsKGVudlVybCksXG4gICAgICBhcGlLZXk6IGVudktleSxcbiAgICAgIGF1dG9TeW5jOiBwcm9jZXNzLmVudi5DTEFVREVfU1lOQ19BVVRPX1NZTkMgIT09IFwiZmFsc2VcIixcbiAgICAgIHN5bmNUb29sQ2FsbHM6IHByb2Nlc3MuZW52LkNMQVVERV9TWU5DX1RPT0xfQ0FMTFMgIT09IFwiZmFsc2VcIixcbiAgICAgIHN5bmNUaGlua2luZzogcHJvY2Vzcy5lbnYuQ0xBVURFX1NZTkNfVEhJTktJTkcgPT09IFwidHJ1ZVwiLFxuICAgIH07XG4gIH1cblxuICAvLyBGYWxsIGJhY2sgdG8gY29uZmlnIGZpbGVcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhDT05GSUdfRklMRSkpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBmcy5yZWFkRmlsZVN5bmMoQ09ORklHX0ZJTEUsIFwidXRmLThcIik7XG4gICAgICBjb25zdCBjb25maWcgPSBKU09OLnBhcnNlKGRhdGEpIGFzIENvbmZpZztcbiAgICAgIGNvbmZpZy5jb252ZXhVcmwgPSBub3JtYWxpemVDb252ZXhVcmwoY29uZmlnLmNvbnZleFVybCk7XG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgbG9hZGluZyBjb25maWc6XCIsIGVycm9yKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F2ZUNvbmZpZyhjb25maWc6IENvbmZpZyk6IHZvaWQge1xuICB0cnkge1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhDT05GSUdfRElSKSkge1xuICAgICAgZnMubWtkaXJTeW5jKENPTkZJR19ESVIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cbiAgICBmcy53cml0ZUZpbGVTeW5jKENPTkZJR19GSUxFLCBKU09OLnN0cmluZ2lmeShjb25maWcsIG51bGwsIDIpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igc2F2aW5nIGNvbmZpZzpcIiwgZXJyb3IpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckNvbmZpZygpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhDT05GSUdfRklMRSkpIHtcbiAgICAgIGZzLnVubGlua1N5bmMoQ09ORklHX0ZJTEUpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgY2xlYXJpbmcgY29uZmlnOlwiLCBlcnJvcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQ29udmV4VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gQ29udmVydCAuY29udmV4LmNsb3VkIHRvIC5jb252ZXguc2l0ZSBmb3IgQVBJIGNhbGxzXG4gIHJldHVybiB1cmwucmVwbGFjZShcIi5jb252ZXguY2xvdWRcIiwgXCIuY29udmV4LnNpdGVcIik7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFN5bmMgQ2xpZW50XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBjbGFzcyBTeW5jQ2xpZW50IHtcbiAgcHJpdmF0ZSBjb25maWc6IENvbmZpZztcbiAgcHJpdmF0ZSBzaXRlVXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgc2Vzc2lvbkNhY2hlOiBNYXA8c3RyaW5nLCBQYXJ0aWFsPFNlc3Npb25EYXRhPj4gPSBuZXcgTWFwKCk7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAvLyBOb3JtYWxpemUgVVJMIHRvIC5jb252ZXguc2l0ZSBmb3IgSFRUUCBlbmRwb2ludHNcbiAgICAvLyBTdXBwb3J0cyBib3RoIC5jb252ZXguY2xvdWQgYW5kIC5jb252ZXguc2l0ZSBpbnB1dCBVUkxzXG4gICAgdGhpcy5zaXRlVXJsID0gY29uZmlnLmNvbnZleFVybC5yZXBsYWNlKFwiLmNvbnZleC5jbG91ZFwiLCBcIi5jb252ZXguc2l0ZVwiKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVxdWVzdChlbmRwb2ludDogc3RyaW5nLCBkYXRhOiB1bmtub3duKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5zaXRlVXJsfSR7ZW5kcG9pbnR9YDtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMuY29uZmlnLmFwaUtleX1gLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxuICAgIH0pO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU3luYyBmYWlsZWQ6ICR7cmVzcG9uc2Uuc3RhdHVzfSAtICR7dGV4dH1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICB9XG5cbiAgYXN5bmMgc3luY1Nlc3Npb24oc2Vzc2lvbjogU2Vzc2lvbkRhdGEpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0KFwiL3N5bmMvc2Vzc2lvblwiLCBzZXNzaW9uKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBzeW5jIHNlc3Npb246XCIsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzeW5jTWVzc2FnZShtZXNzYWdlOiBNZXNzYWdlRGF0YSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3QoXCIvc3luYy9tZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIHN5bmMgbWVzc2FnZTpcIiwgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN5bmNCYXRjaChcbiAgICBzZXNzaW9uczogU2Vzc2lvbkRhdGFbXSxcbiAgICBtZXNzYWdlczogTWVzc2FnZURhdGFbXVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0KFwiL3N5bmMvYmF0Y2hcIiwgeyBzZXNzaW9ucywgbWVzc2FnZXMgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gc3luYyBiYXRjaDpcIiwgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHRlc3RDb25uZWN0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNpdGVVcmx9L2hlYWx0aGA7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2Uub2s7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gU2Vzc2lvbiBzdGF0ZSBtYW5hZ2VtZW50XG4gIGdldFNlc3Npb25TdGF0ZShzZXNzaW9uSWQ6IHN0cmluZyk6IFBhcnRpYWw8U2Vzc2lvbkRhdGE+IHtcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25JZCkgfHwge307XG4gIH1cblxuICB1cGRhdGVTZXNzaW9uU3RhdGUoXG4gICAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgdXBkYXRlczogUGFydGlhbDxTZXNzaW9uRGF0YT5cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuc2Vzc2lvbkNhY2hlLmdldChzZXNzaW9uSWQpIHx8IHt9O1xuICAgIHRoaXMuc2Vzc2lvbkNhY2hlLnNldChzZXNzaW9uSWQsIHsgLi4uY3VycmVudCwgLi4udXBkYXRlcyB9KTtcbiAgfVxuXG4gIGNsZWFyU2Vzc2lvblN0YXRlKHNlc3Npb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZXNzaW9uQ2FjaGUuZGVsZXRlKHNlc3Npb25JZCk7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUGx1Z2luIEV4cG9ydFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIENsYXVkZSBDb2RlIFBsdWdpbiBFbnRyeSBQb2ludFxuICpcbiAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IENsYXVkZSBDb2RlIHRvIHJlZ2lzdGVyIHRoZSBwbHVnaW4uXG4gKiBJdCByZXR1cm5zIGhvb2sgaGFuZGxlcnMgdGhhdCBmaXJlIGF0IGtleSBwb2ludHMgaW4gdGhlIHNlc3Npb24gbGlmZWN5Y2xlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGx1Z2luKCk6IENsYXVkZUNvZGVIb29rcyB8IG51bGwge1xuICBjb25zdCBjb25maWcgPSBsb2FkQ29uZmlnKCk7XG5cbiAgaWYgKCFjb25maWcpIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIFwiW2NsYXVkZS1jb2RlLXN5bmNdIE5vdCBjb25maWd1cmVkLiBSdW4gJ2NsYXVkZS1jb2RlLXN5bmMgbG9naW4nIHRvIHNldCB1cC5cIlxuICAgICk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoY29uZmlnLmF1dG9TeW5jID09PSBmYWxzZSkge1xuICAgIGNvbnNvbGUubG9nKFwiW2NsYXVkZS1jb2RlLXN5bmNdIEF1dG8tc3luYyBkaXNhYmxlZCBpbiBjb25maWcuXCIpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgY2xpZW50ID0gbmV3IFN5bmNDbGllbnQoY29uZmlnKTtcbiAgbGV0IG1lc3NhZ2VDb3VudGVyID0gMDtcbiAgbGV0IHRvb2xDYWxsQ291bnRlciA9IDA7XG5cbiAgY29uc29sZS5sb2coXCJbY2xhdWRlLWNvZGUtc3luY10gUGx1Z2luIGxvYWRlZC4gU2Vzc2lvbnMgd2lsbCBzeW5jIHRvIE9wZW5TeW5jLlwiKTtcblxuICByZXR1cm4ge1xuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIGEgbmV3IHNlc3Npb24gc3RhcnRzXG4gICAgICovXG4gICAgU2Vzc2lvblN0YXJ0OiBhc3luYyAoZXZlbnQ6IFNlc3Npb25TdGFydEV2ZW50KSA9PiB7XG4gICAgICBtZXNzYWdlQ291bnRlciA9IDA7XG4gICAgICB0b29sQ2FsbENvdW50ZXIgPSAwO1xuXG4gICAgICBjb25zdCBzZXNzaW9uOiBTZXNzaW9uRGF0YSA9IHtcbiAgICAgICAgc2Vzc2lvbklkOiBldmVudC5zZXNzaW9uSWQsXG4gICAgICAgIHNvdXJjZTogXCJjbGF1ZGUtY29kZVwiLFxuICAgICAgICBjd2Q6IGV2ZW50LmN3ZCxcbiAgICAgICAgbW9kZWw6IGV2ZW50Lm1vZGVsLFxuICAgICAgICBzdGFydFR5cGU6IGV2ZW50LnN0YXJ0VHlwZSxcbiAgICAgICAgdGhpbmtpbmdFbmFibGVkOiBldmVudC50aGlua2luZ0VuYWJsZWQsXG4gICAgICAgIHBlcm1pc3Npb25Nb2RlOiBldmVudC5wZXJtaXNzaW9uTW9kZSxcbiAgICAgICAgbWNwU2VydmVyczogZXZlbnQubWNwU2VydmVycyxcbiAgICAgICAgc3RhcnRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9O1xuXG4gICAgICAvLyBFeHRyYWN0IHByb2plY3QgaW5mbyBmcm9tIGN3ZFxuICAgICAgaWYgKGV2ZW50LmN3ZCkge1xuICAgICAgICBzZXNzaW9uLnByb2plY3RQYXRoID0gZXZlbnQuY3dkO1xuICAgICAgICBzZXNzaW9uLnByb2plY3ROYW1lID0gcGF0aC5iYXNlbmFtZShldmVudC5jd2QpO1xuXG4gICAgICAgIC8vIFRyeSB0byBnZXQgZ2l0IGluZm9cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBnaXREaXIgPSBwYXRoLmpvaW4oZXZlbnQuY3dkLCBcIi5naXRcIik7XG4gICAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoZ2l0RGlyKSkge1xuICAgICAgICAgICAgY29uc3QgaGVhZEZpbGUgPSBwYXRoLmpvaW4oZ2l0RGlyLCBcIkhFQURcIik7XG4gICAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhoZWFkRmlsZSkpIHtcbiAgICAgICAgICAgICAgY29uc3QgaGVhZCA9IGZzLnJlYWRGaWxlU3luYyhoZWFkRmlsZSwgXCJ1dGYtOFwiKS50cmltKCk7XG4gICAgICAgICAgICAgIGlmIChoZWFkLnN0YXJ0c1dpdGgoXCJyZWY6IHJlZnMvaGVhZHMvXCIpKSB7XG4gICAgICAgICAgICAgICAgc2Vzc2lvbi5naXRCcmFuY2ggPSBoZWFkLnJlcGxhY2UoXCJyZWY6IHJlZnMvaGVhZHMvXCIsIFwiXCIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBJZ25vcmUgZ2l0IGVycm9yc1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNsaWVudC51cGRhdGVTZXNzaW9uU3RhdGUoZXZlbnQuc2Vzc2lvbklkLCBzZXNzaW9uKTtcbiAgICAgIGF3YWl0IGNsaWVudC5zeW5jU2Vzc2lvbihzZXNzaW9uKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gdXNlciBzdWJtaXRzIGEgcHJvbXB0XG4gICAgICovXG4gICAgVXNlclByb21wdFN1Ym1pdDogYXN5bmMgKGV2ZW50OiBVc2VyUHJvbXB0RXZlbnQpID0+IHtcbiAgICAgIG1lc3NhZ2VDb3VudGVyKys7XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2U6IE1lc3NhZ2VEYXRhID0ge1xuICAgICAgICBzZXNzaW9uSWQ6IGV2ZW50LnNlc3Npb25JZCxcbiAgICAgICAgbWVzc2FnZUlkOiBgJHtldmVudC5zZXNzaW9uSWR9LW1zZy0ke21lc3NhZ2VDb3VudGVyfWAsXG4gICAgICAgIHNvdXJjZTogXCJjbGF1ZGUtY29kZVwiLFxuICAgICAgICByb2xlOiBcInVzZXJcIixcbiAgICAgICAgY29udGVudDogZXZlbnQucHJvbXB0LFxuICAgICAgICB0aW1lc3RhbXA6IGV2ZW50LnRpbWVzdGFtcCB8fCBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBjbGllbnQuc3luY01lc3NhZ2UobWVzc2FnZSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGxlZCBhZnRlciBlYWNoIHRvb2wgdXNlXG4gICAgICovXG4gICAgUG9zdFRvb2xVc2U6IGFzeW5jIChldmVudDogVG9vbFVzZUV2ZW50KSA9PiB7XG4gICAgICBpZiAoIWNvbmZpZy5zeW5jVG9vbENhbGxzKSByZXR1cm47XG5cbiAgICAgIHRvb2xDYWxsQ291bnRlcisrO1xuICAgICAgbWVzc2FnZUNvdW50ZXIrKztcblxuICAgICAgY29uc3QgbWVzc2FnZTogTWVzc2FnZURhdGEgPSB7XG4gICAgICAgIHNlc3Npb25JZDogZXZlbnQuc2Vzc2lvbklkLFxuICAgICAgICBtZXNzYWdlSWQ6IGAke2V2ZW50LnNlc3Npb25JZH0tdG9vbC0ke3Rvb2xDYWxsQ291bnRlcn1gLFxuICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIixcbiAgICAgICAgcm9sZTogXCJhc3Npc3RhbnRcIixcbiAgICAgICAgdG9vbE5hbWU6IGV2ZW50LnRvb2xOYW1lLFxuICAgICAgICB0b29sQXJnczogZXZlbnQuYXJncyxcbiAgICAgICAgdG9vbFJlc3VsdDogZXZlbnQucmVzdWx0LFxuICAgICAgICBkdXJhdGlvbk1zOiBldmVudC5kdXJhdGlvbk1zLFxuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IGNsaWVudC5zeW5jTWVzc2FnZShtZXNzYWdlKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gQ2xhdWRlIHN0b3BzIHJlc3BvbmRpbmdcbiAgICAgKi9cbiAgICBTdG9wOiBhc3luYyAoZXZlbnQ6IFN0b3BFdmVudCkgPT4ge1xuICAgICAgbWVzc2FnZUNvdW50ZXIrKztcblxuICAgICAgY29uc3QgbWVzc2FnZTogTWVzc2FnZURhdGEgPSB7XG4gICAgICAgIHNlc3Npb25JZDogZXZlbnQuc2Vzc2lvbklkLFxuICAgICAgICBtZXNzYWdlSWQ6IGAke2V2ZW50LnNlc3Npb25JZH0tbXNnLSR7bWVzc2FnZUNvdW50ZXJ9YCxcbiAgICAgICAgc291cmNlOiBcImNsYXVkZS1jb2RlXCIsXG4gICAgICAgIHJvbGU6IFwiYXNzaXN0YW50XCIsXG4gICAgICAgIGNvbnRlbnQ6IGV2ZW50LnJlc3BvbnNlLFxuICAgICAgICB0b2tlbkNvdW50OiBldmVudC50b2tlblVzYWdlLmlucHV0ICsgZXZlbnQudG9rZW5Vc2FnZS5vdXRwdXQsXG4gICAgICAgIGR1cmF0aW9uTXM6IGV2ZW50LmR1cmF0aW9uTXMsXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgfTtcblxuICAgICAgLy8gVXBkYXRlIHNlc3Npb24gc3RhdGUgd2l0aCB0b2tlbiB1c2FnZVxuICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gY2xpZW50LmdldFNlc3Npb25TdGF0ZShldmVudC5zZXNzaW9uSWQpO1xuICAgICAgY29uc3QgY3VycmVudFRva2VucyA9IGN1cnJlbnRTdGF0ZS50b2tlblVzYWdlIHx8IHsgaW5wdXQ6IDAsIG91dHB1dDogMCB9O1xuICAgICAgY2xpZW50LnVwZGF0ZVNlc3Npb25TdGF0ZShldmVudC5zZXNzaW9uSWQsIHtcbiAgICAgICAgdG9rZW5Vc2FnZToge1xuICAgICAgICAgIGlucHV0OiBjdXJyZW50VG9rZW5zLmlucHV0ICsgZXZlbnQudG9rZW5Vc2FnZS5pbnB1dCxcbiAgICAgICAgICBvdXRwdXQ6IGN1cnJlbnRUb2tlbnMub3V0cHV0ICsgZXZlbnQudG9rZW5Vc2FnZS5vdXRwdXQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgY2xpZW50LnN5bmNNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiBzZXNzaW9uIGVuZHNcbiAgICAgKi9cbiAgICBTZXNzaW9uRW5kOiBhc3luYyAoZXZlbnQ6IFNlc3Npb25FbmRFdmVudCkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gY2xpZW50LmdldFNlc3Npb25TdGF0ZShldmVudC5zZXNzaW9uSWQpO1xuXG4gICAgICBjb25zdCBzZXNzaW9uOiBTZXNzaW9uRGF0YSA9IHtcbiAgICAgICAgLi4uY3VycmVudFN0YXRlLFxuICAgICAgICBzZXNzaW9uSWQ6IGV2ZW50LnNlc3Npb25JZCxcbiAgICAgICAgc291cmNlOiBcImNsYXVkZS1jb2RlXCIsXG4gICAgICAgIGVuZFJlYXNvbjogZXZlbnQuZW5kUmVhc29uLFxuICAgICAgICBtZXNzYWdlQ291bnQ6IGV2ZW50Lm1lc3NhZ2VDb3VudCxcbiAgICAgICAgdG9vbENhbGxDb3VudDogZXZlbnQudG9vbENhbGxDb3VudCxcbiAgICAgICAgdG9rZW5Vc2FnZTogZXZlbnQudG90YWxUb2tlblVzYWdlLFxuICAgICAgICBjb3N0RXN0aW1hdGU6IGV2ZW50LmNvc3RFc3RpbWF0ZSxcbiAgICAgICAgZW5kZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgY2xpZW50LnN5bmNTZXNzaW9uKHNlc3Npb24pO1xuICAgICAgY2xpZW50LmNsZWFyU2Vzc2lvblN0YXRlKGV2ZW50LnNlc3Npb25JZCk7XG5cbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgW2NsYXVkZS1jb2RlLXN5bmNdIFNlc3Npb24gc3luY2VkOiAke2V2ZW50Lm1lc3NhZ2VDb3VudH0gbWVzc2FnZXMsICR7ZXZlbnQudG9vbENhbGxDb3VudH0gdG9vbCBjYWxsc2BcbiAgICAgICk7XG4gICAgfSxcbiAgfTtcbn1cblxuLy8gRGVmYXVsdCBleHBvcnQgZm9yIENsYXVkZSBDb2RlIHBsdWdpbiBzeXN0ZW1cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVBsdWdpbjtcbiJdfQ==
390
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvSUgsZ0NBNEJDO0FBRUQsZ0NBVUM7QUFFRCxrQ0FRQztBQWtLRCxvQ0FxS0M7QUEzZkQsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3Qix1Q0FBeUI7QUF5SHpCLCtFQUErRTtBQUMvRSxnQkFBZ0I7QUFDaEIsK0VBQStFO0FBRS9FLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQzFFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBRXpELFNBQWdCLFVBQVU7SUFDeEIsb0NBQW9DO0lBQ3BDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUM7SUFDbEQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztJQUUvQyxJQUFJLE1BQU0sSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNyQixPQUFPO1lBQ0wsU0FBUyxFQUFFLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztZQUNyQyxNQUFNLEVBQUUsTUFBTTtZQUNkLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixLQUFLLE9BQU87WUFDdkQsYUFBYSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEtBQUssT0FBTztZQUM3RCxZQUFZLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsS0FBSyxNQUFNO1NBQzFELENBQUM7SUFDSixDQUFDO0lBRUQsMkJBQTJCO0lBQzNCLElBQUksQ0FBQztRQUNILElBQUksRUFB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Q3ZHLENBQUM7UUFDSixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCwrQ0FBK0M7QUFDL0Msa0JBQWUsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDbGF1ZGUgQ29kZSBTeW5jIFBsdWdpblxuICpcbiAqIFN5bmNzIENsYXVkZSBDb2RlIHNlc3Npb25zIHRvIE9wZW5TeW5jIGRhc2hib2FyZC5cbiAqIFVzZXMgQVBJIEtleSBhdXRoZW50aWNhdGlvbiAobm8gYnJvd3NlciBPQXV0aCByZXF1aXJlZCkuXG4gKlxuICogSW5zdGFsbDogbnBtIGluc3RhbGwgLWcgY2xhdWRlLWNvZGUtc3luY1xuICogQ29uZmlndXJlOiBjbGF1ZGUtY29kZS1zeW5jIGxvZ2luXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgKiBhcyBvcyBmcm9tIFwib3NcIjtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVHlwZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBDb25maWcge1xuICBjb252ZXhVcmw6IHN0cmluZztcbiAgYXBpS2V5OiBzdHJpbmc7XG4gIGF1dG9TeW5jPzogYm9vbGVhbjtcbiAgc3luY1Rvb2xDYWxscz86IGJvb2xlYW47XG4gIHN5bmNUaGlua2luZz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvbkRhdGEge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgc291cmNlOiBcImNsYXVkZS1jb2RlXCI7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBwcm9qZWN0UGF0aD86IHN0cmluZztcbiAgcHJvamVjdE5hbWU/OiBzdHJpbmc7XG4gIGN3ZD86IHN0cmluZztcbiAgZ2l0QnJhbmNoPzogc3RyaW5nO1xuICBnaXRSZXBvPzogc3RyaW5nO1xuICBtb2RlbD86IHN0cmluZztcbiAgc3RhcnRUeXBlPzogXCJuZXdcIiB8IFwicmVzdW1lXCIgfCBcImNvbnRpbnVlXCI7XG4gIGVuZFJlYXNvbj86IFwidXNlcl9zdG9wXCIgfCBcIm1heF90dXJuc1wiIHwgXCJlcnJvclwiIHwgXCJjb21wbGV0ZWRcIjtcbiAgdGhpbmtpbmdFbmFibGVkPzogYm9vbGVhbjtcbiAgcGVybWlzc2lvbk1vZGU/OiBzdHJpbmc7XG4gIG1jcFNlcnZlcnM/OiBzdHJpbmdbXTtcbiAgbWVzc2FnZUNvdW50PzogbnVtYmVyO1xuICB0b29sQ2FsbENvdW50PzogbnVtYmVyO1xuICB0b2tlblVzYWdlPzoge1xuICAgIGlucHV0OiBudW1iZXI7XG4gICAgb3V0cHV0OiBudW1iZXI7XG4gIH07XG4gIGNvc3RFc3RpbWF0ZT86IG51bWJlcjtcbiAgc3RhcnRlZEF0Pzogc3RyaW5nO1xuICBlbmRlZEF0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VEYXRhIHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIG1lc3NhZ2VJZDogc3RyaW5nO1xuICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIjtcbiAgcm9sZTogXCJ1c2VyXCIgfCBcImFzc2lzdGFudFwiIHwgXCJzeXN0ZW1cIjtcbiAgY29udGVudD86IHN0cmluZztcbiAgdGhpbmtpbmdDb250ZW50Pzogc3RyaW5nO1xuICB0b29sTmFtZT86IHN0cmluZztcbiAgdG9vbEFyZ3M/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgdG9vbFJlc3VsdD86IHN0cmluZztcbiAgZHVyYXRpb25Ncz86IG51bWJlcjtcbiAgdG9rZW5Db3VudD86IG51bWJlcjtcbiAgdGltZXN0YW1wPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xVc2VEYXRhIHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHRvb2xOYW1lOiBzdHJpbmc7XG4gIHRvb2xBcmdzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJlc3VsdD86IHN0cmluZztcbiAgc3VjY2Vzcz86IGJvb2xlYW47XG4gIGR1cmF0aW9uTXM/OiBudW1iZXI7XG4gIHRpbWVzdGFtcD86IHN0cmluZztcbn1cblxuLy8gQ2xhdWRlIENvZGUgSG9vayBUeXBlc1xuZXhwb3J0IGludGVyZmFjZSBDbGF1ZGVDb2RlSG9va3Mge1xuICBTZXNzaW9uU3RhcnQ/OiAoZGF0YTogU2Vzc2lvblN0YXJ0RXZlbnQpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICBVc2VyUHJvbXB0U3VibWl0PzogKGRhdGE6IFVzZXJQcm9tcHRFdmVudCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gIFBvc3RUb29sVXNlPzogKGRhdGE6IFRvb2xVc2VFdmVudCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gIFN0b3A/OiAoZGF0YTogU3RvcEV2ZW50KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgU2Vzc2lvbkVuZD86IChkYXRhOiBTZXNzaW9uRW5kRXZlbnQpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25TdGFydEV2ZW50IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIGN3ZDogc3RyaW5nO1xuICBtb2RlbDogc3RyaW5nO1xuICBzdGFydFR5cGU6IFwibmV3XCIgfCBcInJlc3VtZVwiIHwgXCJjb250aW51ZVwiO1xuICB0aGlua2luZ0VuYWJsZWQ/OiBib29sZWFuO1xuICBwZXJtaXNzaW9uTW9kZT86IHN0cmluZztcbiAgbWNwU2VydmVycz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQcm9tcHRFdmVudCB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBwcm9tcHQ6IHN0cmluZztcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9vbFVzZUV2ZW50IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHRvb2xOYW1lOiBzdHJpbmc7XG4gIGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICByZXN1bHQ6IHN0cmluZztcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgZHVyYXRpb25NczogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0b3BFdmVudCB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICByZXNwb25zZTogc3RyaW5nO1xuICB0b2tlblVzYWdlOiB7XG4gICAgaW5wdXQ6IG51bWJlcjtcbiAgICBvdXRwdXQ6IG51bWJlcjtcbiAgfTtcbiAgZHVyYXRpb25NczogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25FbmRFdmVudCB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBlbmRSZWFzb246IFwidXNlcl9zdG9wXCIgfCBcIm1heF90dXJuc1wiIHwgXCJlcnJvclwiIHwgXCJjb21wbGV0ZWRcIjtcbiAgbWVzc2FnZUNvdW50OiBudW1iZXI7XG4gIHRvb2xDYWxsQ291bnQ6IG51bWJlcjtcbiAgdG90YWxUb2tlblVzYWdlOiB7XG4gICAgaW5wdXQ6IG51bWJlcjtcbiAgICBvdXRwdXQ6IG51bWJlcjtcbiAgfTtcbiAgY29zdEVzdGltYXRlOiBudW1iZXI7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvbmZpZ3VyYXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgQ09ORklHX0RJUiA9IHBhdGguam9pbihvcy5ob21lZGlyKCksIFwiLmNvbmZpZ1wiLCBcImNsYXVkZS1jb2RlLXN5bmNcIik7XG5jb25zdCBDT05GSUdfRklMRSA9IHBhdGguam9pbihDT05GSUdfRElSLCBcImNvbmZpZy5qc29uXCIpO1xuXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbmZpZygpOiBDb25maWcgfCBudWxsIHtcbiAgLy8gQ2hlY2sgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZpcnN0XG4gIGNvbnN0IGVudlVybCA9IHByb2Nlc3MuZW52LkNMQVVERV9TWU5DX0NPTlZFWF9VUkw7XG4gIGNvbnN0IGVudktleSA9IHByb2Nlc3MuZW52LkNMQVVERV9TWU5DX0FQSV9LRVk7XG5cbiAgaWYgKGVudlVybCAmJiBlbnZLZXkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29udmV4VXJsOiBub3JtYWxpemVDb252ZXhVcmwoZW52VXJsKSxcbiAgICAgIGFwaUtleTogZW52S2V5LFxuICAgICAgYXV0b1N5bmM6IHByb2Nlc3MuZW52LkNMQVVERV9TWU5DX0FVVE9fU1lOQyAhPT0gXCJmYWxzZVwiLFxuICAgICAgc3luY1Rvb2xDYWxsczogcHJvY2Vzcy5lbnYuQ0xBVURFX1NZTkNfVE9PTF9DQUxMUyAhPT0gXCJmYWxzZVwiLFxuICAgICAgc3luY1RoaW5raW5nOiBwcm9jZXNzLmVudi5DTEFVREVfU1lOQ19USElOS0lORyA9PT0gXCJ0cnVlXCIsXG4gICAgfTtcbiAgfVxuXG4gIC8vIEZhbGwgYmFjayB0byBjb25maWcgZmlsZVxuICB0cnkge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKENPTkZJR19GSUxFKSkge1xuICAgICAgY29uc3QgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhDT05GSUdfRklMRSwgXCJ1dGYtOFwiKTtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IEpTT04ucGFyc2UoZGF0YSkgYXMgQ29uZmlnO1xuICAgICAgY29uZmlnLmNvbnZleFVybCA9IG5vcm1hbGl6ZUNvbnZleFVybChjb25maWcuY29udmV4VXJsKTtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBsb2FkaW5nIGNvbmZpZzpcIiwgZXJyb3IpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXZlQ29uZmlnKGNvbmZpZzogQ29uZmlnKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKENPTkZJR19ESVIpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoQ09ORklHX0RJUiwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgfVxuICAgIGZzLndyaXRlRmlsZVN5bmMoQ09ORklHX0ZJTEUsIEpTT04uc3RyaW5naWZ5KGNvbmZpZywgbnVsbCwgMikpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBzYXZpbmcgY29uZmlnOlwiLCBlcnJvcik7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyQ29uZmlnKCk6IHZvaWQge1xuICB0cnkge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKENPTkZJR19GSUxFKSkge1xuICAgICAgZnMudW5saW5rU3luYyhDT05GSUdfRklMRSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBjbGVhcmluZyBjb25maWc6XCIsIGVycm9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVDb252ZXhVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBDb252ZXJ0IC5jb252ZXguY2xvdWQgdG8gLmNvbnZleC5zaXRlIGZvciBBUEkgY2FsbHNcbiAgcmV0dXJuIHVybC5yZXBsYWNlKFwiLmNvbnZleC5jbG91ZFwiLCBcIi5jb252ZXguc2l0ZVwiKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU3luYyBDbGllbnRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGNsYXNzIFN5bmNDbGllbnQge1xuICBwcml2YXRlIGNvbmZpZzogQ29uZmlnO1xuICBwcml2YXRlIHNpdGVVcmw6IHN0cmluZztcbiAgcHJpdmF0ZSBzZXNzaW9uQ2FjaGU6IE1hcDxzdHJpbmcsIFBhcnRpYWw8U2Vzc2lvbkRhdGE+PiA9IG5ldyBNYXAoKTtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IENvbmZpZykge1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIC8vIE5vcm1hbGl6ZSBVUkwgdG8gLmNvbnZleC5zaXRlIGZvciBIVFRQIGVuZHBvaW50c1xuICAgIC8vIFN1cHBvcnRzIGJvdGggLmNvbnZleC5jbG91ZCBhbmQgLmNvbnZleC5zaXRlIGlucHV0IFVSTHNcbiAgICB0aGlzLnNpdGVVcmwgPSBjb25maWcuY29udmV4VXJsLnJlcGxhY2UoXCIuY29udmV4LmNsb3VkXCIsIFwiLmNvbnZleC5zaXRlXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXF1ZXN0KGVuZHBvaW50OiBzdHJpbmcsIGRhdGE6IHVua25vd24pOiBQcm9taXNlPHVua25vd24+IHtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNpdGVVcmx9JHtlbmRwb2ludH1gO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy5jb25maWcuYXBpS2V5fWAsXG4gICAgICB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoZGF0YSksXG4gICAgfSk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTeW5jIGZhaWxlZDogJHtyZXNwb25zZS5zdGF0dXN9IC0gJHt0ZXh0fWApO1xuICAgIH1cblxuICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gIH1cblxuICAvLyBUcmFuc2Zvcm0gc2Vzc2lvbiBkYXRhIHRvIGJhY2tlbmQgZm9ybWF0XG4gIHByaXZhdGUgdHJhbnNmb3JtU2Vzc2lvbihzZXNzaW9uOiBTZXNzaW9uRGF0YSk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4ge1xuICAgICAgZXh0ZXJuYWxJZDogc2Vzc2lvbi5zZXNzaW9uSWQsXG4gICAgICB0aXRsZTogc2Vzc2lvbi50aXRsZSxcbiAgICAgIHByb2plY3RQYXRoOiBzZXNzaW9uLnByb2plY3RQYXRoIHx8IHNlc3Npb24uY3dkLFxuICAgICAgcHJvamVjdE5hbWU6IHNlc3Npb24ucHJvamVjdE5hbWUsXG4gICAgICBtb2RlbDogc2Vzc2lvbi5tb2RlbCxcbiAgICAgIHNvdXJjZTogc2Vzc2lvbi5zb3VyY2UsXG4gICAgICBwcm9tcHRUb2tlbnM6IHNlc3Npb24udG9rZW5Vc2FnZT8uaW5wdXQsXG4gICAgICBjb21wbGV0aW9uVG9rZW5zOiBzZXNzaW9uLnRva2VuVXNhZ2U/Lm91dHB1dCxcbiAgICAgIGNvc3Q6IHNlc3Npb24uY29zdEVzdGltYXRlLFxuICAgICAgZHVyYXRpb25Nczogc2Vzc2lvbi5lbmRlZEF0ICYmIHNlc3Npb24uc3RhcnRlZEF0XG4gICAgICAgID8gbmV3IERhdGUoc2Vzc2lvbi5lbmRlZEF0KS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShzZXNzaW9uLnN0YXJ0ZWRBdCkuZ2V0VGltZSgpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICAvLyBUcmFuc2Zvcm0gbWVzc2FnZSBkYXRhIHRvIGJhY2tlbmQgZm9ybWF0XG4gIHByaXZhdGUgdHJhbnNmb3JtTWVzc2FnZShtZXNzYWdlOiBNZXNzYWdlRGF0YSk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Vzc2lvbkV4dGVybmFsSWQ6IG1lc3NhZ2Uuc2Vzc2lvbklkLFxuICAgICAgZXh0ZXJuYWxJZDogbWVzc2FnZS5tZXNzYWdlSWQsXG4gICAgICByb2xlOiBtZXNzYWdlLnJvbGUsXG4gICAgICB0ZXh0Q29udGVudDogbWVzc2FnZS5jb250ZW50IHx8IG1lc3NhZ2UudG9vbFJlc3VsdCxcbiAgICAgIG1vZGVsOiB1bmRlZmluZWQsXG4gICAgICBkdXJhdGlvbk1zOiBtZXNzYWdlLmR1cmF0aW9uTXMsXG4gICAgICBzb3VyY2U6IG1lc3NhZ2Uuc291cmNlLFxuICAgICAgLy8gVG9vbCB1c2UgaW5mbyBzdG9yZWQgaW4gcGFydHNcbiAgICAgIHBhcnRzOiBtZXNzYWdlLnRvb2xOYW1lXG4gICAgICAgID8gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBcInRvb2xfdXNlXCIsXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgICAgICAgICB0b29sTmFtZTogbWVzc2FnZS50b29sTmFtZSxcbiAgICAgICAgICAgICAgICBhcmdzOiBtZXNzYWdlLnRvb2xBcmdzLFxuICAgICAgICAgICAgICAgIHJlc3VsdDogbWVzc2FnZS50b29sUmVzdWx0LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBzeW5jU2Vzc2lvbihzZXNzaW9uOiBTZXNzaW9uRGF0YSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy50cmFuc2Zvcm1TZXNzaW9uKHNlc3Npb24pO1xuICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0KFwiL3N5bmMvc2Vzc2lvblwiLCBwYXlsb2FkKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBzeW5jIHNlc3Npb246XCIsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN5bmNNZXNzYWdlKG1lc3NhZ2U6IE1lc3NhZ2VEYXRhKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLnRyYW5zZm9ybU1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3QoXCIvc3luYy9tZXNzYWdlXCIsIHBheWxvYWQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIHN5bmMgbWVzc2FnZTpcIiwgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3luY0JhdGNoKFxuICAgIHNlc3Npb25zOiBTZXNzaW9uRGF0YVtdLFxuICAgIG1lc3NhZ2VzOiBNZXNzYWdlRGF0YVtdXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0cmFuc2Zvcm1lZFNlc3Npb25zID0gc2Vzc2lvbnMubWFwKChzKSA9PiB0aGlzLnRyYW5zZm9ybVNlc3Npb24ocykpO1xuICAgICAgY29uc3QgdHJhbnNmb3JtZWRNZXNzYWdlcyA9IG1lc3NhZ2VzLm1hcCgobSkgPT4gdGhpcy50cmFuc2Zvcm1NZXNzYWdlKG0pKTtcbiAgICAgIGF3YWl0IHRoaXMucmVxdWVzdChcIi9zeW5jL2JhdGNoXCIsIHtcbiAgICAgICAgc2Vzc2lvbnM6IHRyYW5zZm9ybWVkU2Vzc2lvbnMsXG4gICAgICAgIG1lc3NhZ2VzOiB0cmFuc2Zvcm1lZE1lc3NhZ2VzLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gc3luYyBiYXRjaDpcIiwgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdGVzdENvbm5lY3Rpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2l0ZVVybH0vaGVhbHRoYDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5vaztcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXNzaW9uIHN0YXRlIG1hbmFnZW1lbnRcbiAgZ2V0U2Vzc2lvblN0YXRlKHNlc3Npb25JZDogc3RyaW5nKTogUGFydGlhbDxTZXNzaW9uRGF0YT4ge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb25DYWNoZS5nZXQoc2Vzc2lvbklkKSB8fCB7fTtcbiAgfVxuXG4gIHVwZGF0ZVNlc3Npb25TdGF0ZShcbiAgICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgICB1cGRhdGVzOiBQYXJ0aWFsPFNlc3Npb25EYXRhPlxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25JZCkgfHwge307XG4gICAgdGhpcy5zZXNzaW9uQ2FjaGUuc2V0KHNlc3Npb25JZCwgeyAuLi5jdXJyZW50LCAuLi51cGRhdGVzIH0pO1xuICB9XG5cbiAgY2xlYXJTZXNzaW9uU3RhdGUoc2Vzc2lvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlc3Npb25DYWNoZS5kZWxldGUoc2Vzc2lvbklkKTtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBQbHVnaW4gRXhwb3J0XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQ2xhdWRlIENvZGUgUGx1Z2luIEVudHJ5IFBvaW50XG4gKlxuICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgQ2xhdWRlIENvZGUgdG8gcmVnaXN0ZXIgdGhlIHBsdWdpbi5cbiAqIEl0IHJldHVybnMgaG9vayBoYW5kbGVycyB0aGF0IGZpcmUgYXQga2V5IHBvaW50cyBpbiB0aGUgc2Vzc2lvbiBsaWZlY3ljbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQbHVnaW4oKTogQ2xhdWRlQ29kZUhvb2tzIHwgbnVsbCB7XG4gIGNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcoKTtcblxuICBpZiAoIWNvbmZpZykge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgXCJbY2xhdWRlLWNvZGUtc3luY10gTm90IGNvbmZpZ3VyZWQuIFJ1biAnY2xhdWRlLWNvZGUtc3luYyBsb2dpbicgdG8gc2V0IHVwLlwiXG4gICAgKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChjb25maWcuYXV0b1N5bmMgPT09IGZhbHNlKSB7XG4gICAgY29uc29sZS5sb2coXCJbY2xhdWRlLWNvZGUtc3luY10gQXV0by1zeW5jIGRpc2FibGVkIGluIGNvbmZpZy5cIik7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjbGllbnQgPSBuZXcgU3luY0NsaWVudChjb25maWcpO1xuICBsZXQgbWVzc2FnZUNvdW50ZXIgPSAwO1xuICBsZXQgdG9vbENhbGxDb3VudGVyID0gMDtcblxuICBjb25zb2xlLmxvZyhcIltjbGF1ZGUtY29kZS1zeW5jXSBQbHVnaW4gbG9hZGVkLiBTZXNzaW9ucyB3aWxsIHN5bmMgdG8gT3BlblN5bmMuXCIpO1xuXG4gIHJldHVybiB7XG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gYSBuZXcgc2Vzc2lvbiBzdGFydHNcbiAgICAgKi9cbiAgICBTZXNzaW9uU3RhcnQ6IGFzeW5jIChldmVudDogU2Vzc2lvblN0YXJ0RXZlbnQpID0+IHtcbiAgICAgIG1lc3NhZ2VDb3VudGVyID0gMDtcbiAgICAgIHRvb2xDYWxsQ291bnRlciA9IDA7XG5cbiAgICAgIGNvbnN0IHNlc3Npb246IFNlc3Npb25EYXRhID0ge1xuICAgICAgICBzZXNzaW9uSWQ6IGV2ZW50LnNlc3Npb25JZCxcbiAgICAgICAgc291cmNlOiBcImNsYXVkZS1jb2RlXCIsXG4gICAgICAgIGN3ZDogZXZlbnQuY3dkLFxuICAgICAgICBtb2RlbDogZXZlbnQubW9kZWwsXG4gICAgICAgIHN0YXJ0VHlwZTogZXZlbnQuc3RhcnRUeXBlLFxuICAgICAgICB0aGlua2luZ0VuYWJsZWQ6IGV2ZW50LnRoaW5raW5nRW5hYmxlZCxcbiAgICAgICAgcGVybWlzc2lvbk1vZGU6IGV2ZW50LnBlcm1pc3Npb25Nb2RlLFxuICAgICAgICBtY3BTZXJ2ZXJzOiBldmVudC5tY3BTZXJ2ZXJzLFxuICAgICAgICBzdGFydGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIH07XG5cbiAgICAgIC8vIEV4dHJhY3QgcHJvamVjdCBpbmZvIGZyb20gY3dkXG4gICAgICBpZiAoZXZlbnQuY3dkKSB7XG4gICAgICAgIHNlc3Npb24ucHJvamVjdFBhdGggPSBldmVudC5jd2Q7XG4gICAgICAgIHNlc3Npb24ucHJvamVjdE5hbWUgPSBwYXRoLmJhc2VuYW1lKGV2ZW50LmN3ZCk7XG5cbiAgICAgICAgLy8gVHJ5IHRvIGdldCBnaXQgaW5mb1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGdpdERpciA9IHBhdGguam9pbihldmVudC5jd2QsIFwiLmdpdFwiKTtcbiAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhnaXREaXIpKSB7XG4gICAgICAgICAgICBjb25zdCBoZWFkRmlsZSA9IHBhdGguam9pbihnaXREaXIsIFwiSEVBRFwiKTtcbiAgICAgICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGhlYWRGaWxlKSkge1xuICAgICAgICAgICAgICBjb25zdCBoZWFkID0gZnMucmVhZEZpbGVTeW5jKGhlYWRGaWxlLCBcInV0Zi04XCIpLnRyaW0oKTtcbiAgICAgICAgICAgICAgaWYgKGhlYWQuc3RhcnRzV2l0aChcInJlZjogcmVmcy9oZWFkcy9cIikpIHtcbiAgICAgICAgICAgICAgICBzZXNzaW9uLmdpdEJyYW5jaCA9IGhlYWQucmVwbGFjZShcInJlZjogcmVmcy9oZWFkcy9cIiwgXCJcIik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIElnbm9yZSBnaXQgZXJyb3JzXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2xpZW50LnVwZGF0ZVNlc3Npb25TdGF0ZShldmVudC5zZXNzaW9uSWQsIHNlc3Npb24pO1xuICAgICAgYXdhaXQgY2xpZW50LnN5bmNTZXNzaW9uKHNlc3Npb24pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiB1c2VyIHN1Ym1pdHMgYSBwcm9tcHRcbiAgICAgKi9cbiAgICBVc2VyUHJvbXB0U3VibWl0OiBhc3luYyAoZXZlbnQ6IFVzZXJQcm9tcHRFdmVudCkgPT4ge1xuICAgICAgbWVzc2FnZUNvdW50ZXIrKztcblxuICAgICAgY29uc3QgbWVzc2FnZTogTWVzc2FnZURhdGEgPSB7XG4gICAgICAgIHNlc3Npb25JZDogZXZlbnQuc2Vzc2lvbklkLFxuICAgICAgICBtZXNzYWdlSWQ6IGAke2V2ZW50LnNlc3Npb25JZH0tbXNnLSR7bWVzc2FnZUNvdW50ZXJ9YCxcbiAgICAgICAgc291cmNlOiBcImNsYXVkZS1jb2RlXCIsXG4gICAgICAgIHJvbGU6IFwidXNlclwiLFxuICAgICAgICBjb250ZW50OiBldmVudC5wcm9tcHQsXG4gICAgICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wIHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IGNsaWVudC5zeW5jTWVzc2FnZShtZXNzYWdlKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIGFmdGVyIGVhY2ggdG9vbCB1c2VcbiAgICAgKi9cbiAgICBQb3N0VG9vbFVzZTogYXN5bmMgKGV2ZW50OiBUb29sVXNlRXZlbnQpID0+IHtcbiAgICAgIGlmICghY29uZmlnLnN5bmNUb29sQ2FsbHMpIHJldHVybjtcblxuICAgICAgdG9vbENhbGxDb3VudGVyKys7XG4gICAgICBtZXNzYWdlQ291bnRlcisrO1xuXG4gICAgICBjb25zdCBtZXNzYWdlOiBNZXNzYWdlRGF0YSA9IHtcbiAgICAgICAgc2Vzc2lvbklkOiBldmVudC5zZXNzaW9uSWQsXG4gICAgICAgIG1lc3NhZ2VJZDogYCR7ZXZlbnQuc2Vzc2lvbklkfS10b29sLSR7dG9vbENhbGxDb3VudGVyfWAsXG4gICAgICAgIHNvdXJjZTogXCJjbGF1ZGUtY29kZVwiLFxuICAgICAgICByb2xlOiBcImFzc2lzdGFudFwiLFxuICAgICAgICB0b29sTmFtZTogZXZlbnQudG9vbE5hbWUsXG4gICAgICAgIHRvb2xBcmdzOiBldmVudC5hcmdzLFxuICAgICAgICB0b29sUmVzdWx0OiBldmVudC5yZXN1bHQsXG4gICAgICAgIGR1cmF0aW9uTXM6IGV2ZW50LmR1cmF0aW9uTXMsXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgY2xpZW50LnN5bmNNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiBDbGF1ZGUgc3RvcHMgcmVzcG9uZGluZ1xuICAgICAqL1xuICAgIFN0b3A6IGFzeW5jIChldmVudDogU3RvcEV2ZW50KSA9PiB7XG4gICAgICBtZXNzYWdlQ291bnRlcisrO1xuXG4gICAgICBjb25zdCBtZXNzYWdlOiBNZXNzYWdlRGF0YSA9IHtcbiAgICAgICAgc2Vzc2lvbklkOiBldmVudC5zZXNzaW9uSWQsXG4gICAgICAgIG1lc3NhZ2VJZDogYCR7ZXZlbnQuc2Vzc2lvbklkfS1tc2ctJHttZXNzYWdlQ291bnRlcn1gLFxuICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIixcbiAgICAgICAgcm9sZTogXCJhc3Npc3RhbnRcIixcbiAgICAgICAgY29udGVudDogZXZlbnQucmVzcG9uc2UsXG4gICAgICAgIHRva2VuQ291bnQ6IGV2ZW50LnRva2VuVXNhZ2UuaW5wdXQgKyBldmVudC50b2tlblVzYWdlLm91dHB1dCxcbiAgICAgICAgZHVyYXRpb25NczogZXZlbnQuZHVyYXRpb25NcyxcbiAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9O1xuXG4gICAgICAvLyBVcGRhdGUgc2Vzc2lvbiBzdGF0ZSB3aXRoIHRva2VuIHVzYWdlXG4gICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBjbGllbnQuZ2V0U2Vzc2lvblN0YXRlKGV2ZW50LnNlc3Npb25JZCk7XG4gICAgICBjb25zdCBjdXJyZW50VG9rZW5zID0gY3VycmVudFN0YXRlLnRva2VuVXNhZ2UgfHwgeyBpbnB1dDogMCwgb3V0cHV0OiAwIH07XG4gICAgICBjbGllbnQudXBkYXRlU2Vzc2lvblN0YXRlKGV2ZW50LnNlc3Npb25JZCwge1xuICAgICAgICB0b2tlblVzYWdlOiB7XG4gICAgICAgICAgaW5wdXQ6IGN1cnJlbnRUb2tlbnMuaW5wdXQgKyBldmVudC50b2tlblVzYWdlLmlucHV0LFxuICAgICAgICAgIG91dHB1dDogY3VycmVudFRva2Vucy5vdXRwdXQgKyBldmVudC50b2tlblVzYWdlLm91dHB1dCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBjbGllbnQuc3luY01lc3NhZ2UobWVzc2FnZSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIHNlc3Npb24gZW5kc1xuICAgICAqL1xuICAgIFNlc3Npb25FbmQ6IGFzeW5jIChldmVudDogU2Vzc2lvbkVuZEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBjbGllbnQuZ2V0U2Vzc2lvblN0YXRlKGV2ZW50LnNlc3Npb25JZCk7XG5cbiAgICAgIGNvbnN0IHNlc3Npb246IFNlc3Npb25EYXRhID0ge1xuICAgICAgICAuLi5jdXJyZW50U3RhdGUsXG4gICAgICAgIHNlc3Npb25JZDogZXZlbnQuc2Vzc2lvbklkLFxuICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIixcbiAgICAgICAgZW5kUmVhc29uOiBldmVudC5lbmRSZWFzb24sXG4gICAgICAgIG1lc3NhZ2VDb3VudDogZXZlbnQubWVzc2FnZUNvdW50LFxuICAgICAgICB0b29sQ2FsbENvdW50OiBldmVudC50b29sQ2FsbENvdW50LFxuICAgICAgICB0b2tlblVzYWdlOiBldmVudC50b3RhbFRva2VuVXNhZ2UsXG4gICAgICAgIGNvc3RFc3RpbWF0ZTogZXZlbnQuY29zdEVzdGltYXRlLFxuICAgICAgICBlbmRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBjbGllbnQuc3luY1Nlc3Npb24oc2Vzc2lvbik7XG4gICAgICBjbGllbnQuY2xlYXJTZXNzaW9uU3RhdGUoZXZlbnQuc2Vzc2lvbklkKTtcblxuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBbY2xhdWRlLWNvZGUtc3luY10gU2Vzc2lvbiBzeW5jZWQ6ICR7ZXZlbnQubWVzc2FnZUNvdW50fSBtZXNzYWdlcywgJHtldmVudC50b29sQ2FsbENvdW50fSB0b29sIGNhbGxzYFxuICAgICAgKTtcbiAgICB9LFxuICB9O1xufVxuXG4vLyBEZWZhdWx0IGV4cG9ydCBmb3IgQ2xhdWRlIENvZGUgcGx1Z2luIHN5c3RlbVxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlUGx1Z2luO1xuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-code-sync",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "description": "Sync your Claude Code sessions to OpenSync dashboard. Track coding sessions, analyze tool usage, and monitor token consumption across projects.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",