@sendly/cli 3.5.4 → 3.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/commands/logout.js +15 -2
- package/dist/commands/trigger.d.ts +13 -0
- package/dist/commands/trigger.js +61 -0
- package/dist/commands/webhooks/listen.d.ts +6 -5
- package/dist/commands/webhooks/listen.js +98 -88
- package/dist/lib/auth.js +1 -2
- package/dist/lib/config.d.ts +1 -0
- package/dist/lib/config.js +110 -17
- package/oclif.manifest.json +501 -458
- package/package.json +1 -3
package/README.md
CHANGED
package/dist/commands/logout.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { BaseCommand } from "../lib/base-command.js";
|
|
2
2
|
import { logout } from "../lib/auth.js";
|
|
3
3
|
import { success, info } from "../lib/output.js";
|
|
4
|
-
import { isAuthenticated } from "../lib/config.js";
|
|
4
|
+
import { isAuthenticated, getAuthToken } from "../lib/config.js";
|
|
5
|
+
import { apiClient } from "../lib/api-client.js";
|
|
5
6
|
export default class Logout extends BaseCommand {
|
|
6
7
|
static description = "Log out of Sendly";
|
|
7
8
|
static examples = ["<%= config.bin %> logout"];
|
|
@@ -13,8 +14,20 @@ export default class Logout extends BaseCommand {
|
|
|
13
14
|
info("Not currently logged in");
|
|
14
15
|
return;
|
|
15
16
|
}
|
|
17
|
+
const token = getAuthToken();
|
|
18
|
+
// Revoke token server-side first (if it's a CLI session token)
|
|
19
|
+
if (token?.startsWith("cli_")) {
|
|
20
|
+
try {
|
|
21
|
+
await apiClient.post("/api/cli/auth/logout", {}, true);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// Continue with local logout even if server revocation fails
|
|
25
|
+
// This handles offline scenarios and ensures user can always logout
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// Clear local credentials
|
|
16
29
|
logout();
|
|
17
30
|
success("Logged out successfully");
|
|
18
31
|
}
|
|
19
32
|
}
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nb3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2xvZ291dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFRLE1BQU0sa0JBQWtCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFakQsTUFBTSxDQUFDLE9BQU8sT0FBTyxNQUFPLFNBQVEsV0FBVztJQUM3QyxNQUFNLENBQUMsV0FBVyxHQUFHLG1CQUFtQixDQUFDO0lBRXpDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBRS9DLE1BQU0sQ0FBQyxLQUFLLEdBQUc7UUFDYixHQUFHLFdBQVcsQ0FBQyxTQUFTO0tBQ3pCLENBQUM7SUFFRixLQUFLLENBQUMsR0FBRztRQUNQLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1lBQ2hDLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsWUFBWSxFQUFFLENBQUM7UUFFN0IsK0RBQStEO1FBQy9ELElBQUksS0FBSyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQztnQkFDSCxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pELENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsNkRBQTZEO2dCQUM3RCxvRUFBb0U7WUFDdEUsQ0FBQztRQUNILENBQUM7UUFFRCwwQkFBMEI7UUFDMUIsTUFBTSxFQUFFLENBQUM7UUFDVCxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUNyQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvbW1hbmQgfSBmcm9tIFwiLi4vbGliL2Jhc2UtY29tbWFuZC5qc1wiO1xuaW1wb3J0IHsgbG9nb3V0IH0gZnJvbSBcIi4uL2xpYi9hdXRoLmpzXCI7XG5pbXBvcnQgeyBzdWNjZXNzLCBpbmZvLCB3YXJuIH0gZnJvbSBcIi4uL2xpYi9vdXRwdXQuanNcIjtcbmltcG9ydCB7IGlzQXV0aGVudGljYXRlZCwgZ2V0QXV0aFRva2VuIH0gZnJvbSBcIi4uL2xpYi9jb25maWcuanNcIjtcbmltcG9ydCB7IGFwaUNsaWVudCB9IGZyb20gXCIuLi9saWIvYXBpLWNsaWVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dvdXQgZXh0ZW5kcyBCYXNlQ29tbWFuZCB7XG4gIHN0YXRpYyBkZXNjcmlwdGlvbiA9IFwiTG9nIG91dCBvZiBTZW5kbHlcIjtcblxuICBzdGF0aWMgZXhhbXBsZXMgPSBbXCI8JT0gY29uZmlnLmJpbiAlPiBsb2dvdXRcIl07XG5cbiAgc3RhdGljIGZsYWdzID0ge1xuICAgIC4uLkJhc2VDb21tYW5kLmJhc2VGbGFncyxcbiAgfTtcblxuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFpc0F1dGhlbnRpY2F0ZWQoKSkge1xuICAgICAgaW5mbyhcIk5vdCBjdXJyZW50bHkgbG9nZ2VkIGluXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRva2VuID0gZ2V0QXV0aFRva2VuKCk7XG5cbiAgICAvLyBSZXZva2UgdG9rZW4gc2VydmVyLXNpZGUgZmlyc3QgKGlmIGl0J3MgYSBDTEkgc2Vzc2lvbiB0b2tlbilcbiAgICBpZiAodG9rZW4/LnN0YXJ0c1dpdGgoXCJjbGlfXCIpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBhcGlDbGllbnQucG9zdChcIi9hcGkvY2xpL2F1dGgvbG9nb3V0XCIsIHt9LCB0cnVlKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBDb250aW51ZSB3aXRoIGxvY2FsIGxvZ291dCBldmVuIGlmIHNlcnZlciByZXZvY2F0aW9uIGZhaWxzXG4gICAgICAgIC8vIFRoaXMgaGFuZGxlcyBvZmZsaW5lIHNjZW5hcmlvcyBhbmQgZW5zdXJlcyB1c2VyIGNhbiBhbHdheXMgbG9nb3V0XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2xlYXIgbG9jYWwgY3JlZGVudGlhbHNcbiAgICBsb2dvdXQoKTtcbiAgICBzdWNjZXNzKFwiTG9nZ2VkIG91dCBzdWNjZXNzZnVsbHlcIik7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AuthenticatedCommand } from "../lib/base-command.js";
|
|
2
|
+
export default class Trigger extends AuthenticatedCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
event: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
10
|
+
quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
11
|
+
};
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Args } from "@oclif/core";
|
|
2
|
+
import { AuthenticatedCommand } from "../lib/base-command.js";
|
|
3
|
+
import { apiClient } from "../lib/api-client.js";
|
|
4
|
+
import { success, error } from "../lib/output.js";
|
|
5
|
+
const VALID_EVENT_TYPES = [
|
|
6
|
+
"message.sent",
|
|
7
|
+
"message.delivered",
|
|
8
|
+
"message.failed",
|
|
9
|
+
"message.bounced",
|
|
10
|
+
"message.received",
|
|
11
|
+
];
|
|
12
|
+
export default class Trigger extends AuthenticatedCommand {
|
|
13
|
+
static description = "Trigger a test webhook event. Sends a synthetic event to your active CLI listener.";
|
|
14
|
+
static examples = [
|
|
15
|
+
"<%= config.bin %> trigger message.delivered",
|
|
16
|
+
"<%= config.bin %> trigger message.failed",
|
|
17
|
+
"<%= config.bin %> trigger message.sent",
|
|
18
|
+
];
|
|
19
|
+
static args = {
|
|
20
|
+
event: Args.string({
|
|
21
|
+
description: "Event type to trigger",
|
|
22
|
+
required: true,
|
|
23
|
+
options: VALID_EVENT_TYPES,
|
|
24
|
+
}),
|
|
25
|
+
};
|
|
26
|
+
static flags = {
|
|
27
|
+
...AuthenticatedCommand.baseFlags,
|
|
28
|
+
};
|
|
29
|
+
async run() {
|
|
30
|
+
const { args } = await this.parse(Trigger);
|
|
31
|
+
const eventType = args.event;
|
|
32
|
+
if (!VALID_EVENT_TYPES.includes(eventType)) {
|
|
33
|
+
error(`Invalid event type: ${eventType}`, {
|
|
34
|
+
hint: `Valid types: ${VALID_EVENT_TYPES.join(", ")}`,
|
|
35
|
+
});
|
|
36
|
+
this.exit(1);
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
const response = await apiClient.post(`/api/cli/trigger/${eventType}`, {});
|
|
40
|
+
if (response.success) {
|
|
41
|
+
success(response.message);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
error("Failed to trigger event");
|
|
45
|
+
this.exit(1);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
if (err.message?.includes("No active CLI listeners")) {
|
|
50
|
+
error("No active CLI listeners", {
|
|
51
|
+
hint: "Run 'sendly webhooks listen' in another terminal first",
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
throw err;
|
|
56
|
+
}
|
|
57
|
+
this.exit(1);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJpZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy90cmlnZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQVMsTUFBTSxhQUFhLENBQUM7QUFDMUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFnQixNQUFNLGtCQUFrQixDQUFDO0FBRWhFLE1BQU0saUJBQWlCLEdBQUc7SUFDeEIsY0FBYztJQUNkLG1CQUFtQjtJQUNuQixnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtDQUNuQixDQUFDO0FBRUYsTUFBTSxDQUFDLE9BQU8sT0FBTyxPQUFRLFNBQVEsb0JBQW9CO0lBQ3ZELE1BQU0sQ0FBQyxXQUFXLEdBQ2hCLG9GQUFvRixDQUFDO0lBRXZGLE1BQU0sQ0FBQyxRQUFRLEdBQUc7UUFDaEIsNkNBQTZDO1FBQzdDLDBDQUEwQztRQUMxQyx3Q0FBd0M7S0FDekMsQ0FBQztJQUVGLE1BQU0sQ0FBQyxJQUFJLEdBQUc7UUFDWixLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNqQixXQUFXLEVBQUUsdUJBQXVCO1lBQ3BDLFFBQVEsRUFBRSxJQUFJO1lBQ2QsT0FBTyxFQUFFLGlCQUFpQjtTQUMzQixDQUFDO0tBQ0gsQ0FBQztJQUVGLE1BQU0sQ0FBQyxLQUFLLEdBQUc7UUFDYixHQUFHLG9CQUFvQixDQUFDLFNBQVM7S0FDbEMsQ0FBQztJQUVGLEtBQUssQ0FBQyxHQUFHO1FBQ1AsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBRTdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxLQUFLLENBQUMsdUJBQXVCLFNBQVMsRUFBRSxFQUFFO2dCQUN4QyxJQUFJLEVBQUUsZ0JBQWdCLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTthQUNyRCxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FDbkMsb0JBQW9CLFNBQVMsRUFBRSxFQUMvQixFQUFFLENBQ0gsQ0FBQztZQUVGLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNyQixPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztnQkFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxHQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLHlCQUF5QixDQUFDLEVBQUUsQ0FBQztnQkFDckQsS0FBSyxDQUFDLHlCQUF5QixFQUFFO29CQUMvQixJQUFJLEVBQUUsd0RBQXdEO2lCQUMvRCxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxHQUFHLENBQUM7WUFDWixDQUFDO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXJncywgRmxhZ3MgfSBmcm9tIFwiQG9jbGlmL2NvcmVcIjtcbmltcG9ydCB7IEF1dGhlbnRpY2F0ZWRDb21tYW5kIH0gZnJvbSBcIi4uL2xpYi9iYXNlLWNvbW1hbmQuanNcIjtcbmltcG9ydCB7IGFwaUNsaWVudCB9IGZyb20gXCIuLi9saWIvYXBpLWNsaWVudC5qc1wiO1xuaW1wb3J0IHsgc3VjY2VzcywgZXJyb3IsIGluZm8sIGNvbG9ycyB9IGZyb20gXCIuLi9saWIvb3V0cHV0LmpzXCI7XG5cbmNvbnN0IFZBTElEX0VWRU5UX1RZUEVTID0gW1xuICBcIm1lc3NhZ2Uuc2VudFwiLFxuICBcIm1lc3NhZ2UuZGVsaXZlcmVkXCIsXG4gIFwibWVzc2FnZS5mYWlsZWRcIixcbiAgXCJtZXNzYWdlLmJvdW5jZWRcIixcbiAgXCJtZXNzYWdlLnJlY2VpdmVkXCIsXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUcmlnZ2VyIGV4dGVuZHMgQXV0aGVudGljYXRlZENvbW1hbmQge1xuICBzdGF0aWMgZGVzY3JpcHRpb24gPVxuICAgIFwiVHJpZ2dlciBhIHRlc3Qgd2ViaG9vayBldmVudC4gU2VuZHMgYSBzeW50aGV0aWMgZXZlbnQgdG8geW91ciBhY3RpdmUgQ0xJIGxpc3RlbmVyLlwiO1xuXG4gIHN0YXRpYyBleGFtcGxlcyA9IFtcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHRyaWdnZXIgbWVzc2FnZS5kZWxpdmVyZWRcIixcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHRyaWdnZXIgbWVzc2FnZS5mYWlsZWRcIixcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHRyaWdnZXIgbWVzc2FnZS5zZW50XCIsXG4gIF07XG5cbiAgc3RhdGljIGFyZ3MgPSB7XG4gICAgZXZlbnQ6IEFyZ3Muc3RyaW5nKHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkV2ZW50IHR5cGUgdG8gdHJpZ2dlclwiLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICBvcHRpb25zOiBWQUxJRF9FVkVOVF9UWVBFUyxcbiAgICB9KSxcbiAgfTtcblxuICBzdGF0aWMgZmxhZ3MgPSB7XG4gICAgLi4uQXV0aGVudGljYXRlZENvbW1hbmQuYmFzZUZsYWdzLFxuICB9O1xuXG4gIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGFyZ3MgfSA9IGF3YWl0IHRoaXMucGFyc2UoVHJpZ2dlcik7XG4gICAgY29uc3QgZXZlbnRUeXBlID0gYXJncy5ldmVudDtcblxuICAgIGlmICghVkFMSURfRVZFTlRfVFlQRVMuaW5jbHVkZXMoZXZlbnRUeXBlKSkge1xuICAgICAgZXJyb3IoYEludmFsaWQgZXZlbnQgdHlwZTogJHtldmVudFR5cGV9YCwge1xuICAgICAgICBoaW50OiBgVmFsaWQgdHlwZXM6ICR7VkFMSURfRVZFTlRfVFlQRVMuam9pbihcIiwgXCIpfWAsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXhpdCgxKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlDbGllbnQucG9zdDx7IHN1Y2Nlc3M6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZyB9PihcbiAgICAgICAgYC9hcGkvY2xpL3RyaWdnZXIvJHtldmVudFR5cGV9YCxcbiAgICAgICAge30sXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICBzdWNjZXNzKHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IoXCJGYWlsZWQgdG8gdHJpZ2dlciBldmVudFwiKTtcbiAgICAgICAgdGhpcy5leGl0KDEpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBpZiAoZXJyLm1lc3NhZ2U/LmluY2x1ZGVzKFwiTm8gYWN0aXZlIENMSSBsaXN0ZW5lcnNcIikpIHtcbiAgICAgICAgZXJyb3IoXCJObyBhY3RpdmUgQ0xJIGxpc3RlbmVyc1wiLCB7XG4gICAgICAgICAgaGludDogXCJSdW4gJ3NlbmRseSB3ZWJob29rcyBsaXN0ZW4nIGluIGFub3RoZXIgdGVybWluYWwgZmlyc3RcIixcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgICB0aGlzLmV4aXQoMSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -5,16 +5,17 @@ export default class WebhooksListen extends AuthenticatedCommand {
|
|
|
5
5
|
static flags: {
|
|
6
6
|
forward: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
7
7
|
events: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
8
|
-
port: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
9
8
|
json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
10
9
|
quiet: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
11
10
|
};
|
|
12
|
-
private
|
|
13
|
-
private
|
|
11
|
+
private ws;
|
|
12
|
+
private sessionId;
|
|
13
|
+
private secret;
|
|
14
14
|
run(): Promise<void>;
|
|
15
|
-
private
|
|
15
|
+
private connectWebSocket;
|
|
16
|
+
private handleEvent;
|
|
17
|
+
private verifySignature;
|
|
16
18
|
private displayEvent;
|
|
17
19
|
private forwardEvent;
|
|
18
|
-
private generateSignature;
|
|
19
20
|
private cleanup;
|
|
20
21
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { Flags } from "@oclif/core";
|
|
2
2
|
import { AuthenticatedCommand } from "../../lib/base-command.js";
|
|
3
3
|
import { apiClient } from "../../lib/api-client.js";
|
|
4
|
-
import { error, warn, colors, spinner, } from "../../lib/output.js";
|
|
5
|
-
import
|
|
4
|
+
import { error, info, warn, colors, spinner, } from "../../lib/output.js";
|
|
5
|
+
import WebSocket from "ws";
|
|
6
|
+
import * as crypto from "node:crypto";
|
|
6
7
|
export default class WebhooksListen extends AuthenticatedCommand {
|
|
7
|
-
static description = "Listen for webhooks locally
|
|
8
|
+
static description = "Listen for webhooks locally. Receives events in real-time via WebSocket and forwards them to your local server.";
|
|
8
9
|
static examples = [
|
|
9
10
|
"<%= config.bin %> webhooks listen",
|
|
10
11
|
"<%= config.bin %> webhooks listen --forward http://localhost:3000/webhook",
|
|
@@ -22,97 +23,116 @@ export default class WebhooksListen extends AuthenticatedCommand {
|
|
|
22
23
|
description: "Comma-separated list of events to listen for",
|
|
23
24
|
default: "message.sent,message.delivered,message.failed,message.bounced",
|
|
24
25
|
}),
|
|
25
|
-
port: Flags.integer({
|
|
26
|
-
char: "p",
|
|
27
|
-
description: "Local port for the tunnel (auto-detected from forward URL if not specified)",
|
|
28
|
-
}),
|
|
29
26
|
};
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
ws = null;
|
|
28
|
+
sessionId = null;
|
|
29
|
+
secret = null;
|
|
32
30
|
async run() {
|
|
33
31
|
const { flags } = await this.parse(WebhooksListen);
|
|
34
|
-
const forwardUrl = new URL(flags.forward);
|
|
35
|
-
const localPort = flags.port || parseInt(forwardUrl.port) || 3000;
|
|
36
32
|
const events = flags.events.split(",").map((e) => e.trim());
|
|
37
33
|
const spin = spinner("Starting webhook listener...");
|
|
38
34
|
spin.start();
|
|
39
35
|
try {
|
|
40
|
-
|
|
41
|
-
this.tunnel = await localtunnel({
|
|
42
|
-
port: localPort,
|
|
43
|
-
subdomain: `sendly-${Date.now().toString(36)}`,
|
|
44
|
-
});
|
|
45
|
-
const tunnelUrl = this.tunnel.url;
|
|
46
|
-
spin.succeed("Tunnel established");
|
|
47
|
-
// Register temporary webhook with Sendly
|
|
48
|
-
const webhookResponse = await apiClient.post("/api/cli/webhooks/listen", {
|
|
49
|
-
url: `${tunnelUrl}/cli-webhook`,
|
|
36
|
+
const response = await apiClient.post("/api/cli/listen/start", {
|
|
50
37
|
events,
|
|
51
38
|
forwardUrl: flags.forward,
|
|
52
39
|
});
|
|
53
|
-
this.
|
|
54
|
-
|
|
55
|
-
|
|
40
|
+
this.sessionId = response.sessionId;
|
|
41
|
+
this.secret = response.secret;
|
|
42
|
+
spin.succeed("Listener registered");
|
|
56
43
|
console.log();
|
|
57
44
|
console.log(colors.bold(colors.primary("Webhook listener ready!")));
|
|
58
45
|
console.log();
|
|
59
|
-
console.log(` ${colors.dim("Tunnel URL:")} ${colors.code(tunnelUrl)}`);
|
|
60
46
|
console.log(` ${colors.dim("Forwarding to:")} ${colors.code(flags.forward)}`);
|
|
61
47
|
console.log(` ${colors.dim("Events:")} ${events.join(", ")}`);
|
|
62
48
|
console.log();
|
|
63
49
|
console.log(` ${colors.dim("Webhook Secret:")}`);
|
|
64
|
-
console.log(` ${colors.primary(secret)}`);
|
|
50
|
+
console.log(` ${colors.primary(response.secret)}`);
|
|
65
51
|
console.log();
|
|
66
52
|
console.log(colors.dim("Use this secret to verify webhook signatures in your app."));
|
|
67
53
|
console.log();
|
|
68
|
-
|
|
54
|
+
const spin2 = spinner("Connecting to Sendly...");
|
|
55
|
+
spin2.start();
|
|
56
|
+
await this.connectWebSocket(response.wsUrl, flags.forward);
|
|
57
|
+
spin2.succeed("Connected");
|
|
58
|
+
console.log();
|
|
59
|
+
console.log(colors.bold("Waiting for events... (Ctrl+C to quit)"));
|
|
69
60
|
console.log(colors.dim("─".repeat(60)));
|
|
70
61
|
console.log();
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
// Handle tunnel close
|
|
76
|
-
this.tunnel.on("close", () => {
|
|
77
|
-
warn("Tunnel closed");
|
|
78
|
-
this.cleanup();
|
|
62
|
+
const cleanup = async () => {
|
|
63
|
+
console.log();
|
|
64
|
+
info("Shutting down...");
|
|
65
|
+
await this.cleanup();
|
|
79
66
|
process.exit(0);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
});
|
|
84
|
-
// Poll for events and display them
|
|
85
|
-
await this.pollEvents(flags.forward, secret);
|
|
67
|
+
};
|
|
68
|
+
process.on("SIGINT", cleanup);
|
|
69
|
+
process.on("SIGTERM", cleanup);
|
|
70
|
+
await new Promise(() => { });
|
|
86
71
|
}
|
|
87
72
|
catch (err) {
|
|
88
73
|
spin.fail("Failed to start listener");
|
|
89
74
|
throw err;
|
|
90
75
|
}
|
|
91
76
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
77
|
+
connectWebSocket(wsUrl, forwardUrl) {
|
|
78
|
+
return new Promise((resolve, reject) => {
|
|
79
|
+
this.ws = new WebSocket(wsUrl);
|
|
80
|
+
const timeout = setTimeout(() => {
|
|
81
|
+
reject(new Error("WebSocket connection timeout"));
|
|
82
|
+
}, 30000);
|
|
83
|
+
this.ws.on("open", () => {
|
|
84
|
+
clearTimeout(timeout);
|
|
85
|
+
});
|
|
86
|
+
this.ws.on("message", async (data) => {
|
|
87
|
+
try {
|
|
88
|
+
const message = JSON.parse(data.toString());
|
|
89
|
+
if (message.type === "cli_connected") {
|
|
90
|
+
resolve();
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (message.type === "webhook_event" && message.event) {
|
|
94
|
+
await this.handleEvent(message, forwardUrl);
|
|
95
|
+
}
|
|
100
96
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
97
|
+
catch (err) {
|
|
98
|
+
console.error("Failed to parse WebSocket message:", err);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
this.ws.on("close", (code, reason) => {
|
|
102
|
+
if (code !== 1000) {
|
|
103
|
+
warn(`WebSocket disconnected: ${reason || code}`);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
this.ws.on("error", (err) => {
|
|
107
|
+
clearTimeout(timeout);
|
|
108
|
+
error(`WebSocket error: ${err.message}`);
|
|
109
|
+
reject(err);
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
async handleEvent(message, forwardUrl) {
|
|
114
|
+
const event = message.event;
|
|
115
|
+
const timestamp = message.timestamp;
|
|
116
|
+
const signature = message.signature;
|
|
117
|
+
this.displayEvent(event);
|
|
118
|
+
if (this.verifySignature(event, timestamp, signature)) {
|
|
119
|
+
await this.forwardEvent(forwardUrl, event, timestamp, signature);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
console.log(` ${colors.error("✗")} Signature verification failed`);
|
|
123
|
+
console.log();
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
verifySignature(event, timestamp, signature) {
|
|
127
|
+
if (!this.secret)
|
|
128
|
+
return false;
|
|
129
|
+
const payload = JSON.stringify(event);
|
|
130
|
+
const signedPayload = `${timestamp}.${payload}`;
|
|
131
|
+
const expectedSignature = `sha256=${crypto
|
|
132
|
+
.createHmac("sha256", this.secret)
|
|
133
|
+
.update(signedPayload, "utf8")
|
|
134
|
+
.digest("hex")}`;
|
|
135
|
+
return signature === expectedSignature;
|
|
116
136
|
}
|
|
117
137
|
displayEvent(event) {
|
|
118
138
|
const timestamp = new Date(event.created * 1000).toLocaleTimeString();
|
|
@@ -123,28 +143,29 @@ export default class WebhooksListen extends AuthenticatedCommand {
|
|
|
123
143
|
if (eventType.includes("failed"))
|
|
124
144
|
statusColor = colors.error;
|
|
125
145
|
console.log(`${colors.dim(timestamp)} ${statusColor("→")} ${colors.bold(eventType)}`);
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
const
|
|
146
|
+
const data = event.data?.object;
|
|
147
|
+
if (data) {
|
|
148
|
+
const messageId = data.id;
|
|
149
|
+
const to = data.to;
|
|
129
150
|
if (messageId) {
|
|
130
|
-
console.log(` ${colors.dim("
|
|
151
|
+
console.log(` ${colors.dim("id:")} ${messageId}`);
|
|
131
152
|
}
|
|
132
153
|
if (to) {
|
|
133
154
|
console.log(` ${colors.dim("to:")} ${to}`);
|
|
134
155
|
}
|
|
135
156
|
}
|
|
136
|
-
console.log();
|
|
137
157
|
}
|
|
138
|
-
async forwardEvent(forwardUrl, event,
|
|
158
|
+
async forwardEvent(forwardUrl, event, timestamp, signature) {
|
|
139
159
|
try {
|
|
140
160
|
const payload = JSON.stringify(event);
|
|
141
|
-
const signature = await this.generateSignature(payload, secret);
|
|
142
161
|
const response = await fetch(forwardUrl, {
|
|
143
162
|
method: "POST",
|
|
144
163
|
headers: {
|
|
145
164
|
"Content-Type": "application/json",
|
|
146
165
|
"X-Sendly-Signature": signature,
|
|
166
|
+
"X-Sendly-Timestamp": timestamp.toString(),
|
|
147
167
|
"X-Sendly-Event": event.type,
|
|
168
|
+
"X-Sendly-Event-Id": event.id,
|
|
148
169
|
},
|
|
149
170
|
body: payload,
|
|
150
171
|
});
|
|
@@ -160,25 +181,14 @@ export default class WebhooksListen extends AuthenticatedCommand {
|
|
|
160
181
|
}
|
|
161
182
|
console.log();
|
|
162
183
|
}
|
|
163
|
-
async generateSignature(payload, secret) {
|
|
164
|
-
const encoder = new TextEncoder();
|
|
165
|
-
const key = await crypto.subtle.importKey("raw", encoder.encode(secret), { name: "HMAC", hash: "SHA-256" }, false, ["sign"]);
|
|
166
|
-
const signature = await crypto.subtle.sign("HMAC", key, encoder.encode(payload));
|
|
167
|
-
const hashArray = Array.from(new Uint8Array(signature));
|
|
168
|
-
const hashHex = hashArray
|
|
169
|
-
.map((b) => b.toString(16).padStart(2, "0"))
|
|
170
|
-
.join("");
|
|
171
|
-
return `v1=${hashHex}`;
|
|
172
|
-
}
|
|
173
184
|
async cleanup() {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
this.
|
|
185
|
+
if (this.ws) {
|
|
186
|
+
this.ws.close(1000, "Client shutdown");
|
|
187
|
+
this.ws = null;
|
|
177
188
|
}
|
|
178
|
-
|
|
179
|
-
if (this.webhookId) {
|
|
189
|
+
if (this.sessionId) {
|
|
180
190
|
try {
|
|
181
|
-
await apiClient.delete(`/api/cli/
|
|
191
|
+
await apiClient.delete(`/api/cli/listen/stop/${this.sessionId}`);
|
|
182
192
|
}
|
|
183
193
|
catch {
|
|
184
194
|
// Ignore cleanup errors
|
|
@@ -186,4 +196,4 @@ export default class WebhooksListen extends AuthenticatedCommand {
|
|
|
186
196
|
}
|
|
187
197
|
}
|
|
188
198
|
}
|
|
189
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdGVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3dlYmhvb2tzL2xpc3Rlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBRUwsS0FBSyxFQUVMLElBQUksRUFDSixNQUFNLEVBR04sT0FBTyxHQUdSLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxXQUFXLE1BQU0sYUFBYSxDQUFDO0FBU3RDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sY0FBZSxTQUFRLG9CQUFvQjtJQUM5RCxNQUFNLENBQUMsV0FBVyxHQUNoQixnSEFBZ0gsQ0FBQztJQUVuSCxNQUFNLENBQUMsUUFBUSxHQUFHO1FBQ2hCLG1DQUFtQztRQUNuQywyRUFBMkU7UUFDM0UsNkVBQTZFO0tBQzlFLENBQUM7SUFFRixNQUFNLENBQUMsS0FBSyxHQUFHO1FBQ2IsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTO1FBQ2pDLE9BQU8sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3BCLElBQUksRUFBRSxHQUFHO1lBQ1QsV0FBVyxFQUFFLGdDQUFnQztZQUM3QyxPQUFPLEVBQUUsK0JBQStCO1NBQ3pDLENBQUM7UUFDRixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNuQixJQUFJLEVBQUUsR0FBRztZQUNULFdBQVcsRUFBRSw4Q0FBOEM7WUFDM0QsT0FBTyxFQUFFLCtEQUErRDtTQUN6RSxDQUFDO1FBQ0YsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDbEIsSUFBSSxFQUFFLEdBQUc7WUFDVCxXQUFXLEVBQ1QsNkVBQTZFO1NBQ2hGLENBQUM7S0FDSCxDQUFDO0lBRU0sTUFB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Q29udGVudCI6WyJpbXBvcnQgeyBGbGFncyB9IGZyb20gXCJAb2NsaWYvY29yZVwiO1xuaW1wb3J0IHsgQXV0aGVudGljYXRlZENvbW1hbmQgfSBmcm9tIFwiLi4vLi4vbGliL2Jhc2UtY29tbWFuZC5qc1wiO1xuaW1wb3J0IHsgYXBpQ2xpZW50IH0gZnJvbSBcIi4uLy4uL2xpYi9hcGktY2xpZW50LmpzXCI7XG5pbXBvcnQge1xuICBzdWNjZXNzLFxuICBlcnJvcixcbiAgaW5mbyxcbiAgd2FybixcbiAgY29sb3JzLFxuICBmb3JtYXRTdGF0dXMsXG4gIGZvcm1hdERhdGUsXG4gIHNwaW5uZXIsXG4gIGpzb24gYXMganNvbk91dHB1dCxcbiAgaXNKc29uTW9kZSxcbn0gZnJvbSBcIi4uLy4uL2xpYi9vdXRwdXQuanNcIjtcbmltcG9ydCB7IGdldENvbmZpZ1ZhbHVlIH0gZnJvbSBcIi4uLy4uL2xpYi9jb25maWcuanNcIjtcbmltcG9ydCBsb2NhbHR1bm5lbCBmcm9tIFwibG9jYWx0dW5uZWxcIjtcblxuaW50ZXJmYWNlIFdlYmhvb2tFdmVudCB7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNyZWF0ZWQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2ViaG9va3NMaXN0ZW4gZXh0ZW5kcyBBdXRoZW50aWNhdGVkQ29tbWFuZCB7XG4gIHN0YXRpYyBkZXNjcmlwdGlvbiA9XG4gICAgXCJMaXN0ZW4gZm9yIHdlYmhvb2tzIGxvY2FsbHkgKGxpa2UgU3RyaXBlIENMSSkuIENyZWF0ZXMgYSBzZWN1cmUgdHVubmVsIHRvIGZvcndhcmQgZXZlbnRzIHRvIHlvdXIgbG9jYWwgc2VydmVyLlwiO1xuXG4gIHN0YXRpYyBleGFtcGxlcyA9IFtcbiAgICBcIjwlPSBjb25maWcuYmluICU+IHdlYmhvb2tzIGxpc3RlblwiLFxuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gd2ViaG9va3MgbGlzdGVuIC0tZm9yd2FyZCBodHRwOi8vbG9jYWxob3N0OjMwMDAvd2ViaG9va1wiLFxuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gd2ViaG9va3MgbGlzdGVuIC0tZXZlbnRzIG1lc3NhZ2UuZGVsaXZlcmVkLG1lc3NhZ2UuZmFpbGVkXCIsXG4gIF07XG5cbiAgc3RhdGljIGZsYWdzID0ge1xuICAgIC4uLkF1dGhlbnRpY2F0ZWRDb21tYW5kLmJhc2VGbGFncyxcbiAgICBmb3J3YXJkOiBGbGFncy5zdHJpbmcoe1xuICAgICAgY2hhcjogXCJmXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJMb2NhbCBVUkwgdG8gZm9yd2FyZCBldmVudHMgdG9cIixcbiAgICAgIGRlZmF1bHQ6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL3dlYmhvb2tcIixcbiAgICB9KSxcbiAgICBldmVudHM6IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcImVcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGV2ZW50cyB0byBsaXN0ZW4gZm9yXCIsXG4gICAgICBkZWZhdWx0OiBcIm1lc3NhZ2Uuc2VudCxtZXNzYWdlLmRlbGl2ZXJlZCxtZXNzYWdlLmZhaWxlZCxtZXNzYWdlLmJvdW5jZWRcIixcbiAgICB9KSxcbiAgICBwb3J0OiBGbGFncy5pbnRlZ2VyKHtcbiAgICAgIGNoYXI6IFwicFwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiTG9jYWwgcG9ydCBmb3IgdGhlIHR1bm5lbCAoYXV0by1kZXRlY3RlZCBmcm9tIGZvcndhcmQgVVJMIGlmIG5vdCBzcGVjaWZpZWQpXCIsXG4gICAgfSksXG4gIH07XG5cbiAgcHJpdmF0ZSB0dW5uZWw6IGxvY2FsdHVubmVsLlR1bm5lbCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHdlYmhvb2tJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgZmxhZ3MgfSA9IGF3YWl0IHRoaXMucGFyc2UoV2ViaG9va3NMaXN0ZW4pO1xuXG4gICAgY29uc3QgZm9yd2FyZFVybCA9IG5ldyBVUkwoZmxhZ3MuZm9yd2FyZCk7XG4gICAgY29uc3QgbG9jYWxQb3J0ID0gZmxhZ3MucG9ydCB8fCBwYXJzZUludChmb3J3YXJkVXJsLnBvcnQpIHx8IDMwMDA7XG4gICAgY29uc3QgZXZlbnRzID0gZmxhZ3MuZXZlbnRzLnNwbGl0KFwiLFwiKS5tYXAoKGUpID0+IGUudHJpbSgpKTtcblxuICAgIGNvbnN0IHNwaW4gPSBzcGlubmVyKFwiU3RhcnRpbmcgd2ViaG9vayBsaXN0ZW5lci4uLlwiKTtcbiAgICBzcGluLnN0YXJ0KCk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gQ3JlYXRlIGxvY2FsdHVubmVsXG4gICAgICB0aGlzLnR1bm5lbCA9IGF3YWl0IGxvY2FsdHVubmVsKHtcbiAgICAgICAgcG9ydDogbG9jYWxQb3J0LFxuICAgICAgICBzdWJkb21haW46IGBzZW5kbHktJHtEYXRlLm5vdygpLnRvU3RyaW5nKDM2KX1gLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR1bm5lbFVybCA9IHRoaXMudHVubmVsLnVybDtcbiAgICAgIHNwaW4uc3VjY2VlZChcIlR1bm5lbCBlc3RhYmxpc2hlZFwiKTtcblxuICAgICAgLy8gUmVnaXN0ZXIgdGVtcG9yYXJ5IHdlYmhvb2sgd2l0aCBTZW5kbHlcbiAgICAgIGNvbnN0IHdlYmhvb2tSZXNwb25zZSA9IGF3YWl0IGFwaUNsaWVudC5wb3N0PHtcbiAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgc2VjcmV0OiBzdHJpbmc7XG4gICAgICB9PihcIi9hcGkvY2xpL3dlYmhvb2tzL2xpc3RlblwiLCB7XG4gICAgICAgIHVybDogYCR7dHVubmVsVXJsfS9jbGktd2ViaG9va2AsXG4gICAgICAgIGV2ZW50cyxcbiAgICAgICAgZm9yd2FyZFVybDogZmxhZ3MuZm9yd2FyZCxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLndlYmhvb2tJZCA9IHdlYmhvb2tSZXNwb25zZS5pZDtcbiAgICAgIGNvbnN0IHNlY3JldCA9IHdlYmhvb2tSZXNwb25zZS5zZWNyZXQ7XG5cbiAgICAgIC8vIERpc3BsYXkgY29ubmVjdGlvbiBpbmZvXG4gICAgICBjb25zb2xlLmxvZygpO1xuICAgICAgY29uc29sZS5sb2coY29sb3JzLmJvbGQoY29sb3JzLnByaW1hcnkoXCJXZWJob29rIGxpc3RlbmVyIHJlYWR5IVwiKSkpO1xuICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgICAke2NvbG9ycy5kaW0oXCJUdW5uZWwgVVJMOlwiKX0gICAgICR7Y29sb3JzLmNvZGUodHVubmVsVXJsKX1gLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgICAke2NvbG9ycy5kaW0oXCJGb3J3YXJkaW5nIHRvOlwiKX0gJHtjb2xvcnMuY29kZShmbGFncy5mb3J3YXJkKX1gLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKGAgICR7Y29sb3JzLmRpbShcIkV2ZW50czpcIil9ICAgICAgICAke2V2ZW50cy5qb2luKFwiLCBcIil9YCk7XG4gICAgICBjb25zb2xlLmxvZygpO1xuICAgICAgY29uc29sZS5sb2coYCAgJHtjb2xvcnMuZGltKFwiV2ViaG9vayBTZWNyZXQ6XCIpfWApO1xuICAgICAgY29uc29sZS5sb2coYCAgJHtjb2xvcnMucHJpbWFyeShzZWNyZXQpfWApO1xuICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBjb2xvcnMuZGltKFwiVXNlIHRoaXMgc2VjcmV0IHRvIHZlcmlmeSB3ZWJob29rIHNpZ25hdHVyZXMgaW4geW91ciBhcHAuXCIpLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICBjb25zb2xlLmxvZyhjb2xvcnMuYm9sZChcIldhaXRpbmcgZm9yIGV2ZW50cy4uLlwiKSk7XG4gICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKFwi4pSAXCIucmVwZWF0KDYwKSkpO1xuICAgICAgY29uc29sZS5sb2coKTtcblxuICAgICAgLy8gU2V0IHVwIGV2ZW50IGZvcndhcmRpbmdcbiAgICAgIHRoaXMudHVubmVsLm9uKFwicmVxdWVzdFwiLCAoaW5mbykgPT4ge1xuICAgICAgICAvLyBUaGlzIGlzIGp1c3QgZm9yIGxvZ2dpbmcgLSBhY3R1YWwgZm9yd2FyZGluZyBoYXBwZW5zIHNlcnZlci1zaWRlXG4gICAgICB9KTtcblxuICAgICAgLy8gSGFuZGxlIHR1bm5lbCBjbG9zZVxuICAgICAgdGhpcy50dW5uZWwub24oXCJjbG9zZVwiLCAoKSA9PiB7XG4gICAgICAgIHdhcm4oXCJUdW5uZWwgY2xvc2VkXCIpO1xuICAgICAgICB0aGlzLmNsZWFudXAoKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMudHVubmVsLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICBlcnJvcihgVHVubmVsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFBvbGwgZm9yIGV2ZW50cyBhbmQgZGlzcGxheSB0aGVtXG4gICAgICBhd2FpdCB0aGlzLnBvbGxFdmVudHMoZmxhZ3MuZm9yd2FyZCwgc2VjcmV0KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHNwaW4uZmFpbChcIkZhaWxlZCB0byBzdGFydCBsaXN0ZW5lclwiKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHBvbGxFdmVudHMoZm9yd2FyZFVybDogc3RyaW5nLCBzZWNyZXQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFBvbGwgZm9yIGV2ZW50cyBhdCByZWd1bGFyIGludGVydmFsc1xuICAgIGNvbnN0IHBvbGxJbnRlcnZhbCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IGF3YWl0IGFwaUNsaWVudC5nZXQ8V2ViaG9va0V2ZW50W10+KFxuICAgICAgICAgIGAvYXBpL2NsaS93ZWJob29rcy9ldmVudHM/d2ViaG9va0lkPSR7dGhpcy53ZWJob29rSWR9JnNpbmNlPSR7RGF0ZS5ub3coKSAtIDUwMDB9YCxcbiAgICAgICAgKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuICAgICAgICAgIHRoaXMuZGlzcGxheUV2ZW50KGV2ZW50KTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmZvcndhcmRFdmVudChmb3J3YXJkVXJsLCBldmVudCwgc2VjcmV0KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIElnbm9yZSBwb2xsaW5nIGVycm9yc1xuICAgICAgfVxuICAgIH0sIDIwMDApO1xuXG4gICAgLy8gSGFuZGxlIGdyYWNlZnVsIHNodXRkb3duXG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGNsZWFySW50ZXJ2YWwocG9sbEludGVydmFsKTtcbiAgICAgIHRoaXMuY2xlYW51cCgpO1xuICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgIH07XG5cbiAgICBwcm9jZXNzLm9uKFwiU0lHSU5UXCIsIGNsZWFudXApO1xuICAgIHByb2Nlc3Mub24oXCJTSUdURVJNXCIsIGNsZWFudXApO1xuXG4gICAgLy8gS2VlcCBwcm9jZXNzIGFsaXZlXG4gICAgYXdhaXQgbmV3IFByb21pc2UoKCkgPT4ge30pO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwbGF5RXZlbnQoZXZlbnQ6IFdlYmhvb2tFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKGV2ZW50LmNyZWF0ZWQgKiAxMDAwKS50b0xvY2FsZVRpbWVTdHJpbmcoKTtcbiAgICBjb25zdCBldmVudFR5cGUgPSBldmVudC50eXBlO1xuXG4gICAgbGV0IHN0YXR1c0NvbG9yID0gY29sb3JzLmluZm87XG4gICAgaWYgKGV2ZW50VHlwZS5pbmNsdWRlcyhcImRlbGl2ZXJlZFwiKSkgc3RhdHVzQ29sb3IgPSBjb2xvcnMuc3VjY2VzcztcbiAgICBpZiAoZXZlbnRUeXBlLmluY2x1ZGVzKFwiZmFpbGVkXCIpKSBzdGF0dXNDb2xvciA9IGNvbG9ycy5lcnJvcjtcblxuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYCR7Y29sb3JzLmRpbSh0aW1lc3RhbXApfSAke3N0YXR1c0NvbG9yKFwi4oaSXCIpfSAke2NvbG9ycy5ib2xkKGV2ZW50VHlwZSl9YCxcbiAgICApO1xuXG4gICAgaWYgKGV2ZW50LmRhdGEpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2VJZCA9XG4gICAgICAgIChldmVudC5kYXRhIGFzIGFueSkubWVzc2FnZV9pZCB8fCAoZXZlbnQuZGF0YSBhcyBhbnkpLmlkO1xuICAgICAgY29uc3QgdG8gPSAoZXZlbnQuZGF0YSBhcyBhbnkpLnRvO1xuICAgICAgaWYgKG1lc3NhZ2VJZCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgICAke2NvbG9ycy5kaW0oXCJtZXNzYWdlX2lkOlwiKX0gJHttZXNzYWdlSWR9YCk7XG4gICAgICB9XG4gICAgICBpZiAodG8pIHtcbiAgICAgICAgY29uc29sZS5sb2coYCAgJHtjb2xvcnMuZGltKFwidG86XCIpfSAke3RvfWApO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zb2xlLmxvZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmb3J3YXJkRXZlbnQoXG4gICAgZm9yd2FyZFVybDogc3RyaW5nLFxuICAgIGV2ZW50OiBXZWJob29rRXZlbnQsXG4gICAgc2VjcmV0OiBzdHJpbmcsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkoZXZlbnQpO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gYXdhaXQgdGhpcy5nZW5lcmF0ZVNpZ25hdHVyZShwYXlsb2FkLCBzZWNyZXQpO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGZvcndhcmRVcmwsIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgIFwiWC1TZW5kbHktU2lnbmF0dXJlXCI6IHNpZ25hdHVyZSxcbiAgICAgICAgICBcIlgtU2VuZGx5LUV2ZW50XCI6IGV2ZW50LnR5cGUsXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IHBheWxvYWQsXG4gICAgICB9KTtcblxuICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGAgICR7Y29sb3JzLnN1Y2Nlc3MoXCLinJNcIil9IEZvcndhcmRlZCB0byAke2ZvcndhcmRVcmx9ICgke3Jlc3BvbnNlLnN0YXR1c30pYCxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGAgICR7Y29sb3JzLmVycm9yKFwi4pyXXCIpfSBGb3J3YXJkIGZhaWxlZCAoJHtyZXNwb25zZS5zdGF0dXN9KWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYCAgJHtjb2xvcnMuZXJyb3IoXCLinJdcIil9IEZvcndhcmQgZXJyb3I6ICR7KGVyciBhcyBFcnJvcikubWVzc2FnZX1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2VuZXJhdGVTaWduYXR1cmUoXG4gICAgcGF5bG9hZDogc3RyaW5nLFxuICAgIHNlY3JldDogc3RyaW5nLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICBjb25zdCBrZXkgPSBhd2FpdCBjcnlwdG8uc3VidGxlLmltcG9ydEtleShcbiAgICAgIFwicmF3XCIsXG4gICAgICBlbmNvZGVyLmVuY29kZShzZWNyZXQpLFxuICAgICAgeyBuYW1lOiBcIkhNQUNcIiwgaGFzaDogXCJTSEEtMjU2XCIgfSxcbiAgICAgIGZhbHNlLFxuICAgICAgW1wic2lnblwiXSxcbiAgICApO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuc2lnbihcbiAgICAgIFwiSE1BQ1wiLFxuICAgICAga2V5LFxuICAgICAgZW5jb2Rlci5lbmNvZGUocGF5bG9hZCksXG4gICAgKTtcbiAgICBjb25zdCBoYXNoQXJyYXkgPSBBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KHNpZ25hdHVyZSkpO1xuICAgIGNvbnN0IGhhc2hIZXggPSBoYXNoQXJyYXlcbiAgICAgIC5tYXAoKGIpID0+IGIudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIFwiMFwiKSlcbiAgICAgIC5qb2luKFwiXCIpO1xuICAgIHJldHVybiBgdjE9JHtoYXNoSGV4fWA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNsZWFudXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQ2xlYW4gdXAgdHVubmVsXG4gICAgaWYgKHRoaXMudHVubmVsKSB7XG4gICAgICB0aGlzLnR1bm5lbC5jbG9zZSgpO1xuICAgIH1cblxuICAgIC8vIENsZWFuIHVwIHRlbXBvcmFyeSB3ZWJob29rXG4gICAgaWYgKHRoaXMud2ViaG9va0lkKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBhcGlDbGllbnQuZGVsZXRlKGAvYXBpL2NsaS93ZWJob29rcy9saXN0ZW4vJHt0aGlzLndlYmhvb2tJZH1gKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBJZ25vcmUgY2xlYW51cCBlcnJvcnNcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
199
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdGVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3dlYmhvb2tzL2xpc3Rlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBRUwsS0FBSyxFQUNMLElBQUksRUFDSixJQUFJLEVBQ0osTUFBTSxFQUNOLE9BQU8sR0FDUixNQUFNLHFCQUFxQixDQUFDO0FBRTdCLE9BQU8sU0FBUyxNQUFNLElBQUksQ0FBQztBQUMzQixPQUFPLEtBQUssTUFBTSxNQUFNLGFBQWEsQ0FBQztBQStCdEMsTUFBTSxDQUFDLE9BQU8sT0FBTyxjQUFlLFNBQVEsb0JBQW9CO0lBQzlELE1BQU0sQ0FBQyxXQUFXLEdBQ2hCLGlIQUFpSCxDQUFDO0lBRXBILE1BQU0sQ0FBQyxRQUFRLEdBQUc7UUFDaEIsbUNBQW1DO1FBQ25DLDJFQUEyRTtRQUMzRSw2RUFBNkU7S0FDOUUsQ0FBQztJQUVGLE1BQU0sQ0FBQyxLQUFLLEdBQUc7UUFDYixHQUFHLG9CQUFvQixDQUFDLFNBQVM7UUFDakMsT0FBTyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDcEIsSUFBSSxFQUFFLEdBQUc7WUFDVCxXQUFXLEVBQUUsZ0NBQWdDO1lBQzdDLE9BQU8sRUFBRSwrQkFBK0I7U0FDekMsQ0FBQztRQUNGLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ25CLElBQUksRUFBRSxHQUFHO1lBQ1QsV0FBVyxFQUFFLDhDQUE4QztZQUMzRCxPQUFPLEVBQUUsK0RBQStEO1NBQ3pFLENBQUM7S0FDSCxDQUFDO0lBRU0sRUFBRSxHQUFxQixJQUFJLENBQUM7SUFDNUIsU0FBUyxHQUFrQixJQUFJLENB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QWlCLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztRQUNqQixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDO2dCQUNILE1BQU0sU0FBUyxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDbkUsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCx3QkFBd0I7WUFDMUIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmxhZ3MgfSBmcm9tIFwiQG9jbGlmL2NvcmVcIjtcbmltcG9ydCB7IEF1dGhlbnRpY2F0ZWRDb21tYW5kIH0gZnJvbSBcIi4uLy4uL2xpYi9iYXNlLWNvbW1hbmQuanNcIjtcbmltcG9ydCB7IGFwaUNsaWVudCB9IGZyb20gXCIuLi8uLi9saWIvYXBpLWNsaWVudC5qc1wiO1xuaW1wb3J0IHtcbiAgc3VjY2VzcyxcbiAgZXJyb3IsXG4gIGluZm8sXG4gIHdhcm4sXG4gIGNvbG9ycyxcbiAgc3Bpbm5lcixcbn0gZnJvbSBcIi4uLy4uL2xpYi9vdXRwdXQuanNcIjtcbmltcG9ydCB7IGdldENvbmZpZ1ZhbHVlIH0gZnJvbSBcIi4uLy4uL2xpYi9jb25maWcuanNcIjtcbmltcG9ydCBXZWJTb2NrZXQgZnJvbSBcIndzXCI7XG5pbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5cbmludGVyZmFjZSBXZWJob29rRXZlbnQge1xuICBpZDogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGFwaV92ZXJzaW9uOiBzdHJpbmc7XG4gIGNyZWF0ZWQ6IG51bWJlcjtcbiAgbGl2ZW1vZGU6IGJvb2xlYW47XG4gIGRhdGE6IHtcbiAgICBvYmplY3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9O1xufVxuXG5pbnRlcmZhY2UgV2ViU29ja2V0TWVzc2FnZSB7XG4gIHR5cGU6IHN0cmluZztcbiAgdGltZXN0YW1wPzogbnVtYmVyO1xuICBzaWduYXR1cmU/OiBzdHJpbmc7XG4gIGV2ZW50PzogV2ViaG9va0V2ZW50O1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7XG4gIGV2ZW50cz86IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgTGlzdGVuU3RhcnRSZXNwb25zZSB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICB3c1Rva2VuOiBzdHJpbmc7XG4gIHNlY3JldDogc3RyaW5nO1xuICB3c1VybDogc3RyaW5nO1xuICBldmVudHM6IHN0cmluZ1tdO1xuICBmb3J3YXJkVXJsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdlYmhvb2tzTGlzdGVuIGV4dGVuZHMgQXV0aGVudGljYXRlZENvbW1hbmQge1xuICBzdGF0aWMgZGVzY3JpcHRpb24gPVxuICAgIFwiTGlzdGVuIGZvciB3ZWJob29rcyBsb2NhbGx5LiBSZWNlaXZlcyBldmVudHMgaW4gcmVhbC10aW1lIHZpYSBXZWJTb2NrZXQgYW5kIGZvcndhcmRzIHRoZW0gdG8geW91ciBsb2NhbCBzZXJ2ZXIuXCI7XG5cbiAgc3RhdGljIGV4YW1wbGVzID0gW1xuICAgIFwiPCU9IGNvbmZpZy5iaW4gJT4gd2ViaG9va3MgbGlzdGVuXCIsXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiB3ZWJob29rcyBsaXN0ZW4gLS1mb3J3YXJkIGh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC93ZWJob29rXCIsXG4gICAgXCI8JT0gY29uZmlnLmJpbiAlPiB3ZWJob29rcyBsaXN0ZW4gLS1ldmVudHMgbWVzc2FnZS5kZWxpdmVyZWQsbWVzc2FnZS5mYWlsZWRcIixcbiAgXTtcblxuICBzdGF0aWMgZmxhZ3MgPSB7XG4gICAgLi4uQXV0aGVudGljYXRlZENvbW1hbmQuYmFzZUZsYWdzLFxuICAgIGZvcndhcmQ6IEZsYWdzLnN0cmluZyh7XG4gICAgICBjaGFyOiBcImZcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxvY2FsIFVSTCB0byBmb3J3YXJkIGV2ZW50cyB0b1wiLFxuICAgICAgZGVmYXVsdDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvd2ViaG9va1wiLFxuICAgIH0pLFxuICAgIGV2ZW50czogRmxhZ3Muc3RyaW5nKHtcbiAgICAgIGNoYXI6IFwiZVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZXZlbnRzIHRvIGxpc3RlbiBmb3JcIixcbiAgICAgIGRlZmF1bHQ6IFwibWVzc2FnZS5zZW50LG1lc3NhZ2UuZGVsaXZlcmVkLG1lc3NhZ2UuZmFpbGVkLG1lc3NhZ2UuYm91bmNlZFwiLFxuICAgIH0pLFxuICB9O1xuXG4gIHByaXZhdGUgd3M6IFdlYlNvY2tldCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHNlc3Npb25JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc2VjcmV0OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBmbGFncyB9ID0gYXdhaXQgdGhpcy5wYXJzZShXZWJob29rc0xpc3Rlbik7XG4gICAgY29uc3QgZXZlbnRzID0gZmxhZ3MuZXZlbnRzLnNwbGl0KFwiLFwiKS5tYXAoKGUpID0+IGUudHJpbSgpKTtcblxuICAgIGNvbnN0IHNwaW4gPSBzcGlubmVyKFwiU3RhcnRpbmcgd2ViaG9vayBsaXN0ZW5lci4uLlwiKTtcbiAgICBzcGluLnN0YXJ0KCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlDbGllbnQucG9zdDxMaXN0ZW5TdGFydFJlc3BvbnNlPihcbiAgICAgICAgXCIvYXBpL2NsaS9saXN0ZW4vc3RhcnRcIixcbiAgICAgICAge1xuICAgICAgICAgIGV2ZW50cyxcbiAgICAgICAgICBmb3J3YXJkVXJsOiBmbGFncy5mb3J3YXJkLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgdGhpcy5zZXNzaW9uSWQgPSByZXNwb25zZS5zZXNzaW9uSWQ7XG4gICAgICB0aGlzLnNlY3JldCA9IHJlc3BvbnNlLnNlY3JldDtcblxuICAgICAgc3Bpbi5zdWNjZWVkKFwiTGlzdGVuZXIgcmVnaXN0ZXJlZFwiKTtcblxuICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgIGNvbnNvbGUubG9nKGNvbG9ycy5ib2xkKGNvbG9ycy5wcmltYXJ5KFwiV2ViaG9vayBsaXN0ZW5lciByZWFkeSFcIikpKTtcbiAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYCAgJHtjb2xvcnMuZGltKFwiRm9yd2FyZGluZyB0bzpcIil9ICR7Y29sb3JzLmNvZGUoZmxhZ3MuZm9yd2FyZCl9YCxcbiAgICAgICk7XG4gICAgICBjb25zb2xlLmxvZyhgICAke2NvbG9ycy5kaW0oXCJFdmVudHM6XCIpfSAgICAgICAgJHtldmVudHMuam9pbihcIiwgXCIpfWApO1xuICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgIGNvbnNvbGUubG9nKGAgICR7Y29sb3JzLmRpbShcIldlYmhvb2sgU2VjcmV0OlwiKX1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGAgICR7Y29sb3JzLnByaW1hcnkocmVzcG9uc2Uuc2VjcmV0KX1gKTtcbiAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgY29sb3JzLmRpbShcIlVzZSB0aGlzIHNlY3JldCB0byB2ZXJpZnkgd2ViaG9vayBzaWduYXR1cmVzIGluIHlvdXIgYXBwLlwiKSxcbiAgICAgICk7XG4gICAgICBjb25zb2xlLmxvZygpO1xuXG4gICAgICBjb25zdCBzcGluMiA9IHNwaW5uZXIoXCJDb25uZWN0aW5nIHRvIFNlbmRseS4uLlwiKTtcbiAgICAgIHNwaW4yLnN0YXJ0KCk7XG5cbiAgICAgIGF3YWl0IHRoaXMuY29ubmVjdFdlYlNvY2tldChyZXNwb25zZS53c1VybCwgZmxhZ3MuZm9yd2FyZCk7XG5cbiAgICAgIHNwaW4yLnN1Y2NlZWQoXCJDb25uZWN0ZWRcIik7XG4gICAgICBjb25zb2xlLmxvZygpO1xuICAgICAgY29uc29sZS5sb2coY29sb3JzLmJvbGQoXCJXYWl0aW5nIGZvciBldmVudHMuLi4gKEN0cmwrQyB0byBxdWl0KVwiKSk7XG4gICAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKFwi4pSAXCIucmVwZWF0KDYwKSkpO1xuICAgICAgY29uc29sZS5sb2coKTtcblxuICAgICAgY29uc3QgY2xlYW51cCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgICAgaW5mbyhcIlNodXR0aW5nIGRvd24uLi5cIik7XG4gICAgICAgIGF3YWl0IHRoaXMuY2xlYW51cCgpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgICB9O1xuXG4gICAgICBwcm9jZXNzLm9uKFwiU0lHSU5UXCIsIGNsZWFudXApO1xuICAgICAgcHJvY2Vzcy5vbihcIlNJR1RFUk1cIiwgY2xlYW51cCk7XG5cbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKCgpID0+IHt9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHNwaW4uZmFpbChcIkZhaWxlZCB0byBzdGFydCBsaXN0ZW5lclwiKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbm5lY3RXZWJTb2NrZXQod3NVcmw6IHN0cmluZywgZm9yd2FyZFVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMud3MgPSBuZXcgV2ViU29ja2V0KHdzVXJsKTtcblxuICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiV2ViU29ja2V0IGNvbm5lY3Rpb24gdGltZW91dFwiKSk7XG4gICAgICB9LCAzMDAwMCk7XG5cbiAgICAgIHRoaXMud3Mub24oXCJvcGVuXCIsICgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMud3Mub24oXCJtZXNzYWdlXCIsIGFzeW5jIChkYXRhKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZTogV2ViU29ja2V0TWVzc2FnZSA9IEpTT04ucGFyc2UoZGF0YS50b1N0cmluZygpKTtcblxuICAgICAgICAgIGlmIChtZXNzYWdlLnR5cGUgPT09IFwiY2xpX2Nvbm5lY3RlZFwiKSB7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gXCJ3ZWJob29rX2V2ZW50XCIgJiYgbWVzc2FnZS5ldmVudCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVFdmVudChtZXNzYWdlLCBmb3J3YXJkVXJsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gcGFyc2UgV2ViU29ja2V0IG1lc3NhZ2U6XCIsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLndzLm9uKFwiY2xvc2VcIiwgKGNvZGUsIHJlYXNvbikgPT4ge1xuICAgICAgICBpZiAoY29kZSAhPT0gMTAwMCkge1xuICAgICAgICAgIHdhcm4oYFdlYlNvY2tldCBkaXNjb25uZWN0ZWQ6ICR7cmVhc29uIHx8IGNvZGV9YCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLndzLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIGVycm9yKGBXZWJTb2NrZXQgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZUV2ZW50KFxuICAgIG1lc3NhZ2U6IFdlYlNvY2tldE1lc3NhZ2UsXG4gICAgZm9yd2FyZFVybDogc3RyaW5nLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBldmVudCA9IG1lc3NhZ2UuZXZlbnQhO1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IG1lc3NhZ2UudGltZXN0YW1wITtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBtZXNzYWdlLnNpZ25hdHVyZSE7XG5cbiAgICB0aGlzLmRpc3BsYXlFdmVudChldmVudCk7XG5cbiAgICBpZiAodGhpcy52ZXJpZnlTaWduYXR1cmUoZXZlbnQsIHRpbWVzdGFtcCwgc2lnbmF0dXJlKSkge1xuICAgICAgYXdhaXQgdGhpcy5mb3J3YXJkRXZlbnQoZm9yd2FyZFVybCwgZXZlbnQsIHRpbWVzdGFtcCwgc2lnbmF0dXJlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coYCAgJHtjb2xvcnMuZXJyb3IoXCLinJdcIil9IFNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkYCk7XG4gICAgICBjb25zb2xlLmxvZygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5U2lnbmF0dXJlKFxuICAgIGV2ZW50OiBXZWJob29rRXZlbnQsXG4gICAgdGltZXN0YW1wOiBudW1iZXIsXG4gICAgc2lnbmF0dXJlOiBzdHJpbmcsXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5zZWNyZXQpIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnN0cmluZ2lmeShldmVudCk7XG4gICAgY29uc3Qgc2lnbmVkUGF5bG9hZCA9IGAke3RpbWVzdGFtcH0uJHtwYXlsb2FkfWA7XG4gICAgY29uc3QgZXhwZWN0ZWRTaWduYXR1cmUgPSBgc2hhMjU2PSR7Y3J5cHRvXG4gICAgICAuY3JlYXRlSG1hYyhcInNoYTI1NlwiLCB0aGlzLnNlY3JldClcbiAgICAgIC51cGRhdGUoc2lnbmVkUGF5bG9hZCwgXCJ1dGY4XCIpXG4gICAgICAuZGlnZXN0KFwiaGV4XCIpfWA7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlID09PSBleHBlY3RlZFNpZ25hdHVyZTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGxheUV2ZW50KGV2ZW50OiBXZWJob29rRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBuZXcgRGF0ZShldmVudC5jcmVhdGVkICogMTAwMCkudG9Mb2NhbGVUaW1lU3RyaW5nKCk7XG4gICAgY29uc3QgZXZlbnRUeXBlID0gZXZlbnQudHlwZTtcblxuICAgIGxldCBzdGF0dXNDb2xvciA9IGNvbG9ycy5pbmZvO1xuICAgIGlmIChldmVudFR5cGUuaW5jbHVkZXMoXCJkZWxpdmVyZWRcIikpIHN0YXR1c0NvbG9yID0gY29sb3JzLnN1Y2Nlc3M7XG4gICAgaWYgKGV2ZW50VHlwZS5pbmNsdWRlcyhcImZhaWxlZFwiKSkgc3RhdHVzQ29sb3IgPSBjb2xvcnMuZXJyb3I7XG5cbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGAke2NvbG9ycy5kaW0odGltZXN0YW1wKX0gJHtzdGF0dXNDb2xvcihcIuKGklwiKX0gJHtjb2xvcnMuYm9sZChldmVudFR5cGUpfWAsXG4gICAgKTtcblxuICAgIGNvbnN0IGRhdGEgPSBldmVudC5kYXRhPy5vYmplY3Q7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2VJZCA9IGRhdGEuaWQgYXMgc3RyaW5nO1xuICAgICAgY29uc3QgdG8gPSBkYXRhLnRvIGFzIHN0cmluZztcbiAgICAgIGlmIChtZXNzYWdlSWQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYCAgJHtjb2xvcnMuZGltKFwiaWQ6XCIpfSAke21lc3NhZ2VJZH1gKTtcbiAgICAgIH1cbiAgICAgIGlmICh0bykge1xuICAgICAgICBjb25zb2xlLmxvZyhgICAke2NvbG9ycy5kaW0oXCJ0bzpcIil9ICR7dG99YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmb3J3YXJkRXZlbnQoXG4gICAgZm9yd2FyZFVybDogc3RyaW5nLFxuICAgIGV2ZW50OiBXZWJob29rRXZlbnQsXG4gICAgdGltZXN0YW1wOiBudW1iZXIsXG4gICAgc2lnbmF0dXJlOiBzdHJpbmcsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkoZXZlbnQpO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGZvcndhcmRVcmwsIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgIFwiWC1TZW5kbHktU2lnbmF0dXJlXCI6IHNpZ25hdHVyZSxcbiAgICAgICAgICBcIlgtU2VuZGx5LVRpbWVzdGFtcFwiOiB0aW1lc3RhbXAudG9TdHJpbmcoKSxcbiAgICAgICAgICBcIlgtU2VuZGx5LUV2ZW50XCI6IGV2ZW50LnR5cGUsXG4gICAgICAgICAgXCJYLVNlbmRseS1FdmVudC1JZFwiOiBldmVudC5pZCxcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogcGF5bG9hZCxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYCAgJHtjb2xvcnMuc3VjY2VzcyhcIuKck1wiKX0gRm9yd2FyZGVkIHRvICR7Zm9yd2FyZFVybH0gKCR7cmVzcG9uc2Uuc3RhdHVzfSlgLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYCAgJHtjb2xvcnMuZXJyb3IoXCLinJdcIil9IEZvcndhcmQgZmFpbGVkICgke3Jlc3BvbnNlLnN0YXR1c30pYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgICAke2NvbG9ycy5lcnJvcihcIuKcl1wiKX0gRm9yd2FyZCBlcnJvcjogJHsoZXJyIGFzIEVycm9yKS5tZXNzYWdlfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjbGVhbnVwKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLndzKSB7XG4gICAgICB0aGlzLndzLmNsb3NlKDEwMDAsIFwiQ2xpZW50IHNodXRkb3duXCIpO1xuICAgICAgdGhpcy53cyA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2Vzc2lvbklkKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBhcGlDbGllbnQuZGVsZXRlKGAvYXBpL2NsaS9saXN0ZW4vc3RvcC8ke3RoaXMuc2Vzc2lvbklkfWApO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIElnbm9yZSBjbGVhbnVwIGVycm9yc1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
|
package/dist/lib/auth.js
CHANGED
|
@@ -92,7 +92,6 @@ export async function browserLogin() {
|
|
|
92
92
|
});
|
|
93
93
|
if (tokenResponse.ok) {
|
|
94
94
|
const tokens = (await tokenResponse.json());
|
|
95
|
-
spin.succeed("Logged in successfully!");
|
|
96
95
|
// Store tokens
|
|
97
96
|
setAuthTokens(tokens.accessToken, tokens.refreshToken, tokens.expiresIn, tokens.userId, tokens.email);
|
|
98
97
|
// Check if new user needs quick-start (only for CLI sessions)
|
|
@@ -184,4 +183,4 @@ export async function getAuthInfo() {
|
|
|
184
183
|
function sleep(ms) {
|
|
185
184
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
186
185
|
}
|
|
187
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFFeEIsT0FBTyxLQUFLLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUNMLGFBQWEsRUFDYixTQUFTLEVBQ1QsU0FBUyxFQUNULGNBQWMsRUFDZCxlQUFlLEVBQ2YsWUFBWSxHQUNiLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTlDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxDQUFDLFlBQVk7QUFDeEMsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUMsQ0FBQyxnQkFBZ0I7QUFrQi9DOzs7R0FHRztBQUNILE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLDBCQUEwQjtBQUMzRSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxnQkFBZ0I7SUFDOUIsTUFBTSxLQUFLLEdBQUcsa0NBQWtDLENBQUMsQ0FBQywwQkFBMEI7SUFDNUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ25ELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzFDLElBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6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RCxDQUFDO0lBRUQsT0FBTztRQUNMLGFBQWEsRUFBRSxJQUFJO1FBQ25CLEtBQUs7UUFDTCxNQUFNO1FBQ04sV0FBVztRQUNYLE9BQU87S0FDUixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsS0FBSyxDQUFDLEVBQVU7SUFDdkIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dGhlbnRpY2F0aW9uIHV0aWxpdGllcyBmb3IgQ0xJXG4gKiBIYW5kbGVzIGJyb3dzZXItYmFzZWQgbG9naW4gZmxvdyBhbmQgQVBJIGtleSBhdXRoZW50aWNhdGlvblxuICovXG5cbmltcG9ydCBvcGVuIGZyb20gXCJvcGVuXCI7XG5pbXBvcnQgKiBhcyBodHRwIGZyb20gXCJub2RlOmh0dHBcIjtcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB7XG4gIHNldEF1dGhUb2tlbnMsXG4gIHNldEFwaUtleSxcbiAgY2xlYXJBdXRoLFxuICBnZXRDb25maWdWYWx1ZSxcbiAgaXNBdXRoZW50aWNhdGVkLFxuICBnZXRBdXRoVG9rZW4sXG59IGZyb20gXCIuL2NvbmZpZy5qc1wiO1xuaW1wb3J0IHsgY29sb3JzLCBzcGlubmVyIH0gZnJvbSBcIi4vb3V0cHV0LmpzXCI7XG5cbmNvbnN0IFVTRVJfQ09ERV9MRU5HVEggPSA4O1xuY29uc3QgUE9MTF9JTlRFUlZBTCA9IDIwMDA7IC8vIDIgc2Vjb25kc1xuY29uc3QgTUFYX1BPTExfQVRURU1QVFMgPSAxNTA7IC8vIDUgbWludXRlcyBtYXhcblxuZXhwb3J0IGludGVyZmFjZSBEZXZpY2VDb2RlUmVzcG9uc2Uge1xuICBkZXZpY2VDb2RlOiBzdHJpbmc7XG4gIHVzZXJDb2RlOiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvblVybDogc3RyaW5nO1xuICBleHBpcmVzSW46IG51bWJlcjtcbiAgaW50ZXJ2YWw6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb2tlblJlc3BvbnNlIHtcbiAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgcmVmcmVzaFRva2VuOiBzdHJpbmc7XG4gIGV4cGlyZXNJbjogbnVtYmVyO1xuICB1c2VySWQ6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIGxvbmcgcmFuZG9tIGRldmljZSBjb2RlIGZvciBVUkwgKHNlc3Npb24gaWRlbnRpZmllcilcbiAqIFRoaXMgZ29lcyBpbiB0aGUgVVJMIGFuZCBpZGVudGlmaWVzIHdoaWNoIENMSSBzZXNzaW9uIGlzIHdhaXRpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlRGV2aWNlQ29kZSgpOiBzdHJpbmcge1xuICByZXR1cm4gY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZyhcImhleFwiKTsgLy8gMzIgY2hhcnMsIG5vdCBndWVzc2FibGVcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHNob3J0IGh1bWFuLXJlYWRhYmxlIHVzZXIgY29kZSBmb3IgdGVybWluYWwgZGlzcGxheVxuICogVGhpcyBpcyB3aGF0IHRoZSB1c2VyIHR5cGVzIHRvIHByb3ZlIHRoZXkgaGF2ZSB0ZXJtaW5hbCBhY2Nlc3NcbiAqIFVzZXMgY2hhcmFjdGVycyB0aGF0IGFyZSBlYXN5IHRvIHJlYWQgYW5kIHR5cGUgKG5vIDAvTywgMS9JL0wgY29uZnVzaW9uKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVVc2VyQ29kZSgpOiBzdHJpbmcge1xuICBjb25zdCBjaGFycyA9IFwiQUJDREVGR0hKS0xNTlBRUlNUVVZXWFlaMjM0NTY3ODlcIjsgLy8gRXhjbHVkZSBjb25mdXNpbmcgY2hhcnNcbiAgbGV0IGNvZGUgPSBcIlwiO1xuICBjb25zdCBieXRlcyA9IGNyeXB0by5yYW5kb21CeXRlcyhVU0VSX0NPREVfTEVOR1RIKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBVU0VSX0NPREVfTEVOR1RIOyBpKyspIHtcbiAgICBjb2RlICs9IGNoYXJzW2J5dGVzW2ldICUgY2hhcnMubGVuZ3RoXTtcbiAgfVxuICByZXR1cm4gY29kZTtcbn1cblxuLyoqXG4gKiBTdGFydCB0aGUgYnJvd3Nlci1iYXNlZCBsb2dpbiBmbG93XG4gKlxuICogU2VjdXJpdHkgbW9kZWw6XG4gKiAtIGRldmljZUNvZGU6IExvbmcgcmFuZG9tIHRva2VuIGluIFVSTCwgaWRlbnRpZmllcyBDTEkgc2Vzc2lvbiAobm90IHNlY3JldClcbiAqIC0gdXNlckNvZGU6IFNob3J0IGNvZGUgc2hvd24gT05MWSBpbiB0ZXJtaW5hbCwgcHJvdmVzIHVzZXIgaGFzIHRlcm1pbmFsIGFjY2Vzc1xuICpcbiAqIFRoZSB1c2VyQ29kZSBpcyBORVZFUiBpbiB0aGUgVVJMIC0gdGhpcyBpcyBjcml0aWNhbCBmb3Igc2VjdXJpdHkuXG4gKiBBbnlvbmUgd2l0aCB0aGUgVVJMIGNhbid0IGF1dGhvcml6ZSB3aXRob3V0IGFsc28gc2VlaW5nIHRoZSB0ZXJtaW5hbC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJyb3dzZXJMb2dpbigpOiBQcm9taXNlPFRva2VuUmVzcG9uc2U+IHtcbiAgY29uc3QgYmFzZVVybCA9IGdldENvbmZpZ1ZhbHVlKFwiYmFzZVVybFwiKSB8fCBcImh0dHBzOi8vc2VuZGx5LmxpdmVcIjtcblxuICAvLyBHZW5lcmF0ZSBUV08gU0VQQVJBVEUgY29kZXMgZm9yIHNlY3VyaXR5XG4gIGNvbnN0IGRldmljZUNvZGUgPSBnZW5lcmF0ZURldmljZUNvZGUoKTsgLy8gTG9uZyByYW5kb20sIGdvZXMgaW4gVVJMXG4gIGNvbnN0IHVzZXJDb2RlID0gZ2VuZXJhdGVVc2VyQ29kZSgpOyAvLyBTaG9ydCByZWFkYWJsZSwgc2hvd24gaW4gdGVybWluYWwgb25seVxuXG4gIC8vIFJlcXVlc3QgZGV2aWNlIGNvZGUgcmVnaXN0cmF0aW9uIGZyb20gc2VydmVyXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7YmFzZVVybH0vYXBpL2NsaS9hdXRoL2RldmljZS1jb2RlYCwge1xuICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgaGVhZGVyczogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgZGV2aWNlQ29kZSwgdXNlckNvZGUgfSksIC8vIFNlbmQgYm90aCB0byBzZXJ2ZXJcbiAgfSk7XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIGNvbnN0IGVycm9yID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKSkgYXMge1xuICAgICAgbWVzc2FnZT86IHN0cmluZztcbiAgICB9O1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJvci5tZXNzYWdlIHx8IFwiRmFpbGVkIHRvIGluaXRpYXRlIGxvZ2luXCIpO1xuICB9XG5cbiAgY29uc3QgZGF0YSA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIERldmljZUNvZGVSZXNwb25zZTtcblxuICAvLyBGb3JtYXQgdXNlciBjb2RlIHdpdGggaHlwaGVuIGZvciByZWFkYWJpbGl0eSAoZS5nLiwgXCJBQkNELUVGR0hcIilcbiAgY29uc3QgZGlzcGxheVVzZXJDb2RlID0gYCR7dXNlckNvZGUuc2xpY2UoMCwgNCl9LSR7dXNlckNvZGUuc2xpY2UoNCl9YDtcblxuICAvLyBEaXNwbGF5IGluc3RydWN0aW9ucyB0byB1c2VyXG4gIGNvbnNvbGUubG9nKCk7XG4gIGNvbnNvbGUubG9nKGNvbG9ycy5ib2xkKFwiTG9naW4gdG8gU2VuZGx5XCIpKTtcbiAgY29uc29sZS5sb2coKTtcbiAgY29uc29sZS5sb2coYE9wZW4gdGhpcyBVUkwgaW4geW91ciBicm93c2VyOmApO1xuICBjb25zb2xlLmxvZyhjb2xvcnMucHJpbWFyeShgICAke2RhdGEudmVyaWZpY2F0aW9uVXJsfWApKTtcbiAgY29uc29sZS5sb2coKTtcbiAgY29uc29sZS5sb2coYEFuZCBlbnRlciB0aGlzIGNvZGU6YCk7XG4gIGNvbnNvbGUubG9nKGNvbG9ycy5ib2xkKGNvbG9ycy5wcmltYXJ5KGAgICR7ZGlzcGxheVVzZXJDb2RlfWApKSk7XG4gIGNvbnNvbGUubG9nKCk7XG5cbiAgLy8gVHJ5IHRvIG9wZW4gYnJvd3NlciBhdXRvbWF0aWNhbGx5XG4gIHRyeSB7XG4gICAgYXdhaXQgb3BlbihkYXRhLnZlcmlmaWNhdGlvblVybCk7XG4gICAgY29uc29sZS5sb2coY29sb3JzLmRpbShcIkJyb3dzZXIgb3BlbmVkIGF1dG9tYXRpY2FsbHlcIikpO1xuICB9IGNhdGNoIHtcbiAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKFwiUGxlYXNlIG9wZW4gdGhlIFVSTCBtYW51YWxseVwiKSk7XG4gIH1cblxuICBjb25zb2xlLmxvZygpO1xuXG4gIC8vIFBvbGwgZm9yIHRva2VuXG4gIGNvbnN0IHNwaW4gPSBzcGlubmVyKFwiV2FpdGluZyBmb3IgYXV0aG9yaXphdGlvbi4uLlwiKTtcbiAgc3Bpbi5zdGFydCgpO1xuXG4gIGxldCBhdHRlbXB0cyA9IDA7XG4gIHdoaWxlIChhdHRlbXB0cyA8IE1BWF9QT0xMX0FUVEVNUFRTKSB7XG4gICAgYXdhaXQgc2xlZXAoZGF0YS5pbnRlcnZhbCAqIDEwMDAgfHwgUE9MTF9JTlRFUlZBTCk7XG4gICAgYXR0ZW1wdHMrKztcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0b2tlblJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7YmFzZVVybH0vYXBpL2NsaS9hdXRoL3Rva2VuYCwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgZGV2aWNlQ29kZSB9KSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodG9rZW5SZXNwb25zZS5vaykge1xuICAgICAgICBjb25zdCB0b2tlbnMgPSAoYXdhaXQgdG9rZW5SZXNwb25zZS5qc29uKCkpIGFzIFRva2VuUmVzcG9uc2U7XG4gICAgICAgIHNwaW4uc3VjY2VlZChcIkxvZ2dlZCBpbiBzdWNjZXNzZnVsbHkhXCIpO1xuXG4gICAgICAgIC8vIFN0b3JlIHRva2Vuc1xuICAgICAgICBzZXRBdXRoVG9rZW5zKFxuICAgICAgICAgIHRva2Vucy5hY2Nlc3NUb2tlbixcbiAgICAgICAgICB0b2tlbnMucmVmcmVzaFRva2VuLFxuICAgICAgICAgIHRva2Vucy5leHBpcmVzSW4sXG4gICAgICAgICAgdG9rZW5zLnVzZXJJZCxcbiAgICAgICAgICB0b2tlbnMuZW1haWwsXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgbmV3IHVzZXIgbmVlZHMgcXVpY2stc3RhcnQgKG9ubHkgZm9yIENMSSBzZXNzaW9ucylcbiAgICAgICAgaWYgKHRva2Vucy5hY2Nlc3NUb2tlbi5zdGFydHNXaXRoKFwiY2xpX1wiKSkge1xuICAgICAgICAgIGNvbnN0IHsgc2hvdWxkT2ZmZXJRdWlja1N0YXJ0LCBvZmZlclF1aWNrU3RhcnQgfSA9XG4gICAgICAgICAgICBhd2FpdCBpbXBvcnQoXCIuL29uYm9hcmRpbmcuanNcIik7XG5cbiAgICAgICAgICBpZiAoYXdhaXQgc2hvdWxkT2ZmZXJRdWlja1N0YXJ0KCkpIHtcbiAgICAgICAgICAgIGF3YWl0IG9mZmVyUXVpY2tTdGFydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0b2tlbnM7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVycm9yRGF0YSA9IChhd2FpdCB0b2tlblJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKSkgYXMge1xuICAgICAgICBlcnJvcj86IHN0cmluZztcbiAgICAgIH07XG5cbiAgICAgIGlmIChlcnJvckRhdGEuZXJyb3IgPT09IFwiYXV0aG9yaXphdGlvbl9wZW5kaW5nXCIpIHtcbiAgICAgICAgLy8gU3RpbGwgd2FpdGluZywgY29udGludWUgcG9sbGluZ1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9yRGF0YS5lcnJvciA9PT0gXCJleHBpcmVkX3Rva2VuXCIpIHtcbiAgICAgICAgc3Bpbi5mYWlsKFwiTG9naW4gcmVxdWVzdCBleHBpcmVkXCIpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlcnJvckRhdGEuZXJyb3IgPT09IFwiYWNjZXNzX2RlbmllZFwiKSB7XG4gICAgICAgIHNwaW4uZmFpbChcIkxvZ2luIHdhcyBkZW5pZWRcIik7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gTmV0d29yayBlcnJvciwgY29udGludWUgcG9sbGluZ1xuICAgIH1cbiAgfVxuXG4gIHNwaW4uZmFpbChcIkxvZ2luIHRpbWVkIG91dFwiKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufVxuXG4vKipcbiAqIExvZ2luIHdpdGggYW4gQVBJIGtleSBkaXJlY3RseVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBpS2V5TG9naW4oYXBpS2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYmFzZVVybCA9IGdldENvbmZpZ1ZhbHVlKFwiYmFzZVVybFwiKSB8fCBcImh0dHBzOi8vc2VuZGx5LmxpdmVcIjtcblxuICAvLyBWYWxpZGF0ZSB0aGUgQVBJIGtleSB3aXRoIHRoZSBzZXJ2ZXJcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtiYXNlVXJsfS9hcGkvY2xpL2F1dGgvdmVyaWZ5LWtleWAsIHtcbiAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2FwaUtleX1gLFxuICAgIH0sXG4gIH0pO1xuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICBjb25zdCBlcnJvciA9IChhd2FpdCByZXNwb25zZS5qc29uKCkuY2F0Y2goKCkgPT4gKHt9KSkpIGFzIHtcbiAgICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgfTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IubWVzc2FnZSB8fCBcIkludmFsaWQgQVBJIGtleVwiKTtcbiAgfVxuXG4gIC8vIFN0b3JlIHRoZSBBUEkga2V5XG4gIHNldEFwaUtleShhcGlLZXkpO1xufVxuXG4vKipcbiAqIExvZ291dCAtIGNsZWFyIGFsbCBzdG9yZWQgY3JlZGVudGlhbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvZ291dCgpOiB2b2lkIHtcbiAgY2xlYXJBdXRoKCk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgY3VycmVudGx5IGF1dGhlbnRpY2F0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrQXV0aCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzQXV0aGVudGljYXRlZCgpO1xufVxuXG4vKipcbiAqIEdldCBjdXJyZW50IGF1dGggaW5mbyBmb3IgZGlzcGxheVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QXV0aEluZm8oKTogUHJvbWlzZTx7XG4gIGF1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XG4gIGVtYWlsPzogc3RyaW5nO1xuICB1c2VySWQ/OiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIGtleVR5cGU/OiBzdHJpbmc7XG59PiB7XG4gIGNvbnN0IHRva2VuID0gZ2V0QXV0aFRva2VuKCk7XG4gIGNvbnN0IGVtYWlsID0gZ2V0Q29uZmlnVmFsdWUoXCJlbWFpbFwiKTtcbiAgY29uc3QgdXNlcklkID0gZ2V0Q29uZmlnVmFsdWUoXCJ1c2VySWRcIik7XG4gIGNvbnN0IGFwaUtleSA9IGdldENvbmZpZ1ZhbHVlKFwiYXBpS2V5XCIpO1xuICBjb25zdCBlbnZpcm9ubWVudCA9IGdldENvbmZpZ1ZhbHVlKFwiZW52aXJvbm1lbnRcIik7XG5cbiAgaWYgKCF0b2tlbiAmJiAhYXBpS2V5KSB7XG4gICAgcmV0dXJuIHsgYXV0aGVudGljYXRlZDogZmFsc2UsIGVudmlyb25tZW50IH07XG4gIH1cblxuICBsZXQga2V5VHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBpZiAoYXBpS2V5KSB7XG4gICAga2V5VHlwZSA9IGFwaUtleS5zdGFydHNXaXRoKFwic2tfdGVzdF9cIikgPyBcInRlc3RcIiA6IFwibGl2ZVwiO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhdXRoZW50aWNhdGVkOiB0cnVlLFxuICAgIGVtYWlsLFxuICAgIHVzZXJJZCxcbiAgICBlbnZpcm9ubWVudCxcbiAgICBrZXlUeXBlLFxuICB9O1xufVxuXG5mdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuIl19
|
|
186
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFFeEIsT0FBTyxLQUFLLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUNMLGFBQWEsRUFDYixTQUFTLEVBQ1QsU0FBUyxFQUNULGNBQWMsRUFDZCxlQUFlLEVBQ2YsWUFBWSxHQUNiLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTlDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxDQUFDLFlBQVk7QUFDeEMsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUMsQ0FBQyxnQkFBZ0I7QUFrQi9DOzs7R0FHRztBQUNILE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLDBCQUEwQjtBQUMzRSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxnQkFBZ0I7SUFDOUIsTUFBTSxLQUFLLEdBQUcsa0NBQWtDLENBQUMsQ0FBQywwQkFBMEI7SUFDNUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ25ELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzFDLElBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxZQUFZO0lBQ2hDLE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxxQkFBcUIsQ0FBQztJQUVuRSwyQ0FBMkM7SUFDM0MsTUFBTSxVQUFVLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLDJCQUEyQjtJQUNwRSxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMseUNBQXlDO0lBRTlFLCtDQUErQztJQUMvQyxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLE9BQU8sMkJBQTJCLEVBQUU7UUFDbEUsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUU7UUFDL0MsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxzQkFBc0I7S0FDdkUsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNqQixNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBRXJELENBQUM7UUFDRixNQUFNLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksMEJBQTBCLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBdUIsQ0FBQztJQUUzRCxtRUFBbUU7SUFDbkUsTUFBTSxlQUFlLEdBQUcsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFdkUsK0JBQStCO0lBQy9CLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7SUFDNUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQzlDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekQsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3BDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakUsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBRWQsb0NBQW9DO0lBQ3BDLElBQUksQ0FBQztRQUNILE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNqQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7SUFFZCxpQkFBaUI7SUFDakIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFDckQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRWIsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLE9BQU8sUUFBUSxHQUFHLGlCQUFpQixFQUFFLENBQUM7UUFDcEMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLElBQUksYUFBYSxDQUFDLENBQUM7UUFDbkQsUUFBUSxFQUFFLENBQUM7UUFFWCxJQUFJLENBQUM7WUFDSCxNQUFNLGFBQWEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLE9BQU8scUJBQXFCLEVBQUU7Z0JBQ2pFLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRTtnQkFDL0MsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQzthQUNyQyxDQUFDLENBQUM7WUFFSCxJQUFJLGFBQWEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDckIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUFNLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBa0IsQ0FBQztnQkFFN0QsZUFBZTtnQkFDZixhQUFhLENBQ1gsTUFBTSxDQUFDLFdBQVcsRUFDbEIsTUFBTSxDQUFDLFlBQVksRUFDbkIsTUFBTSxDQUFDLFNBQVMsRUFDaEIsTUFBTSxDQUFDLE1BQU0sRUFDYixNQUFNLENBQUMsS0FBSyxDQUNiLENBQUM7Z0JBRUYsOERBQThEO2dCQUM5RCxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7b0JBQzFDLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsR0FDOUMsTUFBTSxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztvQkFFbEMsSUFBSSxNQUFNLHFCQUFxQixFQUFFLEVBQUUsQ0FBQzt3QkFDbEMsTUFBTSxlQUFlLEVBQUUsQ0FBQztvQkFDMUIsQ0FBQztnQkFDSCxDQUFDO2dCQUVELE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUM7WUFFRCxNQUFNLFNBQVMsR0FBRyxDQUFDLE1BQU0sYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBRTlELENBQUM7WUFFRixJQUFJLFNBQVMsQ0FBQyxLQUFLLEtBQUssdUJBQXVCLEVBQUUsQ0FBQztnQkFDaEQsa0NBQWtDO2dCQUNsQyxTQUFTO1lBQ1gsQ0FBQztZQUVELElBQUksU0FBUyxDQUFDLEtBQUssS0FBSyxlQUFlLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2dCQUNuQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLENBQUM7WUFFRCxJQUFJLFNBQVMsQ0FBQyxLQUFLLEtBQUssZUFBZSxFQUFFLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDOUIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQixDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixrQ0FBa0M7UUFDcEMsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFdBQVcsQ0FBQyxNQUFjO0lBQzlDLE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxxQkFBcUIsQ0FBQztJQUVuRSx1Q0FBdUM7SUFDdkMsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxPQUFPLDBCQUEwQixFQUFFO1FBQ2pFLE1BQU0sRUFBRSxNQUFNO1FBQ2QsT0FBTyxFQUFFO1lBQ1AsY0FBYyxFQUFFLGtCQUFrQjtZQUNsQyxhQUFhLEVBQUUsVUFBVSxNQUFNLEVBQUU7U0FDbEM7S0FDRixDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sS0FBSyxHQUFHLENBQUMsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FFckQsQ0FBQztRQUNGLE1BQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BCLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxNQUFNO0lBQ3BCLFNBQVMsRUFBRSxDQUFDO0FBQ2QsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFNBQVM7SUFDdkIsT0FBTyxlQUFlLEVBQUUsQ0FBQztBQUMzQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFdBQVc7SUFPL0IsTUFBTSxLQUFLLEdBQUcsWUFBWSxFQUFFLENBQUM7SUFDN0IsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4QyxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEMsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRWxELElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN0QixPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQsSUFBSSxPQUEyQixDQUFDO0lBQ2hDLElBQUksTUFBTSxFQUFFLENBQUM7UUFDWCxPQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDNUQsQ0FBQztJQUVELE9BQU87UUFDTCxhQUFhLEVBQUUsSUFBSTtRQUNuQixLQUFLO1FBQ0wsTUFBTTtRQUNOLFdBQVc7UUFDWCxPQUFPO0tBQ1IsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxFQUFVO0lBQ3ZCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBdXRoZW50aWNhdGlvbiB1dGlsaXRpZXMgZm9yIENMSVxuICogSGFuZGxlcyBicm93c2VyLWJhc2VkIGxvZ2luIGZsb3cgYW5kIEFQSSBrZXkgYXV0aGVudGljYXRpb25cbiAqL1xuXG5pbXBvcnQgb3BlbiBmcm9tIFwib3BlblwiO1xuaW1wb3J0ICogYXMgaHR0cCBmcm9tIFwibm9kZTpodHRwXCI7XG5pbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQge1xuICBzZXRBdXRoVG9rZW5zLFxuICBzZXRBcGlLZXksXG4gIGNsZWFyQXV0aCxcbiAgZ2V0Q29uZmlnVmFsdWUsXG4gIGlzQXV0aGVudGljYXRlZCxcbiAgZ2V0QXV0aFRva2VuLFxufSBmcm9tIFwiLi9jb25maWcuanNcIjtcbmltcG9ydCB7IGNvbG9ycywgc3Bpbm5lciB9IGZyb20gXCIuL291dHB1dC5qc1wiO1xuXG5jb25zdCBVU0VSX0NPREVfTEVOR1RIID0gODtcbmNvbnN0IFBPTExfSU5URVJWQUwgPSAyMDAwOyAvLyAyIHNlY29uZHNcbmNvbnN0IE1BWF9QT0xMX0FUVEVNUFRTID0gMTUwOyAvLyA1IG1pbnV0ZXMgbWF4XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGV2aWNlQ29kZVJlc3BvbnNlIHtcbiAgZGV2aWNlQ29kZTogc3RyaW5nO1xuICB1c2VyQ29kZTogc3RyaW5nO1xuICB2ZXJpZmljYXRpb25Vcmw6IHN0cmluZztcbiAgZXhwaXJlc0luOiBudW1iZXI7XG4gIGludGVydmFsOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5SZXNwb25zZSB7XG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbjogc3RyaW5nO1xuICBleHBpcmVzSW46IG51bWJlcjtcbiAgdXNlcklkOiBzdHJpbmc7XG4gIGVtYWlsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBsb25nIHJhbmRvbSBkZXZpY2UgY29kZSBmb3IgVVJMIChzZXNzaW9uIGlkZW50aWZpZXIpXG4gKiBUaGlzIGdvZXMgaW4gdGhlIFVSTCBhbmQgaWRlbnRpZmllcyB3aGljaCBDTEkgc2Vzc2lvbiBpcyB3YWl0aW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZURldmljZUNvZGUoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNyeXB0by5yYW5kb21CeXRlcygxNikudG9TdHJpbmcoXCJoZXhcIik7IC8vIDMyIGNoYXJzLCBub3QgZ3Vlc3NhYmxlXG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBzaG9ydCBodW1hbi1yZWFkYWJsZSB1c2VyIGNvZGUgZm9yIHRlcm1pbmFsIGRpc3BsYXlcbiAqIFRoaXMgaXMgd2hhdCB0aGUgdXNlciB0eXBlcyB0byBwcm92ZSB0aGV5IGhhdmUgdGVybWluYWwgYWNjZXNzXG4gKiBVc2VzIGNoYXJhY3RlcnMgdGhhdCBhcmUgZWFzeSB0byByZWFkIGFuZCB0eXBlIChubyAwL08sIDEvSS9MIGNvbmZ1c2lvbilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlVXNlckNvZGUoKTogc3RyaW5nIHtcbiAgY29uc3QgY2hhcnMgPSBcIkFCQ0RFRkdISktMTU5QUVJTVFVWV1hZWjIzNDU2Nzg5XCI7IC8vIEV4Y2x1ZGUgY29uZnVzaW5nIGNoYXJzXG4gIGxldCBjb2RlID0gXCJcIjtcbiAgY29uc3QgYnl0ZXMgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoVVNFUl9DT0RFX0xFTkdUSCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgVVNFUl9DT0RFX0xFTkdUSDsgaSsrKSB7XG4gICAgY29kZSArPSBjaGFyc1tieXRlc1tpXSAlIGNoYXJzLmxlbmd0aF07XG4gIH1cbiAgcmV0dXJuIGNvZGU7XG59XG5cbi8qKlxuICogU3RhcnQgdGhlIGJyb3dzZXItYmFzZWQgbG9naW4gZmxvd1xuICpcbiAqIFNlY3VyaXR5IG1vZGVsOlxuICogLSBkZXZpY2VDb2RlOiBMb25nIHJhbmRvbSB0b2tlbiBpbiBVUkwsIGlkZW50aWZpZXMgQ0xJIHNlc3Npb24gKG5vdCBzZWNyZXQpXG4gKiAtIHVzZXJDb2RlOiBTaG9ydCBjb2RlIHNob3duIE9OTFkgaW4gdGVybWluYWwsIHByb3ZlcyB1c2VyIGhhcyB0ZXJtaW5hbCBhY2Nlc3NcbiAqXG4gKiBUaGUgdXNlckNvZGUgaXMgTkVWRVIgaW4gdGhlIFVSTCAtIHRoaXMgaXMgY3JpdGljYWwgZm9yIHNlY3VyaXR5LlxuICogQW55b25lIHdpdGggdGhlIFVSTCBjYW4ndCBhdXRob3JpemUgd2l0aG91dCBhbHNvIHNlZWluZyB0aGUgdGVybWluYWwuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBicm93c2VyTG9naW4oKTogUHJvbWlzZTxUb2tlblJlc3BvbnNlPiB7XG4gIGNvbnN0IGJhc2VVcmwgPSBnZXRDb25maWdWYWx1ZShcImJhc2VVcmxcIikgfHwgXCJodHRwczovL3NlbmRseS5saXZlXCI7XG5cbiAgLy8gR2VuZXJhdGUgVFdPIFNFUEFSQVRFIGNvZGVzIGZvciBzZWN1cml0eVxuICBjb25zdCBkZXZpY2VDb2RlID0gZ2VuZXJhdGVEZXZpY2VDb2RlKCk7IC8vIExvbmcgcmFuZG9tLCBnb2VzIGluIFVSTFxuICBjb25zdCB1c2VyQ29kZSA9IGdlbmVyYXRlVXNlckNvZGUoKTsgLy8gU2hvcnQgcmVhZGFibGUsIHNob3duIGluIHRlcm1pbmFsIG9ubHlcblxuICAvLyBSZXF1ZXN0IGRldmljZSBjb2RlIHJlZ2lzdHJhdGlvbiBmcm9tIHNlcnZlclxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2Jhc2VVcmx9L2FwaS9jbGkvYXV0aC9kZXZpY2UtY29kZWAsIHtcbiAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGRldmljZUNvZGUsIHVzZXJDb2RlIH0pLCAvLyBTZW5kIGJvdGggdG8gc2VydmVyXG4gIH0pO1xuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICBjb25zdCBlcnJvciA9IChhd2FpdCByZXNwb25zZS5qc29uKCkuY2F0Y2goKCkgPT4gKHt9KSkpIGFzIHtcbiAgICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgfTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IubWVzc2FnZSB8fCBcIkZhaWxlZCB0byBpbml0aWF0ZSBsb2dpblwiKTtcbiAgfVxuXG4gIGNvbnN0IGRhdGEgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyBEZXZpY2VDb2RlUmVzcG9uc2U7XG5cbiAgLy8gRm9ybWF0IHVzZXIgY29kZSB3aXRoIGh5cGhlbiBmb3IgcmVhZGFiaWxpdHkgKGUuZy4sIFwiQUJDRC1FRkdIXCIpXG4gIGNvbnN0IGRpc3BsYXlVc2VyQ29kZSA9IGAke3VzZXJDb2RlLnNsaWNlKDAsIDQpfS0ke3VzZXJDb2RlLnNsaWNlKDQpfWA7XG5cbiAgLy8gRGlzcGxheSBpbnN0cnVjdGlvbnMgdG8gdXNlclxuICBjb25zb2xlLmxvZygpO1xuICBjb25zb2xlLmxvZyhjb2xvcnMuYm9sZChcIkxvZ2luIHRvIFNlbmRseVwiKSk7XG4gIGNvbnNvbGUubG9nKCk7XG4gIGNvbnNvbGUubG9nKGBPcGVuIHRoaXMgVVJMIGluIHlvdXIgYnJvd3NlcjpgKTtcbiAgY29uc29sZS5sb2coY29sb3JzLnByaW1hcnkoYCAgJHtkYXRhLnZlcmlmaWNhdGlvblVybH1gKSk7XG4gIGNvbnNvbGUubG9nKCk7XG4gIGNvbnNvbGUubG9nKGBBbmQgZW50ZXIgdGhpcyBjb2RlOmApO1xuICBjb25zb2xlLmxvZyhjb2xvcnMuYm9sZChjb2xvcnMucHJpbWFyeShgICAke2Rpc3BsYXlVc2VyQ29kZX1gKSkpO1xuICBjb25zb2xlLmxvZygpO1xuXG4gIC8vIFRyeSB0byBvcGVuIGJyb3dzZXIgYXV0b21hdGljYWxseVxuICB0cnkge1xuICAgIGF3YWl0IG9wZW4oZGF0YS52ZXJpZmljYXRpb25VcmwpO1xuICAgIGNvbnNvbGUubG9nKGNvbG9ycy5kaW0oXCJCcm93c2VyIG9wZW5lZCBhdXRvbWF0aWNhbGx5XCIpKTtcbiAgfSBjYXRjaCB7XG4gICAgY29uc29sZS5sb2coY29sb3JzLmRpbShcIlBsZWFzZSBvcGVuIHRoZSBVUkwgbWFudWFsbHlcIikpO1xuICB9XG5cbiAgY29uc29sZS5sb2coKTtcblxuICAvLyBQb2xsIGZvciB0b2tlblxuICBjb25zdCBzcGluID0gc3Bpbm5lcihcIldhaXRpbmcgZm9yIGF1dGhvcml6YXRpb24uLi5cIik7XG4gIHNwaW4uc3RhcnQoKTtcblxuICBsZXQgYXR0ZW1wdHMgPSAwO1xuICB3aGlsZSAoYXR0ZW1wdHMgPCBNQVhfUE9MTF9BVFRFTVBUUykge1xuICAgIGF3YWl0IHNsZWVwKGRhdGEuaW50ZXJ2YWwgKiAxMDAwIHx8IFBPTExfSU5URVJWQUwpO1xuICAgIGF0dGVtcHRzKys7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdG9rZW5SZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2Jhc2VVcmx9L2FwaS9jbGkvYXV0aC90b2tlbmAsIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGRldmljZUNvZGUgfSksXG4gICAgICB9KTtcblxuICAgICAgaWYgKHRva2VuUmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgdG9rZW5zID0gKGF3YWl0IHRva2VuUmVzcG9uc2UuanNvbigpKSBhcyBUb2tlblJlc3BvbnNlO1xuXG4gICAgICAgIC8vIFN0b3JlIHRva2Vuc1xuICAgICAgICBzZXRBdXRoVG9rZW5zKFxuICAgICAgICAgIHRva2Vucy5hY2Nlc3NUb2tlbixcbiAgICAgICAgICB0b2tlbnMucmVmcmVzaFRva2VuLFxuICAgICAgICAgIHRva2Vucy5leHBpcmVzSW4sXG4gICAgICAgICAgdG9rZW5zLnVzZXJJZCxcbiAgICAgICAgICB0b2tlbnMuZW1haWwsXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgbmV3IHVzZXIgbmVlZHMgcXVpY2stc3RhcnQgKG9ubHkgZm9yIENMSSBzZXNzaW9ucylcbiAgICAgICAgaWYgKHRva2Vucy5hY2Nlc3NUb2tlbi5zdGFydHNXaXRoKFwiY2xpX1wiKSkge1xuICAgICAgICAgIGNvbnN0IHsgc2hvdWxkT2ZmZXJRdWlja1N0YXJ0LCBvZmZlclF1aWNrU3RhcnQgfSA9XG4gICAgICAgICAgICBhd2FpdCBpbXBvcnQoXCIuL29uYm9hcmRpbmcuanNcIik7XG5cbiAgICAgICAgICBpZiAoYXdhaXQgc2hvdWxkT2ZmZXJRdWlja1N0YXJ0KCkpIHtcbiAgICAgICAgICAgIGF3YWl0IG9mZmVyUXVpY2tTdGFydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0b2tlbnM7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVycm9yRGF0YSA9IChhd2FpdCB0b2tlblJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKSkgYXMge1xuICAgICAgICBlcnJvcj86IHN0cmluZztcbiAgICAgIH07XG5cbiAgICAgIGlmIChlcnJvckRhdGEuZXJyb3IgPT09IFwiYXV0aG9yaXphdGlvbl9wZW5kaW5nXCIpIHtcbiAgICAgICAgLy8gU3RpbGwgd2FpdGluZywgY29udGludWUgcG9sbGluZ1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9yRGF0YS5lcnJvciA9PT0gXCJleHBpcmVkX3Rva2VuXCIpIHtcbiAgICAgICAgc3Bpbi5mYWlsKFwiTG9naW4gcmVxdWVzdCBleHBpcmVkXCIpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlcnJvckRhdGEuZXJyb3IgPT09IFwiYWNjZXNzX2RlbmllZFwiKSB7XG4gICAgICAgIHNwaW4uZmFpbChcIkxvZ2luIHdhcyBkZW5pZWRcIik7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gTmV0d29yayBlcnJvciwgY29udGludWUgcG9sbGluZ1xuICAgIH1cbiAgfVxuXG4gIHNwaW4uZmFpbChcIkxvZ2luIHRpbWVkIG91dFwiKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufVxuXG4vKipcbiAqIExvZ2luIHdpdGggYW4gQVBJIGtleSBkaXJlY3RseVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBpS2V5TG9naW4oYXBpS2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYmFzZVVybCA9IGdldENvbmZpZ1ZhbHVlKFwiYmFzZVVybFwiKSB8fCBcImh0dHBzOi8vc2VuZGx5LmxpdmVcIjtcblxuICAvLyBWYWxpZGF0ZSB0aGUgQVBJIGtleSB3aXRoIHRoZSBzZXJ2ZXJcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtiYXNlVXJsfS9hcGkvY2xpL2F1dGgvdmVyaWZ5LWtleWAsIHtcbiAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2FwaUtleX1gLFxuICAgIH0sXG4gIH0pO1xuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICBjb25zdCBlcnJvciA9IChhd2FpdCByZXNwb25zZS5qc29uKCkuY2F0Y2goKCkgPT4gKHt9KSkpIGFzIHtcbiAgICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgfTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IubWVzc2FnZSB8fCBcIkludmFsaWQgQVBJIGtleVwiKTtcbiAgfVxuXG4gIC8vIFN0b3JlIHRoZSBBUEkga2V5XG4gIHNldEFwaUtleShhcGlLZXkpO1xufVxuXG4vKipcbiAqIExvZ291dCAtIGNsZWFyIGFsbCBzdG9yZWQgY3JlZGVudGlhbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvZ291dCgpOiB2b2lkIHtcbiAgY2xlYXJBdXRoKCk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgY3VycmVudGx5IGF1dGhlbnRpY2F0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrQXV0aCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzQXV0aGVudGljYXRlZCgpO1xufVxuXG4vKipcbiAqIEdldCBjdXJyZW50IGF1dGggaW5mbyBmb3IgZGlzcGxheVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QXV0aEluZm8oKTogUHJvbWlzZTx7XG4gIGF1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XG4gIGVtYWlsPzogc3RyaW5nO1xuICB1c2VySWQ/OiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIGtleVR5cGU/OiBzdHJpbmc7XG59PiB7XG4gIGNvbnN0IHRva2VuID0gZ2V0QXV0aFRva2VuKCk7XG4gIGNvbnN0IGVtYWlsID0gZ2V0Q29uZmlnVmFsdWUoXCJlbWFpbFwiKTtcbiAgY29uc3QgdXNlcklkID0gZ2V0Q29uZmlnVmFsdWUoXCJ1c2VySWRcIik7XG4gIGNvbnN0IGFwaUtleSA9IGdldENvbmZpZ1ZhbHVlKFwiYXBpS2V5XCIpO1xuICBjb25zdCBlbnZpcm9ubWVudCA9IGdldENvbmZpZ1ZhbHVlKFwiZW52aXJvbm1lbnRcIik7XG5cbiAgaWYgKCF0b2tlbiAmJiAhYXBpS2V5KSB7XG4gICAgcmV0dXJuIHsgYXV0aGVudGljYXRlZDogZmFsc2UsIGVudmlyb25tZW50IH07XG4gIH1cblxuICBsZXQga2V5VHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBpZiAoYXBpS2V5KSB7XG4gICAga2V5VHlwZSA9IGFwaUtleS5zdGFydHNXaXRoKFwic2tfdGVzdF9cIikgPyBcInRlc3RcIiA6IFwibGl2ZVwiO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhdXRoZW50aWNhdGVkOiB0cnVlLFxuICAgIGVtYWlsLFxuICAgIHVzZXJJZCxcbiAgICBlbnZpcm9ubWVudCxcbiAgICBrZXlUeXBlLFxuICB9O1xufVxuXG5mdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuIl19
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* - SENDLY_NO_COLOR: Disable colored output (any value)
|
|
10
10
|
* - SENDLY_TIMEOUT: Request timeout in ms (default: 30000)
|
|
11
11
|
* - SENDLY_MAX_RETRIES: Max retry attempts (default: 3)
|
|
12
|
+
* - SENDLY_CONFIG_KEY: Custom encryption key (for CI/CD)
|
|
12
13
|
* - CI: Auto-detect CI mode (disables interactive prompts)
|
|
13
14
|
*/
|
|
14
15
|
import Conf from "conf";
|