experimental-agent 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/{adapter-Cl735Kp4.d.mts → adapter-DmlMKodR.d.mts} +1 -0
  2. package/dist/{adapter-Cl735Kp4.d.ts → adapter-DmlMKodR.d.ts} +1 -0
  3. package/dist/{chunk-AB2JYY6A.mjs → chunk-355UN6NT.mjs} +10 -2
  4. package/dist/chunk-CS2SEUAA.mjs +405 -0
  5. package/dist/chunk-LZOMFHX3.mjs +38 -0
  6. package/dist/chunk-PH2FXKOU.mjs +9 -0
  7. package/dist/client-Cd-79N5B.d.ts +494 -0
  8. package/dist/client-panIugEx.d.mts +494 -0
  9. package/dist/client.mjs +1 -1
  10. package/dist/{docker-OBUQX5ZI.mjs → docker-FCSNVBEQ.mjs} +1 -1
  11. package/dist/{entry-Bs17QEiq.d.mts → entry-CciSxlDK.d.mts} +1 -1
  12. package/dist/{entry-QNyd4S1s.d.ts → entry-MCzvxs7U.d.ts} +1 -1
  13. package/dist/index.d.mts +475 -475
  14. package/dist/index.d.ts +475 -475
  15. package/dist/index.js +16539 -186
  16. package/dist/index.mjs +16335 -43
  17. package/dist/lifecycle-workflow-steps.d.mts +2 -2
  18. package/dist/lifecycle-workflow-steps.d.ts +2 -2
  19. package/dist/lifecycle-workflow-steps.mjs +1 -1
  20. package/dist/lifecycle-workflow.d.mts +2 -2
  21. package/dist/lifecycle-workflow.d.ts +2 -2
  22. package/dist/lifecycle-workflow.mjs +1 -1
  23. package/dist/{local-4C3V4EFS.mjs → local-NXHIUJTO.mjs} +1 -1
  24. package/dist/next/loader.js +10 -2
  25. package/dist/next/loader.mjs +2 -2
  26. package/dist/next.js +10 -2
  27. package/dist/next.mjs +2 -2
  28. package/dist/{process-manager-WQHAIVRB.mjs → process-manager-26NELLRU.mjs} +1 -1
  29. package/dist/react.d.mts +56 -0
  30. package/dist/react.d.ts +56 -0
  31. package/dist/react.js +144 -0
  32. package/dist/react.mjs +117 -0
  33. package/dist/sandbox.d.mts +3 -3
  34. package/dist/sandbox.d.ts +3 -3
  35. package/dist/sandbox.mjs +1 -1
  36. package/dist/{steps-eTytqxQb.d.mts → steps-DWQYXexO.d.mts} +2 -2
  37. package/dist/{steps-XA4wG8W3.d.ts → steps-DnvPkAtl.d.ts} +2 -2
  38. package/dist/storage.d.mts +2 -2
  39. package/dist/storage.d.ts +2 -2
  40. package/dist/storage.js +107 -48
  41. package/dist/storage.mjs +2 -2
  42. package/dist/{vercel-6ORAC625.mjs → vercel-LJEWLD4T.mjs} +1 -1
  43. package/package.json +9 -1
  44. package/dist/chunk-BJTO5JO5.mjs +0 -11
  45. package/dist/chunk-I5DCB7RU.mjs +0 -346
@@ -18,6 +18,7 @@ type Session = {
18
18
  lastMessageId: string | null;
19
19
  createdAt: number;
20
20
  updatedAt: number;
21
+ state?: Record<string, unknown>;
21
22
  };
22
23
  type MessageUsage = {
23
24
  steps: {
@@ -18,6 +18,7 @@ type Session = {
18
18
  lastMessageId: string | null;
19
19
  createdAt: number;
20
20
  updatedAt: number;
21
+ state?: Record<string, unknown>;
21
22
  };
22
23
  type MessageUsage = {
23
24
  steps: {
@@ -1,7 +1,7 @@
1
1
  // package.json
2
2
  var package_default = {
3
3
  name: "experimental-agent",
4
- version: "0.5.0",
4
+ version: "0.6.0",
5
5
  main: "./dist/index.js",
6
6
  module: "./dist/index.mjs",
7
7
  types: "./dist/index.d.ts",
@@ -50,6 +50,11 @@ var package_default = {
50
50
  types: "./dist/lifecycle-workflow-steps.d.ts",
51
51
  import: "./dist/lifecycle-workflow-steps.mjs",
52
52
  require: "./dist/lifecycle-workflow-steps.js"
53
+ },
54
+ "./react": {
55
+ types: "./dist/react.d.ts",
56
+ import: "./dist/react.mjs",
57
+ require: "./dist/react.js"
53
58
  }
54
59
  },
55
60
  scripts: {
@@ -63,11 +68,13 @@ var package_default = {
63
68
  },
64
69
  dependencies: {
65
70
  "@swc/core": "^1.10.0",
71
+ "@tanstack/react-query": "^5.90.21",
66
72
  "@vercel/kv2": "^0.0.18",
67
73
  "@vercel/oidc": "^3.1.0",
68
74
  "@vercel/sandbox": "1.7.1",
69
75
  "@workflow/serde": "4.1.0-beta.2",
70
76
  "better-all": "^0.0.5",
77
+ elysia: "^1.4.25",
71
78
  errore: "^0.14.0",
72
79
  "fast-deep-equal": "^3.1.3",
73
80
  ulid: "^3.0.2",
@@ -77,6 +84,7 @@ var package_default = {
77
84
  "@agent/tsconfig": "workspace:*",
78
85
  "@ai-sdk/react": "^3.0.88",
79
86
  "@types/node": "^20.11.24",
87
+ "@types/react": "^19.2.14",
80
88
  dotenv: "^17.2.3",
81
89
  next: "^16.0.0",
82
90
  react: "^19.2.4",
@@ -96,4 +104,4 @@ var package_default = {
96
104
  export {
97
105
  package_default
98
106
  };
99
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vcGFja2FnZS5qc29uIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ7XG4gIFwibmFtZVwiOiBcImV4cGVyaW1lbnRhbC1hZ2VudFwiLFxuICBcInZlcnNpb25cIjogXCIwLjUuMFwiLFxuICBcIm1haW5cIjogXCIuL2Rpc3QvaW5kZXguanNcIixcbiAgXCJtb2R1bGVcIjogXCIuL2Rpc3QvaW5kZXgubWpzXCIsXG4gIFwidHlwZXNcIjogXCIuL2Rpc3QvaW5kZXguZC50c1wiLFxuICBcInNpZGVFZmZlY3RzXCI6IHRydWUsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcImZpbGVzXCI6IFtcbiAgICBcImRpc3QvKipcIlxuICBdLFxuICBcImV4cG9ydHNcIjoge1xuICAgIFwiLlwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2luZGV4LmQudHNcIixcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L2luZGV4Lm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L2luZGV4LmpzXCJcbiAgICB9LFxuICAgIFwiLi9zdG9yYWdlXCI6IHtcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3Qvc3RvcmFnZS5kLnRzXCIsXG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9zdG9yYWdlLm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L3N0b3JhZ2UuanNcIlxuICAgIH0sXG4gICAgXCIuL3NhbmRib3hcIjoge1xuICAgICAgXCJ0eXBlc1wiOiBcIi4vZGlzdC9zYW5kYm94LmQudHNcIixcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L3NhbmRib3gubWpzXCIsXG4gICAgICBcInJlcXVpcmVcIjogXCIuL2Rpc3Qvc2FuZGJveC5qc1wiXG4gICAgfSxcbiAgICBcIi4vbmV4dFwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L25leHQuZC50c1wiLFxuICAgICAgXCJpbXBvcnRcIjogXCIuL2Rpc3QvbmV4dC5tanNcIixcbiAgICAgIFwicmVxdWlyZVwiOiBcIi4vZGlzdC9uZXh0LmpzXCJcbiAgICB9LFxuICAgIFwiLi9uZXh0L2xvYWRlclwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L25leHQvbG9hZGVyLmQudHNcIixcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L25leHQvbG9hZGVyLm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L25leHQvbG9hZGVyLmpzXCJcbiAgICB9LFxuICAgIFwiLi9jbGllbnRcIjoge1xuICAgICAgXCJ0eXBlc1wiOiBcIi4vZGlzdC9jbGllbnQuZC50c1wiLFxuICAgICAgXCJpbXBvcnRcIjogXCIuL2Rpc3QvY2xpZW50Lm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L2NsaWVudC5qc1wiXG4gICAgfSxcbiAgICBcIi4vbGlmZWN5Y2xlLXdvcmtmbG93XCI6IHtcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvbGlmZWN5Y2xlLXdvcmtmbG93LmQudHNcIixcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L2xpZmVjeWNsZS13b3JrZmxvdy5tanNcIixcbiAgICAgIFwicmVxdWlyZVwiOiBcIi4vZGlzdC9saWZlY3ljbGUtd29ya2Zsb3cuanNcIlxuICAgIH0sXG4gICAgXCIuL2xpZmVjeWNsZS13b3JrZmxvdy1zdGVwc1wiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2xpZmVjeWNsZS13b3JrZmxvdy1zdGVwcy5kLnRzXCIsXG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9saWZlY3ljbGUtd29ya2Zsb3ctc3RlcHMubWpzXCIsXG4gICAgICBcInJlcXVpcmVcIjogXCIuL2Rpc3QvbGlmZWN5Y2xlLXdvcmtmbG93LXN0ZXBzLmpzXCJcbiAgICB9XG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJidWlsZFwiOiBcInRzdXBcIixcbiAgICBcImRldlwiOiBcInRzdXAgLS13YXRjaFwiLFxuICAgIFwiY2xlYW5cIjogXCJybSAtcmYgLnR1cmJvICYmIHJtIC1yZiBub2RlX21vZHVsZXMgJiYgcm0gLXJmIGRpc3RcIixcbiAgICBcInJlbGVhc2VcIjogXCJwbnBtIGJ1aWxkICYmIG5wbSBwdWJsaXNoXCIsXG4gICAgXCJ0eXBlY2hlY2tcIjogXCJ0c2MgLS1ub0VtaXRcIixcbiAgICBcInRlc3RcIjogXCJ2aXRlc3QgcnVuXCIsXG4gICAgXCJ0ZXN0OndhdGNoXCI6IFwidml0ZXN0XCJcbiAgfSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQHN3Yy9jb3JlXCI6IFwiXjEuMTAuMFwiLFxuICAgIFwiQHZlcmNlbC9rdjJcIjogXCJeMC4wLjE4XCIsXG4gICAgXCJAdmVyY2VsL29pZGNcIjogXCJeMy4xLjBcIixcbiAgICBcIkB2ZXJjZWwvc2FuZGJveFwiOiBcIjEuNy4xXCIsXG4gICAgXCJAd29ya2Zsb3cvc2VyZGVcIjogXCI0LjEuMC1iZXRhLjJcIixcbiAgICBcImJldHRlci1hbGxcIjogXCJeMC4wLjVcIixcbiAgICBcImVycm9yZVwiOiBcIl4wLjE0LjBcIixcbiAgICBcImZhc3QtZGVlcC1lcXVhbFwiOiBcIl4zLjEuM1wiLFxuICAgIFwidWxpZFwiOiBcIl4zLjAuMlwiLFxuICAgIFwiem9kXCI6IFwiXjQuMy42XCJcbiAgfSxcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQGFnZW50L3RzY29uZmlnXCI6IFwid29ya3NwYWNlOipcIixcbiAgICBcIkBhaS1zZGsvcmVhY3RcIjogXCJeMy4wLjg4XCIsXG4gICAgXCJAdHlwZXMvbm9kZVwiOiBcIl4yMC4xMS4yNFwiLFxuICAgIFwiZG90ZW52XCI6IFwiXjE3LjIuM1wiLFxuICAgIFwibmV4dFwiOiBcIl4xNi4wLjBcIixcbiAgICBcInJlYWN0XCI6IFwiXjE5LjIuNFwiLFxuICAgIFwidHN1cFwiOiBcIl44LjAuMlwiLFxuICAgIFwidHlwZXNjcmlwdFwiOiBcIjUuNS40XCIsXG4gICAgXCJ2aXRlc3RcIjogXCJeMy4wLjBcIixcbiAgICBcIndvcmtmbG93XCI6IFwiaHR0cHM6Ly93b3JrZmxvdy1kb2NzLTNwcHlvczN3NC52ZXJjZWwuc2gvd29ya2Zsb3cudGd6XCJcbiAgfSxcbiAgXCJwZWVyRGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImFpXCI6IFwiXjYuMC4wXCJcbiAgfSxcbiAgXCJwdWJsaXNoQ29uZmlnXCI6IHtcbiAgICBcImFjY2Vzc1wiOiBcInB1YmxpY1wiXG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBQTtBQUFBLEVBQ0UsTUFBUTtBQUFBLEVBQ1IsU0FBVztBQUFBLEVBQ1gsTUFBUTtBQUFBLEVBQ1IsUUFBVTtBQUFBLEVBQ1YsT0FBUztBQUFBLEVBQ1QsYUFBZTtBQUFBLEVBQ2YsU0FBVztBQUFBLEVBQ1gsT0FBUztBQUFBLElBQ1A7QUFBQSxFQUNGO0FBQUEsRUFDQSxTQUFXO0FBQUEsSUFDVCxLQUFLO0FBQUEsTUFDSCxPQUFTO0FBQUEsTUFDVCxRQUFVO0FBQUEsTUFDVixTQUFXO0FBQUEsSUFDYjtBQUFBLElBQ0EsYUFBYTtBQUFBLE1BQ1gsT0FBUztBQUFBLE1BQ1QsUUFBVTtBQUFBLE1BQ1YsU0FBVztBQUFBLElBQ2I7QUFBQSxJQUNBLGFBQWE7QUFBQSxNQUNYLE9BQVM7QUFBQSxNQUNULFFBQVU7QUFBQSxNQUNWLFNBQVc7QUFBQSxJQUNiO0FBQUEsSUFDQSxVQUFVO0FBQUEsTUFDUixPQUFTO0FBQUEsTUFDVCxRQUFVO0FBQUEsTUFDVixTQUFXO0FBQUEsSUFDYjtBQUFBLElBQ0EsaUJBQWlCO0FBQUEsTUFDZixPQUFTO0FBQUEsTUFDVCxRQUFVO0FBQUEsTUFDVixTQUFXO0FBQUEsSUFDYjtBQUFBLElBQ0EsWUFBWTtBQUFBLE1BQ1YsT0FBUztBQUFBLE1BQ1QsUUFBVTtBQUFBLE1BQ1YsU0FBVztBQUFBLElBQ2I7QUFBQSxJQUNBLHdCQUF3QjtBQUFBLE1BQ3RCLE9BQVM7QUFBQSxNQUNULFFBQVU7QUFBQSxNQUNWLFNBQVc7QUFBQSxJQUNiO0FBQUEsSUFDQSw4QkFBOEI7QUFBQSxNQUM1QixPQUFTO0FBQUEsTUFDVCxRQUFVO0FBQUEsTUFDVixTQUFXO0FBQUEsSUFDYjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLFNBQVc7QUFBQSxJQUNULE9BQVM7QUFBQSxJQUNULEtBQU87QUFBQSxJQUNQLE9BQVM7QUFBQSxJQUNULFNBQVc7QUFBQSxJQUNYLFdBQWE7QUFBQSxJQUNiLE1BQVE7QUFBQSxJQUNSLGNBQWM7QUFBQSxFQUNoQjtBQUFBLEVBQ0EsY0FBZ0I7QUFBQSxJQUNkLGFBQWE7QUFBQSxJQUNiLGVBQWU7QUFBQSxJQUNmLGdCQUFnQjtBQUFBLElBQ2hCLG1CQUFtQjtBQUFBLElBQ25CLG1CQUFtQjtBQUFBLElBQ25CLGNBQWM7QUFBQSxJQUNkLFFBQVU7QUFBQSxJQUNWLG1CQUFtQjtBQUFBLElBQ25CLE1BQVE7QUFBQSxJQUNSLEtBQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxpQkFBbUI7QUFBQSxJQUNqQixtQkFBbUI7QUFBQSxJQUNuQixpQkFBaUI7QUFBQSxJQUNqQixlQUFlO0FBQUEsSUFDZixRQUFVO0FBQUEsSUFDVixNQUFRO0FBQUEsSUFDUixPQUFTO0FBQUEsSUFDVCxNQUFRO0FBQUEsSUFDUixZQUFjO0FBQUEsSUFDZCxRQUFVO0FBQUEsSUFDVixVQUFZO0FBQUEsRUFDZDtBQUFBLEVBQ0Esa0JBQW9CO0FBQUEsSUFDbEIsSUFBTTtBQUFBLEVBQ1I7QUFBQSxFQUNBLGVBQWlCO0FBQUEsSUFDZixRQUFVO0FBQUEsRUFDWjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
107
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vcGFja2FnZS5qc29uIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ7XG4gIFwibmFtZVwiOiBcImV4cGVyaW1lbnRhbC1hZ2VudFwiLFxuICBcInZlcnNpb25cIjogXCIwLjYuMFwiLFxuICBcIm1haW5cIjogXCIuL2Rpc3QvaW5kZXguanNcIixcbiAgXCJtb2R1bGVcIjogXCIuL2Rpc3QvaW5kZXgubWpzXCIsXG4gIFwidHlwZXNcIjogXCIuL2Rpc3QvaW5kZXguZC50c1wiLFxuICBcInNpZGVFZmZlY3RzXCI6IHRydWUsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcImZpbGVzXCI6IFtcbiAgICBcImRpc3QvKipcIlxuICBdLFxuICBcImV4cG9ydHNcIjoge1xuICAgIFwiLlwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2luZGV4LmQudHNcIixcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L2luZGV4Lm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L2luZGV4LmpzXCJcbiAgICB9LFxuICAgIFwiLi9zdG9yYWdlXCI6IHtcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3Qvc3RvcmFnZS5kLnRzXCIsXG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9zdG9yYWdlLm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L3N0b3JhZ2UuanNcIlxuICAgIH0sXG4gICAgXCIuL3NhbmRib3hcIjoge1xuICAgICAgXCJ0eXBlc1wiOiBcIi4vZGlzdC9zYW5kYm94LmQudHNcIixcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L3NhbmRib3gubWpzXCIsXG4gICAgICBcInJlcXVpcmVcIjogXCIuL2Rpc3Qvc2FuZGJveC5qc1wiXG4gICAgfSxcbiAgICBcIi4vbmV4dFwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L25leHQuZC50c1wiLFxuICAgICAgXCJpbXBvcnRcIjogXCIuL2Rpc3QvbmV4dC5tanNcIixcbiAgICAgIFwicmVxdWlyZVwiOiBcIi4vZGlzdC9uZXh0LmpzXCJcbiAgICB9LFxuICAgIFwiLi9uZXh0L2xvYWRlclwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L25leHQvbG9hZGVyLmQudHNcIixcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L25leHQvbG9hZGVyLm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L25leHQvbG9hZGVyLmpzXCJcbiAgICB9LFxuICAgIFwiLi9jbGllbnRcIjoge1xuICAgICAgXCJ0eXBlc1wiOiBcIi4vZGlzdC9jbGllbnQuZC50c1wiLFxuICAgICAgXCJpbXBvcnRcIjogXCIuL2Rpc3QvY2xpZW50Lm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L2NsaWVudC5qc1wiXG4gICAgfSxcbiAgICBcIi4vbGlmZWN5Y2xlLXdvcmtmbG93XCI6IHtcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvbGlmZWN5Y2xlLXdvcmtmbG93LmQudHNcIixcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L2xpZmVjeWNsZS13b3JrZmxvdy5tanNcIixcbiAgICAgIFwicmVxdWlyZVwiOiBcIi4vZGlzdC9saWZlY3ljbGUtd29ya2Zsb3cuanNcIlxuICAgIH0sXG4gICAgXCIuL2xpZmVjeWNsZS13b3JrZmxvdy1zdGVwc1wiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2xpZmVjeWNsZS13b3JrZmxvdy1zdGVwcy5kLnRzXCIsXG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9saWZlY3ljbGUtd29ya2Zsb3ctc3RlcHMubWpzXCIsXG4gICAgICBcInJlcXVpcmVcIjogXCIuL2Rpc3QvbGlmZWN5Y2xlLXdvcmtmbG93LXN0ZXBzLmpzXCJcbiAgICB9LFxuICAgIFwiLi9yZWFjdFwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L3JlYWN0LmQudHNcIixcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L3JlYWN0Lm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L3JlYWN0LmpzXCJcbiAgICB9XG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJidWlsZFwiOiBcInRzdXBcIixcbiAgICBcImRldlwiOiBcInRzdXAgLS13YXRjaFwiLFxuICAgIFwiY2xlYW5cIjogXCJybSAtcmYgLnR1cmJvICYmIHJtIC1yZiBub2RlX21vZHVsZXMgJiYgcm0gLXJmIGRpc3RcIixcbiAgICBcInJlbGVhc2VcIjogXCJwbnBtIGJ1aWxkICYmIG5wbSBwdWJsaXNoXCIsXG4gICAgXCJ0eXBlY2hlY2tcIjogXCJ0c2MgLS1ub0VtaXRcIixcbiAgICBcInRlc3RcIjogXCJ2aXRlc3QgcnVuXCIsXG4gICAgXCJ0ZXN0OndhdGNoXCI6IFwidml0ZXN0XCJcbiAgfSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQHN3Yy9jb3JlXCI6IFwiXjEuMTAuMFwiLFxuICAgIFwiQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5XCI6IFwiXjUuOTAuMjFcIixcbiAgICBcIkB2ZXJjZWwva3YyXCI6IFwiXjAuMC4xOFwiLFxuICAgIFwiQHZlcmNlbC9vaWRjXCI6IFwiXjMuMS4wXCIsXG4gICAgXCJAdmVyY2VsL3NhbmRib3hcIjogXCIxLjcuMVwiLFxuICAgIFwiQHdvcmtmbG93L3NlcmRlXCI6IFwiNC4xLjAtYmV0YS4yXCIsXG4gICAgXCJiZXR0ZXItYWxsXCI6IFwiXjAuMC41XCIsXG4gICAgXCJlbHlzaWFcIjogXCJeMS40LjI1XCIsXG4gICAgXCJlcnJvcmVcIjogXCJeMC4xNC4wXCIsXG4gICAgXCJmYXN0LWRlZXAtZXF1YWxcIjogXCJeMy4xLjNcIixcbiAgICBcInVsaWRcIjogXCJeMy4wLjJcIixcbiAgICBcInpvZFwiOiBcIl40LjMuNlwiXG4gIH0sXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcIkBhZ2VudC90c2NvbmZpZ1wiOiBcIndvcmtzcGFjZToqXCIsXG4gICAgXCJAYWktc2RrL3JlYWN0XCI6IFwiXjMuMC44OFwiLFxuICAgIFwiQHR5cGVzL25vZGVcIjogXCJeMjAuMTEuMjRcIixcbiAgICBcIkB0eXBlcy9yZWFjdFwiOiBcIl4xOS4yLjE0XCIsXG4gICAgXCJkb3RlbnZcIjogXCJeMTcuMi4zXCIsXG4gICAgXCJuZXh0XCI6IFwiXjE2LjAuMFwiLFxuICAgIFwicmVhY3RcIjogXCJeMTkuMi40XCIsXG4gICAgXCJ0c3VwXCI6IFwiXjguMC4yXCIsXG4gICAgXCJ0eXBlc2NyaXB0XCI6IFwiNS41LjRcIixcbiAgICBcInZpdGVzdFwiOiBcIl4zLjAuMFwiLFxuICAgIFwid29ya2Zsb3dcIjogXCJodHRwczovL3dvcmtmbG93LWRvY3MtM3BweW9zM3c0LnZlcmNlbC5zaC93b3JrZmxvdy50Z3pcIlxuICB9LFxuICBcInBlZXJEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYWlcIjogXCJeNi4wLjBcIlxuICB9LFxuICBcInB1Ymxpc2hDb25maWdcIjoge1xuICAgIFwiYWNjZXNzXCI6IFwicHVibGljXCJcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFBO0FBQUEsRUFDRSxNQUFRO0FBQUEsRUFDUixTQUFXO0FBQUEsRUFDWCxNQUFRO0FBQUEsRUFDUixRQUFVO0FBQUEsRUFDVixPQUFTO0FBQUEsRUFDVCxhQUFlO0FBQUEsRUFDZixTQUFXO0FBQUEsRUFDWCxPQUFTO0FBQUEsSUFDUDtBQUFBLEVBQ0Y7QUFBQSxFQUNBLFNBQVc7QUFBQSxJQUNULEtBQUs7QUFBQSxNQUNILE9BQVM7QUFBQSxNQUNULFFBQVU7QUFBQSxNQUNWLFNBQVc7QUFBQSxJQUNiO0FBQUEsSUFDQSxhQUFhO0FBQUEsTUFDWCxPQUFTO0FBQUEsTUFDVCxRQUFVO0FBQUEsTUFDVixTQUFXO0FBQUEsSUFDYjtBQUFBLElBQ0EsYUFBYTtBQUFBLE1BQ1gsT0FBUztBQUFBLE1BQ1QsUUFBVTtBQUFBLE1BQ1YsU0FBVztBQUFBLElBQ2I7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLE9BQVM7QUFBQSxNQUNULFFBQVU7QUFBQSxNQUNWLFNBQVc7QUFBQSxJQUNiO0FBQUEsSUFDQSxpQkFBaUI7QUFBQSxNQUNmLE9BQVM7QUFBQSxNQUNULFFBQVU7QUFBQSxNQUNWLFNBQVc7QUFBQSxJQUNiO0FBQUEsSUFDQSxZQUFZO0FBQUEsTUFDVixPQUFTO0FBQUEsTUFDVCxRQUFVO0FBQUEsTUFDVixTQUFXO0FBQUEsSUFDYjtBQUFBLElBQ0Esd0JBQXdCO0FBQUEsTUFDdEIsT0FBUztBQUFBLE1BQ1QsUUFBVTtBQUFBLE1BQ1YsU0FBVztBQUFBLElBQ2I7QUFBQSxJQUNBLDhCQUE4QjtBQUFBLE1BQzVCLE9BQVM7QUFBQSxNQUNULFFBQVU7QUFBQSxNQUNWLFNBQVc7QUFBQSxJQUNiO0FBQUEsSUFDQSxXQUFXO0FBQUEsTUFDVCxPQUFTO0FBQUEsTUFDVCxRQUFVO0FBQUEsTUFDVixTQUFXO0FBQUEsSUFDYjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLFNBQVc7QUFBQSxJQUNULE9BQVM7QUFBQSxJQUNULEtBQU87QUFBQSxJQUNQLE9BQVM7QUFBQSxJQUNULFNBQVc7QUFBQSxJQUNYLFdBQWE7QUFBQSxJQUNiLE1BQVE7QUFBQSxJQUNSLGNBQWM7QUFBQSxFQUNoQjtBQUFBLEVBQ0EsY0FBZ0I7QUFBQSxJQUNkLGFBQWE7QUFBQSxJQUNiLHlCQUF5QjtBQUFBLElBQ3pCLGVBQWU7QUFBQSxJQUNmLGdCQUFnQjtBQUFBLElBQ2hCLG1CQUFtQjtBQUFBLElBQ25CLG1CQUFtQjtBQUFBLElBQ25CLGNBQWM7QUFBQSxJQUNkLFFBQVU7QUFBQSxJQUNWLFFBQVU7QUFBQSxJQUNWLG1CQUFtQjtBQUFBLElBQ25CLE1BQVE7QUFBQSxJQUNSLEtBQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxpQkFBbUI7QUFBQSxJQUNqQixtQkFBbUI7QUFBQSxJQUNuQixpQkFBaUI7QUFBQSxJQUNqQixlQUFlO0FBQUEsSUFDZixnQkFBZ0I7QUFBQSxJQUNoQixRQUFVO0FBQUEsSUFDVixNQUFRO0FBQUEsSUFDUixPQUFTO0FBQUEsSUFDVCxNQUFRO0FBQUEsSUFDUixZQUFjO0FBQUEsSUFDZCxRQUFVO0FBQUEsSUFDVixVQUFZO0FBQUEsRUFDZDtBQUFBLEVBQ0Esa0JBQW9CO0FBQUEsSUFDbEIsSUFBTTtBQUFBLEVBQ1I7QUFBQSxFQUNBLGVBQWlCO0FBQUEsSUFDZixRQUFVO0FBQUEsRUFDWjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,405 @@
1
+ // src/storage/adapter.ts
2
+ import { WORKFLOW_DESERIALIZE, WORKFLOW_SERIALIZE } from "@workflow/serde";
3
+ var StorageStep = class _StorageStep {
4
+ event;
5
+ constructor(event) {
6
+ this.event = event;
7
+ }
8
+ static [WORKFLOW_SERIALIZE](instance) {
9
+ return { event: instance.event };
10
+ }
11
+ static [WORKFLOW_DESERIALIZE](data) {
12
+ return new _StorageStep(data.event);
13
+ }
14
+ // biome-ignore lint/suspicious/noExplicitAny: safe dispatch — event.method selects the matching handler
15
+ on(handlers) {
16
+ return handlers[this.event.method](this.event);
17
+ }
18
+ };
19
+ function isStepFunction(h) {
20
+ return typeof h === "function";
21
+ }
22
+ function fromStepFunction(fn) {
23
+ return {
24
+ session: {
25
+ get: (id) => fn(new StorageStep({ method: "session.get", id })),
26
+ set: (id, value) => fn(new StorageStep({ method: "session.set", id, value })),
27
+ update: (id, updates) => fn(new StorageStep({ method: "session.update", id, updates }))
28
+ },
29
+ message: {
30
+ get: (id) => fn(new StorageStep({ method: "message.get", id })),
31
+ set: (id, value) => fn(new StorageStep({ method: "message.set", id, value })),
32
+ update: (id, updates) => fn(new StorageStep({ method: "message.update", id, updates })),
33
+ listBySession: (sessionId) => fn(new StorageStep({ method: "message.listBySession", sessionId }))
34
+ },
35
+ part: {
36
+ get: (id) => fn(new StorageStep({ method: "part.get", id })),
37
+ set: (id, value) => fn(new StorageStep({ method: "part.set", id, value })),
38
+ listBySession: (sessionId) => fn(new StorageStep({ method: "part.listBySession", sessionId }))
39
+ },
40
+ sandbox: {
41
+ get: (id) => fn(new StorageStep({ method: "sandbox.get", id })),
42
+ set: (id, value) => fn(new StorageStep({ method: "sandbox.set", id, value })),
43
+ update: (id, updates) => fn(new StorageStep({ method: "sandbox.update", id, updates }))
44
+ },
45
+ setup: {
46
+ get: (id) => fn(new StorageStep({ method: "setup.get", id })),
47
+ set: (id, value) => fn(new StorageStep({ method: "setup.set", id, value }))
48
+ }
49
+ };
50
+ }
51
+ function fromHandlers(h) {
52
+ return {
53
+ session: {
54
+ get: (id) => h["session.get"]({ id }),
55
+ set: (id, value) => h["session.set"]({ id, value }),
56
+ update: (id, updates) => h["session.update"]({ id, updates })
57
+ },
58
+ message: {
59
+ get: (id) => h["message.get"]({ id }),
60
+ set: (id, value) => h["message.set"]({ id, value }),
61
+ update: (id, updates) => h["message.update"]({ id, updates }),
62
+ listBySession: (sessionId) => h["message.listBySession"]({ sessionId })
63
+ },
64
+ part: {
65
+ get: (id) => h["part.get"]({ id }),
66
+ set: (id, value) => h["part.set"]({ id, value }),
67
+ listBySession: (sessionId) => h["part.listBySession"]({ sessionId })
68
+ },
69
+ sandbox: {
70
+ get: (id) => h["sandbox.get"]({ id }),
71
+ set: (id, value) => h["sandbox.set"]({ id, value }),
72
+ update: (id, updates) => h["sandbox.update"]({ id, updates })
73
+ },
74
+ setup: {
75
+ get: (id) => h["setup.get"]({ id }),
76
+ set: (id, value) => h["setup.set"]({ id, value })
77
+ }
78
+ };
79
+ }
80
+ function toStorage(h) {
81
+ return isStepFunction(h) ? fromStepFunction(h) : fromHandlers(h);
82
+ }
83
+
84
+ // src/storage/bindings/kv-optimistic-update.ts
85
+ var DEFAULT_MAX_RETRIES = 3;
86
+ async function mergeWithKVOptimisticUpdate(opts) {
87
+ const maxRetries = opts.maxRetries ?? DEFAULT_MAX_RETRIES;
88
+ const { KVVersionConflictError } = await import("@vercel/kv2");
89
+ for (let attempt = 0; attempt < maxRetries; attempt++) {
90
+ const entry = await opts.store.get(opts.id);
91
+ if (!entry.exists) {
92
+ throw new Error(opts.notFoundErrorMessage);
93
+ }
94
+ const existing = await entry.value;
95
+ const updated = { ...existing, ...opts.updates };
96
+ try {
97
+ await entry.update(updated);
98
+ return updated;
99
+ } catch (error) {
100
+ if (!(error instanceof KVVersionConflictError) && (!(error instanceof Error) || error.name !== "KVVersionConflictError")) {
101
+ throw error;
102
+ }
103
+ if (attempt === maxRetries - 1) {
104
+ throw new Error(opts.conflictErrorMessage, { cause: error });
105
+ }
106
+ }
107
+ }
108
+ throw new Error(opts.conflictErrorMessage);
109
+ }
110
+
111
+ // src/storage/bindings/kv.ts
112
+ async function initKvStores(prefix) {
113
+ const { createKV } = await import("@vercel/kv2");
114
+ const kv = createKV({ prefix }).getStore("agent/");
115
+ return {
116
+ sessions: kv.getStore("session/"),
117
+ messages: kv.getStore("message/").withIndexes({
118
+ bySessionId: { key: (m) => m.sessionId }
119
+ }),
120
+ parts: kv.getStore("part/").withIndexes({
121
+ bySessionId: { key: (p) => p.sessionId }
122
+ }),
123
+ sandboxes: kv.getStore("sandbox/"),
124
+ setups: kv.getStore("setup/")
125
+ };
126
+ }
127
+ function kvStorageFallback(opts) {
128
+ let storesPromise;
129
+ function getStores() {
130
+ if (!storesPromise) {
131
+ storesPromise = initKvStores(opts.prefix);
132
+ }
133
+ return storesPromise;
134
+ }
135
+ const tag = `[agent.${opts.prefix}][kv2]`;
136
+ return {
137
+ "session.get": async ({ id }) => {
138
+ const { sessions } = await getStores();
139
+ return await sessions.getValue(id) ?? null;
140
+ },
141
+ "session.set": async ({ id, value }) => {
142
+ const { sessions } = await getStores();
143
+ await sessions.set(id, value);
144
+ },
145
+ "session.update": async ({ id, updates }) => {
146
+ const { sessions } = await getStores();
147
+ return mergeWithKVOptimisticUpdate({
148
+ id,
149
+ updates,
150
+ store: sessions,
151
+ notFoundErrorMessage: `${tag}[session.update] no session found with id "${id}"`,
152
+ conflictErrorMessage: `${tag}[session.update] optimistic update failed after retries for id "${id}"`
153
+ });
154
+ },
155
+ "message.get": async ({ id }) => {
156
+ const { messages } = await getStores();
157
+ return await messages.getValue(id) ?? null;
158
+ },
159
+ "message.set": async ({ id, value }) => {
160
+ const { messages } = await getStores();
161
+ await messages.set(id, value);
162
+ },
163
+ "message.update": async ({ id, updates }) => {
164
+ const { messages } = await getStores();
165
+ return mergeWithKVOptimisticUpdate({
166
+ id,
167
+ updates,
168
+ store: messages,
169
+ notFoundErrorMessage: `${tag}[message.update] no message found with id "${id}"`,
170
+ conflictErrorMessage: `${tag}[message.update] optimistic update failed after retries for id "${id}"`
171
+ });
172
+ },
173
+ "message.listBySession": async ({ sessionId }) => {
174
+ const { messages } = await getStores();
175
+ const result = [];
176
+ for await (const [, entry] of messages.entries({
177
+ bySessionId: sessionId
178
+ })) {
179
+ result.push(await entry.value);
180
+ }
181
+ return result;
182
+ },
183
+ "part.get": async ({ id }) => {
184
+ const { parts } = await getStores();
185
+ return await parts.getValue(id) ?? null;
186
+ },
187
+ "part.set": async ({ id, value }) => {
188
+ const { parts } = await getStores();
189
+ await parts.set(id, value);
190
+ },
191
+ "part.listBySession": async ({ sessionId }) => {
192
+ const { parts } = await getStores();
193
+ const result = [];
194
+ for await (const [, entry] of parts.entries({
195
+ bySessionId: sessionId
196
+ })) {
197
+ result.push(await entry.value);
198
+ }
199
+ return result;
200
+ },
201
+ "sandbox.get": async ({ id }) => {
202
+ const { sandboxes } = await getStores();
203
+ return await sandboxes.getValue(id) ?? null;
204
+ },
205
+ "sandbox.set": async ({ id, value }) => {
206
+ const { sandboxes } = await getStores();
207
+ await sandboxes.set(id, value);
208
+ },
209
+ "sandbox.update": async ({ id, updates }) => {
210
+ const { sandboxes } = await getStores();
211
+ return mergeWithKVOptimisticUpdate({
212
+ id,
213
+ updates,
214
+ store: sandboxes,
215
+ notFoundErrorMessage: `${tag}[sandbox.update] no sandbox found with id "${id}"`,
216
+ conflictErrorMessage: `${tag}[sandbox.update] optimistic update failed after retries for id "${id}"`
217
+ });
218
+ },
219
+ "setup.get": async ({ id }) => {
220
+ const { setups } = await getStores();
221
+ return await setups.getValue(id) ?? null;
222
+ },
223
+ "setup.set": async ({ id, value }) => {
224
+ const { setups } = await getStores();
225
+ await setups.set(id, value);
226
+ }
227
+ };
228
+ }
229
+
230
+ // src/storage/bindings/local.ts
231
+ var _fs;
232
+ var _path;
233
+ async function fs() {
234
+ if (!_fs) {
235
+ _fs = await import("fs/promises");
236
+ }
237
+ return _fs;
238
+ }
239
+ async function path() {
240
+ if (!_path) {
241
+ _path = await import("path");
242
+ }
243
+ return _path;
244
+ }
245
+ function createWriteLock() {
246
+ const locks = /* @__PURE__ */ new Map();
247
+ return async function withWriteLock(opts) {
248
+ let state = locks.get(opts.key);
249
+ if (!state) {
250
+ state = { locked: false, waiters: [] };
251
+ locks.set(opts.key, state);
252
+ }
253
+ if (state.locked) {
254
+ await new Promise((resolve) => {
255
+ state.waiters.push(resolve);
256
+ });
257
+ }
258
+ state.locked = true;
259
+ try {
260
+ return await opts.fn();
261
+ } finally {
262
+ const next = state.waiters.shift();
263
+ if (next) {
264
+ next();
265
+ } else {
266
+ state.locked = false;
267
+ locks.delete(opts.key);
268
+ }
269
+ }
270
+ };
271
+ }
272
+ function createStore(dir) {
273
+ const filePath = async (key) => (await path()).join(dir, `${key}.json`);
274
+ const withWriteLock = createWriteLock();
275
+ return {
276
+ async get(key) {
277
+ try {
278
+ const data = await (await fs()).readFile(await filePath(key), "utf-8");
279
+ return JSON.parse(data);
280
+ } catch {
281
+ return null;
282
+ }
283
+ },
284
+ async set(key, value) {
285
+ await withWriteLock({
286
+ key,
287
+ fn: async () => {
288
+ const p = await filePath(key);
289
+ const { mkdir, writeFile } = await fs();
290
+ const { dirname } = await path();
291
+ await mkdir(dirname(p), { recursive: true });
292
+ await writeFile(p, JSON.stringify(value, null, 2));
293
+ }
294
+ });
295
+ },
296
+ update(key, updates) {
297
+ return withWriteLock({
298
+ key,
299
+ fn: async () => {
300
+ const p = await filePath(key);
301
+ const { readFile, mkdir, writeFile } = await fs();
302
+ const { dirname } = await path();
303
+ let existing;
304
+ try {
305
+ const data = await readFile(p, "utf-8");
306
+ existing = JSON.parse(data);
307
+ } catch {
308
+ throw new Error(`Not found: ${key}`);
309
+ }
310
+ const updated = { ...existing, ...updates };
311
+ await mkdir(dirname(p), { recursive: true });
312
+ await writeFile(p, JSON.stringify(updated, null, 2));
313
+ return updated;
314
+ }
315
+ });
316
+ }
317
+ };
318
+ }
319
+ async function readAllFromDir(dir) {
320
+ const { readdir, readFile } = await fs();
321
+ const { join } = await path();
322
+ let files;
323
+ try {
324
+ files = await readdir(dir);
325
+ } catch {
326
+ return [];
327
+ }
328
+ const result = [];
329
+ for (const file of files) {
330
+ if (!file.endsWith(".json")) {
331
+ continue;
332
+ }
333
+ try {
334
+ const data = await readFile(join(dir, file), "utf-8");
335
+ result.push(JSON.parse(data));
336
+ } catch {
337
+ }
338
+ }
339
+ return result;
340
+ }
341
+ async function ensureGitignore(dir) {
342
+ const { mkdir, writeFile, readFile } = await fs();
343
+ const { join } = await path();
344
+ const gitignorePath = join(dir, ".gitignore");
345
+ try {
346
+ await readFile(gitignorePath, "utf-8");
347
+ } catch {
348
+ await mkdir(dir, { recursive: true });
349
+ await writeFile(gitignorePath, "*\n");
350
+ }
351
+ }
352
+ function localStorage(opts) {
353
+ const dir = opts?.dir ?? ".agent";
354
+ let gitignorePromise = null;
355
+ const sessionStore = createStore(`${dir}/session`);
356
+ const messageStore = createStore(`${dir}/message`);
357
+ const partStore = createStore(`${dir}/part`);
358
+ const sandboxStore = createStore(`${dir}/sandbox`);
359
+ const setupStore = createStore(`${dir}/setup`);
360
+ const messageDir = `${dir}/message`;
361
+ const partDir = `${dir}/part`;
362
+ function onWrite(fn) {
363
+ if (!gitignorePromise) {
364
+ gitignorePromise = ensureGitignore(dir);
365
+ }
366
+ return gitignorePromise.then(fn);
367
+ }
368
+ return {
369
+ "session.get": ({ id }) => sessionStore.get(id),
370
+ "session.set": ({ id, value }) => onWrite(() => sessionStore.set(id, value)),
371
+ "session.update": ({ id, updates }) => onWrite(() => sessionStore.update(id, updates)),
372
+ "message.get": ({ id }) => messageStore.get(id),
373
+ "message.set": ({ id, value }) => onWrite(() => messageStore.set(id, value)),
374
+ "message.update": ({ id, updates }) => onWrite(() => messageStore.update(id, updates)),
375
+ "message.listBySession": async ({ sessionId }) => {
376
+ const all = await readAllFromDir(messageDir);
377
+ return all.filter((m) => m.sessionId === sessionId);
378
+ },
379
+ "part.get": ({ id }) => partStore.get(id),
380
+ "part.set": ({ id, value }) => onWrite(() => partStore.set(id, value)),
381
+ "part.listBySession": async ({ sessionId }) => {
382
+ const all = await readAllFromDir(partDir);
383
+ return all.filter((p) => p.sessionId === sessionId);
384
+ },
385
+ "sandbox.get": ({ id }) => sandboxStore.get(id),
386
+ "sandbox.set": ({ id, value }) => onWrite(() => sandboxStore.set(id, value)),
387
+ "sandbox.update": ({ id, updates }) => onWrite(() => sandboxStore.update(id, updates)),
388
+ "setup.get": ({ id }) => setupStore.get(id),
389
+ "setup.set": ({ id, value }) => onWrite(() => setupStore.set(id, value))
390
+ };
391
+ }
392
+
393
+ // src/storage/should-fallback-kv2.ts
394
+ function shouldFallbackToKV2() {
395
+ return !!process.env.BLOB_READ_WRITE_TOKEN;
396
+ }
397
+
398
+ export {
399
+ StorageStep,
400
+ toStorage,
401
+ kvStorageFallback,
402
+ localStorage,
403
+ shouldFallbackToKV2
404
+ };
405
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3N0b3JhZ2UvYWRhcHRlci50cyIsICIuLi9zcmMvc3RvcmFnZS9iaW5kaW5ncy9rdi1vcHRpbWlzdGljLXVwZGF0ZS50cyIsICIuLi9zcmMvc3RvcmFnZS9iaW5kaW5ncy9rdi50cyIsICIuLi9zcmMvc3RvcmFnZS9iaW5kaW5ncy9sb2NhbC50cyIsICIuLi9zcmMvc3RvcmFnZS9zaG91bGQtZmFsbGJhY2sta3YyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBXT1JLRkxPV19ERVNFUklBTElaRSwgV09SS0ZMT1dfU0VSSUFMSVpFIH0gZnJvbSBcIkB3b3JrZmxvdy9zZXJkZVwiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlLCBQYXJ0LCBTYW5kYm94LCBTZXNzaW9uLCBTZXR1cCB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBTdG9yYWdlSGFuZGxlcnMgKHB1YmxpYywgZmxhdCkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB0eXBlIFN0b3JhZ2VIYW5kbGVycyA9IHtcbiAgXCJzZXNzaW9uLmdldFwiKHA6IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxTZXNzaW9uIHwgbnVsbD47XG4gIFwic2Vzc2lvbi5zZXRcIihwOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBTZXNzaW9uIH0pOiBQcm9taXNlPHZvaWQ+O1xuICBcInNlc3Npb24udXBkYXRlXCIocDoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdXBkYXRlczogUGFydGlhbDxTZXNzaW9uPjtcbiAgfSk6IFByb21pc2U8U2Vzc2lvbj47XG5cbiAgXCJtZXNzYWdlLmdldFwiKHA6IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxNZXNzYWdlIHwgbnVsbD47XG4gIFwibWVzc2FnZS5zZXRcIihwOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBNZXNzYWdlIH0pOiBQcm9taXNlPHZvaWQ+O1xuICBcIm1lc3NhZ2UudXBkYXRlXCIocDoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdXBkYXRlczogUGFydGlhbDxNZXNzYWdlPjtcbiAgfSk6IFByb21pc2U8TWVzc2FnZT47XG4gIFwibWVzc2FnZS5saXN0QnlTZXNzaW9uXCIocDogeyBzZXNzaW9uSWQ6IHN0cmluZyB9KTogUHJvbWlzZTxNZXNzYWdlW10+O1xuXG4gIFwicGFydC5nZXRcIihwOiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8UGFydCB8IG51bGw+O1xuICBcInBhcnQuc2V0XCIocDogeyBpZDogc3RyaW5nOyB2YWx1ZTogUGFydCB9KTogUHJvbWlzZTx2b2lkPjtcbiAgXCJwYXJ0Lmxpc3RCeVNlc3Npb25cIihwOiB7IHNlc3Npb25JZDogc3RyaW5nIH0pOiBQcm9taXNlPFBhcnRbXT47XG5cbiAgXCJzYW5kYm94LmdldFwiKHA6IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxTYW5kYm94IHwgbnVsbD47XG4gIFwic2FuZGJveC5zZXRcIihwOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBTYW5kYm94IH0pOiBQcm9taXNlPHZvaWQ+O1xuICBcInNhbmRib3gudXBkYXRlXCIocDoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdXBkYXRlczogUGFydGlhbDxTYW5kYm94PjtcbiAgfSk6IFByb21pc2U8U2FuZGJveD47XG5cbiAgXCJzZXR1cC5nZXRcIihwOiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8U2V0dXAgfCBudWxsPjtcbiAgXCJzZXR1cC5zZXRcIihwOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBTZXR1cCB9KTogUHJvbWlzZTx2b2lkPjtcbn07XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBTdG9yYWdlQ2FsbCAoZGVyaXZlZCBmcm9tIFN0b3JhZ2VIYW5kbGVycykgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB0eXBlIFN0b3JhZ2VDYWxsID0ge1xuICBbSyBpbiBrZXlvZiBTdG9yYWdlSGFuZGxlcnNdOiB7IG1ldGhvZDogSyB9ICYgUGFyYW1ldGVyczxcbiAgICBTdG9yYWdlSGFuZGxlcnNbS11cbiAgPlswXTtcbn1ba2V5b2YgU3RvcmFnZUhhbmRsZXJzXTtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFN0b3JhZ2VTdGVwIChzZXJpYWxpemFibGUgYWNyb3NzIHdvcmtmbG93IGJvdW5kYXJ5KSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IGNsYXNzIFN0b3JhZ2VTdGVwIHtcbiAgZXZlbnQ6IFN0b3JhZ2VDYWxsO1xuXG4gIGNvbnN0cnVjdG9yKGV2ZW50OiBTdG9yYWdlQ2FsbCkge1xuICAgIHRoaXMuZXZlbnQgPSBldmVudDtcbiAgfVxuXG4gIHN0YXRpYyBbV09SS0ZMT1dfU0VSSUFMSVpFXShpbnN0YW5jZTogU3RvcmFnZVN0ZXApIHtcbiAgICByZXR1cm4geyBldmVudDogaW5zdGFuY2UuZXZlbnQgfTtcbiAgfVxuXG4gIHN0YXRpYyBbV09SS0ZMT1dfREVTRVJJQUxJWkVdKGRhdGE6IHsgZXZlbnQ6IFN0b3JhZ2VDYWxsIH0pIHtcbiAgICByZXR1cm4gbmV3IFN0b3JhZ2VTdGVwKGRhdGEuZXZlbnQpO1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBzYWZlIGRpc3BhdGNoIFx1MjAxNCBldmVudC5tZXRob2Qgc2VsZWN0cyB0aGUgbWF0Y2hpbmcgaGFuZGxlclxuICBvbihoYW5kbGVyczogU3RvcmFnZUhhbmRsZXJzKTogUHJvbWlzZTxhbnk+IHtcbiAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IHNlZSBhYm92ZVxuICAgIHJldHVybiAoaGFuZGxlcnNbdGhpcy5ldmVudC5tZXRob2RdIGFzIGFueSkodGhpcy5ldmVudCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHNpbmdsZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgYWxsIHN0b3JhZ2Ugb3BlcmF0aW9ucy4gSW50ZW5kZWQgdG8gYmVcbiAqIG1hcmtlZCB3aXRoIGBcInVzZSBzdGVwXCJgIHNvIHRoYXQgaXRzIGJvZHkgKGFuZCBOb2RlLmpzLWRlcGVuZGVudFxuICogaW1wb3J0cyBsaWtlIGRhdGFiYXNlIGNsaWVudHMpIGlzIGV4dHJhY3RlZCBieSB0aGUgd29ya2Zsb3cgYnVuZGxlclxuICogYW5kIHJ1bnMgc2VydmVyLXNpZGUuXG4gKlxuICogVGhlIHN0ZXAgcmVjZWl2ZXMgYSBgU3RvcmFnZVN0ZXBgIGluc3RhbmNlIChzZXJpYWxpemFibGUgdmlhXG4gKiBgQHdvcmtmbG93L3NlcmRlYCkgYW5kIHNob3VsZCBjYWxsIGBzdGVwLmhhbmRsZSh7IC4uLiB9KWAgd2l0aCBhXG4gKiBgU3RvcmFnZUhhbmRsZXJzYCBtYXAuXG4gKi9cbi8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogc3RlcCBmdW5jdGlvbiBpcyBhIGRpc3BhdGNoZXI7IHR5cGUgc2FmZXR5IGlzIGF0IHRoZSBoYW5kbGVycyBsZXZlbFxuZXhwb3J0IHR5cGUgU3RvcmFnZVN0ZXBGdW5jdGlvbiA9IChzdG9yZTogU3RvcmFnZVN0ZXApID0+IFByb21pc2U8YW55PjtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFN0b3JhZ2UgKGludGVybmFsLCBuZXN0ZWQpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JhZ2Uge1xuICBzZXNzaW9uOiB7XG4gICAgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxTZXNzaW9uIHwgbnVsbD47XG4gICAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogU2Vzc2lvbik6IFByb21pc2U8dm9pZD47XG4gICAgdXBkYXRlKGtleTogc3RyaW5nLCB1cGRhdGVzOiBQYXJ0aWFsPFNlc3Npb24+KTogUHJvbWlzZTxTZXNzaW9uPjtcbiAgfTtcbiAgbWVzc2FnZToge1xuICAgIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZSB8IG51bGw+O1xuICAgIHNldChrZXk6IHN0cmluZywgdmFsdWU6IE1lc3NhZ2UpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHVwZGF0ZShrZXk6IHN0cmluZywgdXBkYXRlczogUGFydGlhbDxNZXNzYWdlPik6IFByb21pc2U8TWVzc2FnZT47XG4gICAgbGlzdEJ5U2Vzc2lvbihzZXNzaW9uSWQ6IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZVtdPjtcbiAgfTtcbiAgcGFydDoge1xuICAgIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8UGFydCB8IG51bGw+O1xuICAgIHNldChrZXk6IHN0cmluZywgdmFsdWU6IFBhcnQpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGxpc3RCeVNlc3Npb24oc2Vzc2lvbklkOiBzdHJpbmcpOiBQcm9taXNlPFBhcnRbXT47XG4gIH07XG4gIHNhbmRib3g6IHtcbiAgICBnZXQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPFNhbmRib3ggfCBudWxsPjtcbiAgICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBTYW5kYm94KTogUHJvbWlzZTx2b2lkPjtcbiAgICB1cGRhdGUoa2V5OiBzdHJpbmcsIHVwZGF0ZXM6IFBhcnRpYWw8U2FuZGJveD4pOiBQcm9taXNlPFNhbmRib3g+O1xuICB9O1xuICBzZXR1cDoge1xuICAgIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8U2V0dXAgfCBudWxsPjtcbiAgICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBTZXR1cCk6IFByb21pc2U8dm9pZD47XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFN0b3JhZ2VJbnB1dCA9IFN0b3JhZ2VIYW5kbGVycyB8IFN0b3JhZ2VTdGVwRnVuY3Rpb247XG5cbmZ1bmN0aW9uIGlzU3RlcEZ1bmN0aW9uKGg6IFN0b3JhZ2VJbnB1dCk6IGggaXMgU3RvcmFnZVN0ZXBGdW5jdGlvbiB7XG4gIHJldHVybiB0eXBlb2YgaCA9PT0gXCJmdW5jdGlvblwiO1xufVxuXG5mdW5jdGlvbiBmcm9tU3RlcEZ1bmN0aW9uKGZuOiBTdG9yYWdlU3RlcEZ1bmN0aW9uKTogU3RvcmFnZSB7XG4gIHJldHVybiB7XG4gICAgc2Vzc2lvbjoge1xuICAgICAgZ2V0OiAoaWQpID0+IGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzZXNzaW9uLmdldFwiLCBpZCB9KSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzZXNzaW9uLnNldFwiLCBpZCwgdmFsdWUgfSkpLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzZXNzaW9uLnVwZGF0ZVwiLCBpZCwgdXBkYXRlcyB9KSksXG4gICAgfSxcbiAgICBtZXNzYWdlOiB7XG4gICAgICBnZXQ6IChpZCkgPT4gZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcIm1lc3NhZ2UuZ2V0XCIsIGlkIH0pKSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcIm1lc3NhZ2Uuc2V0XCIsIGlkLCB2YWx1ZSB9KSksXG4gICAgICB1cGRhdGU6IChpZCwgdXBkYXRlcykgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcIm1lc3NhZ2UudXBkYXRlXCIsIGlkLCB1cGRhdGVzIH0pKSxcbiAgICAgIGxpc3RCeVNlc3Npb246IChzZXNzaW9uSWQpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJtZXNzYWdlLmxpc3RCeVNlc3Npb25cIiwgc2Vzc2lvbklkIH0pKSxcbiAgICB9LFxuICAgIHBhcnQ6IHtcbiAgICAgIGdldDogKGlkKSA9PiBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwicGFydC5nZXRcIiwgaWQgfSkpLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwicGFydC5zZXRcIiwgaWQsIHZhbHVlIH0pKSxcbiAgICAgIGxpc3RCeVNlc3Npb246IChzZXNzaW9uSWQpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJwYXJ0Lmxpc3RCeVNlc3Npb25cIiwgc2Vzc2lvbklkIH0pKSxcbiAgICB9LFxuICAgIHNhbmRib3g6IHtcbiAgICAgIGdldDogKGlkKSA9PiBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2FuZGJveC5nZXRcIiwgaWQgfSkpLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2FuZGJveC5zZXRcIiwgaWQsIHZhbHVlIH0pKSxcbiAgICAgIHVwZGF0ZTogKGlkLCB1cGRhdGVzKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2FuZGJveC51cGRhdGVcIiwgaWQsIHVwZGF0ZXMgfSkpLFxuICAgIH0sXG4gICAgc2V0dXA6IHtcbiAgICAgIGdldDogKGlkKSA9PiBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2V0dXAuZ2V0XCIsIGlkIH0pKSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNldHVwLnNldFwiLCBpZCwgdmFsdWUgfSkpLFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGZyb21IYW5kbGVycyhoOiBTdG9yYWdlSGFuZGxlcnMpOiBTdG9yYWdlIHtcbiAgcmV0dXJuIHtcbiAgICBzZXNzaW9uOiB7XG4gICAgICBnZXQ6IChpZCkgPT4gaFtcInNlc3Npb24uZ2V0XCJdKHsgaWQgfSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+IGhbXCJzZXNzaW9uLnNldFwiXSh7IGlkLCB2YWx1ZSB9KSxcbiAgICAgIHVwZGF0ZTogKGlkLCB1cGRhdGVzKSA9PiBoW1wic2Vzc2lvbi51cGRhdGVcIl0oeyBpZCwgdXBkYXRlcyB9KSxcbiAgICB9LFxuICAgIG1lc3NhZ2U6IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wibWVzc2FnZS5nZXRcIl0oeyBpZCB9KSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT4gaFtcIm1lc3NhZ2Uuc2V0XCJdKHsgaWQsIHZhbHVlIH0pLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+IGhbXCJtZXNzYWdlLnVwZGF0ZVwiXSh7IGlkLCB1cGRhdGVzIH0pLFxuICAgICAgbGlzdEJ5U2Vzc2lvbjogKHNlc3Npb25JZCkgPT4gaFtcIm1lc3NhZ2UubGlzdEJ5U2Vzc2lvblwiXSh7IHNlc3Npb25JZCB9KSxcbiAgICB9LFxuICAgIHBhcnQ6IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wicGFydC5nZXRcIl0oeyBpZCB9KSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT4gaFtcInBhcnQuc2V0XCJdKHsgaWQsIHZhbHVlIH0pLFxuICAgICAgbGlzdEJ5U2Vzc2lvbjogKHNlc3Npb25JZCkgPT4gaFtcInBhcnQubGlzdEJ5U2Vzc2lvblwiXSh7IHNlc3Npb25JZCB9KSxcbiAgICB9LFxuICAgIHNhbmRib3g6IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wic2FuZGJveC5nZXRcIl0oeyBpZCB9KSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT4gaFtcInNhbmRib3guc2V0XCJdKHsgaWQsIHZhbHVlIH0pLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+IGhbXCJzYW5kYm94LnVwZGF0ZVwiXSh7IGlkLCB1cGRhdGVzIH0pLFxuICAgIH0sXG4gICAgc2V0dXA6IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wic2V0dXAuZ2V0XCJdKHsgaWQgfSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+IGhbXCJzZXR1cC5zZXRcIl0oeyBpZCwgdmFsdWUgfSksXG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU3RvcmFnZShoOiBTdG9yYWdlSW5wdXQpOiBTdG9yYWdlIHtcbiAgcmV0dXJuIGlzU3RlcEZ1bmN0aW9uKGgpID8gZnJvbVN0ZXBGdW5jdGlvbihoKSA6IGZyb21IYW5kbGVycyhoKTtcbn1cbiIsICJjb25zdCBERUZBVUxUX01BWF9SRVRSSUVTID0gMztcblxuLyoqXG4gKiBXZSBpbnRlbnRpb25hbGx5IG1pcnJvciB0aGUgbWluaW1hbCBgZ2V0KClgIHJldHVybiBzaGFwZSB3ZSB1c2UgaGVyZVxuICogaW5zdGVhZCBvZiBpbXBvcnRpbmcgS1YyIHR5cGVzLiBUaGUgd29ya2Zsb3cgYnVuZGxlciBhbmFseXplcyB0eXBlLW9ubHlcbiAqIGltcG9ydHMgYW5kIGZsYWdzIGBAdmVyY2VsL2t2MmAgYXMgYSBOb2RlIG1vZHVsZSBpbiB3b3JrZmxvdyBjb2RlIHBhdGhzLlxuICogS2VlcGluZyB0aGlzIGxvY2FsIGF2b2lkcyB0aGF0IGZhbHNlLXBvc2l0aXZlIHdoaWxlIHByZXNlcnZpbmcgcnVudGltZSBiZWhhdmlvci5cbiAqL1xudHlwZSBLVk9wdGltaXN0aWNHZXRSZXN1bHQ8VD4gPVxuICB8IHtcbiAgICAgIGV4aXN0czogZmFsc2U7XG4gICAgfVxuICB8IHtcbiAgICAgIGV4aXN0czogdHJ1ZTtcbiAgICAgIHZhbHVlOiBQcm9taXNlPFQ+O1xuICAgICAgdXBkYXRlKHZhbHVlOiBUKTogUHJvbWlzZTx1bmtub3duPjtcbiAgICB9O1xuXG50eXBlIEtWT3B0aW1pc3RpY1N0b3JlPFQ+ID0ge1xuICBnZXQoa2V5T3JGaWx0ZXI6IHN0cmluZyk6IFByb21pc2U8S1ZPcHRpbWlzdGljR2V0UmVzdWx0PFQ+Pjtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtZXJnZVdpdGhLVk9wdGltaXN0aWNVcGRhdGU8VD4ob3B0czoge1xuICBpZDogc3RyaW5nO1xuICB1cGRhdGVzOiBQYXJ0aWFsPFQ+O1xuICBzdG9yZTogS1ZPcHRpbWlzdGljU3RvcmU8VD47XG4gIG5vdEZvdW5kRXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gIGNvbmZsaWN0RXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gIG1heFJldHJpZXM/OiBudW1iZXI7XG59KTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IG1heFJldHJpZXMgPSBvcHRzLm1heFJldHJpZXMgPz8gREVGQVVMVF9NQVhfUkVUUklFUztcbiAgY29uc3QgeyBLVlZlcnNpb25Db25mbGljdEVycm9yIH0gPSBhd2FpdCBpbXBvcnQoXCJAdmVyY2VsL2t2MlwiKTtcblxuICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IG1heFJldHJpZXM7IGF0dGVtcHQrKykge1xuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgb3B0cy5zdG9yZS5nZXQob3B0cy5pZCk7XG4gICAgaWYgKCFlbnRyeS5leGlzdHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihvcHRzLm5vdEZvdW5kRXJyb3JNZXNzYWdlKTtcbiAgICB9XG5cbiAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IGVudHJ5LnZhbHVlO1xuICAgIGNvbnN0IHVwZGF0ZWQgPSB7IC4uLmV4aXN0aW5nLCAuLi5vcHRzLnVwZGF0ZXMgfTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBlbnRyeS51cGRhdGUodXBkYXRlZCk7XG4gICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKFxuICAgICAgICAhKGVycm9yIGluc3RhbmNlb2YgS1ZWZXJzaW9uQ29uZmxpY3RFcnJvcikgJiZcbiAgICAgICAgKCEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikgfHwgZXJyb3IubmFtZSAhPT0gXCJLVlZlcnNpb25Db25mbGljdEVycm9yXCIpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG5cbiAgICAgIGlmIChhdHRlbXB0ID09PSBtYXhSZXRyaWVzIC0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3Iob3B0cy5jb25mbGljdEVycm9yTWVzc2FnZSwgeyBjYXVzZTogZXJyb3IgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKG9wdHMuY29uZmxpY3RFcnJvck1lc3NhZ2UpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgU3RvcmFnZUhhbmRsZXJzIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZSwgUGFydCwgU2FuZGJveCwgU2Vzc2lvbiwgU2V0dXAgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IG1lcmdlV2l0aEtWT3B0aW1pc3RpY1VwZGF0ZSB9IGZyb20gXCIuL2t2LW9wdGltaXN0aWMtdXBkYXRlXCI7XG5cbnR5cGUgS3ZTdG9yZXMgPSBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIGluaXRLdlN0b3Jlcz4+O1xuXG5hc3luYyBmdW5jdGlvbiBpbml0S3ZTdG9yZXMocHJlZml4OiBzdHJpbmcpIHtcbiAgY29uc3QgeyBjcmVhdGVLViB9ID0gYXdhaXQgaW1wb3J0KFwiQHZlcmNlbC9rdjJcIik7XG4gIGNvbnN0IGt2ID0gY3JlYXRlS1YoeyBwcmVmaXggfSkuZ2V0U3RvcmUoXCJhZ2VudC9cIik7XG5cbiAgcmV0dXJuIHtcbiAgICBzZXNzaW9uczoga3YuZ2V0U3RvcmU8U2Vzc2lvbj4oXCJzZXNzaW9uL1wiKSxcbiAgICBtZXNzYWdlczoga3YuZ2V0U3RvcmU8TWVzc2FnZT4oXCJtZXNzYWdlL1wiKS53aXRoSW5kZXhlcyh7XG4gICAgICBieVNlc3Npb25JZDogeyBrZXk6IChtOiBNZXNzYWdlKSA9PiBtLnNlc3Npb25JZCB9LFxuICAgIH0pLFxuICAgIHBhcnRzOiBrdi5nZXRTdG9yZTxQYXJ0PihcInBhcnQvXCIpLndpdGhJbmRleGVzKHtcbiAgICAgIGJ5U2Vzc2lvbklkOiB7IGtleTogKHA6IFBhcnQpID0+IHAuc2Vzc2lvbklkIH0sXG4gICAgfSksXG4gICAgc2FuZGJveGVzOiBrdi5nZXRTdG9yZTxTYW5kYm94PihcInNhbmRib3gvXCIpLFxuICAgIHNldHVwczoga3YuZ2V0U3RvcmU8U2V0dXA+KFwic2V0dXAvXCIpLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24ga3ZTdG9yYWdlRmFsbGJhY2sob3B0czogeyBwcmVmaXg6IHN0cmluZyB9KTogU3RvcmFnZUhhbmRsZXJzIHtcbiAgbGV0IHN0b3Jlc1Byb21pc2U6IFByb21pc2U8S3ZTdG9yZXM+IHwgdW5kZWZpbmVkO1xuXG4gIGZ1bmN0aW9uIGdldFN0b3JlcygpIHtcbiAgICBpZiAoIXN0b3Jlc1Byb21pc2UpIHtcbiAgICAgIHN0b3Jlc1Byb21pc2UgPSBpbml0S3ZTdG9yZXMob3B0cy5wcmVmaXgpO1xuICAgIH1cbiAgICByZXR1cm4gc3RvcmVzUHJvbWlzZTtcbiAgfVxuXG4gIGNvbnN0IHRhZyA9IGBbYWdlbnQuJHtvcHRzLnByZWZpeH1dW2t2Ml1gO1xuXG4gIHJldHVybiB7XG4gICAgXCJzZXNzaW9uLmdldFwiOiBhc3luYyAoeyBpZCB9KSA9PiB7XG4gICAgICBjb25zdCB7IHNlc3Npb25zIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIHJldHVybiAoYXdhaXQgc2Vzc2lvbnMuZ2V0VmFsdWUoaWQpKSA/PyBudWxsO1xuICAgIH0sXG5cbiAgICBcInNlc3Npb24uc2V0XCI6IGFzeW5jICh7IGlkLCB2YWx1ZSB9KSA9PiB7XG4gICAgICBjb25zdCB7IHNlc3Npb25zIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIGF3YWl0IHNlc3Npb25zLnNldChpZCwgdmFsdWUpO1xuICAgIH0sXG5cbiAgICBcInNlc3Npb24udXBkYXRlXCI6IGFzeW5jICh7IGlkLCB1cGRhdGVzIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgc2Vzc2lvbnMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgcmV0dXJuIG1lcmdlV2l0aEtWT3B0aW1pc3RpY1VwZGF0ZTxTZXNzaW9uPih7XG4gICAgICAgIGlkLFxuICAgICAgICB1cGRhdGVzLFxuICAgICAgICBzdG9yZTogc2Vzc2lvbnMsXG4gICAgICAgIG5vdEZvdW5kRXJyb3JNZXNzYWdlOiBgJHt0YWd9W3Nlc3Npb24udXBkYXRlXSBubyBzZXNzaW9uIGZvdW5kIHdpdGggaWQgXCIke2lkfVwiYCxcbiAgICAgICAgY29uZmxpY3RFcnJvck1lc3NhZ2U6IGAke3RhZ31bc2Vzc2lvbi51cGRhdGVdIG9wdGltaXN0aWMgdXBkYXRlIGZhaWxlZCBhZnRlciByZXRyaWVzIGZvciBpZCBcIiR7aWR9XCJgLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIFwibWVzc2FnZS5nZXRcIjogYXN5bmMgKHsgaWQgfSkgPT4ge1xuICAgICAgY29uc3QgeyBtZXNzYWdlcyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICByZXR1cm4gKGF3YWl0IG1lc3NhZ2VzLmdldFZhbHVlKGlkKSkgPz8gbnVsbDtcbiAgICB9LFxuXG4gICAgXCJtZXNzYWdlLnNldFwiOiBhc3luYyAoeyBpZCwgdmFsdWUgfSkgPT4ge1xuICAgICAgY29uc3QgeyBtZXNzYWdlcyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICBhd2FpdCBtZXNzYWdlcy5zZXQoaWQsIHZhbHVlKTtcbiAgICB9LFxuXG4gICAgXCJtZXNzYWdlLnVwZGF0ZVwiOiBhc3luYyAoeyBpZCwgdXBkYXRlcyB9KSA9PiB7XG4gICAgICBjb25zdCB7IG1lc3NhZ2VzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIHJldHVybiBtZXJnZVdpdGhLVk9wdGltaXN0aWNVcGRhdGU8TWVzc2FnZT4oe1xuICAgICAgICBpZCxcbiAgICAgICAgdXBkYXRlcyxcbiAgICAgICAgc3RvcmU6IG1lc3NhZ2VzLFxuICAgICAgICBub3RGb3VuZEVycm9yTWVzc2FnZTogYCR7dGFnfVttZXNzYWdlLnVwZGF0ZV0gbm8gbWVzc2FnZSBmb3VuZCB3aXRoIGlkIFwiJHtpZH1cImAsXG4gICAgICAgIGNvbmZsaWN0RXJyb3JNZXNzYWdlOiBgJHt0YWd9W21lc3NhZ2UudXBkYXRlXSBvcHRpbWlzdGljIHVwZGF0ZSBmYWlsZWQgYWZ0ZXIgcmV0cmllcyBmb3IgaWQgXCIke2lkfVwiYCxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBcIm1lc3NhZ2UubGlzdEJ5U2Vzc2lvblwiOiBhc3luYyAoeyBzZXNzaW9uSWQgfSkgPT4ge1xuICAgICAgY29uc3QgeyBtZXNzYWdlcyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICBjb25zdCByZXN1bHQ6IE1lc3NhZ2VbXSA9IFtdO1xuICAgICAgZm9yIGF3YWl0IChjb25zdCBbLCBlbnRyeV0gb2YgbWVzc2FnZXMuZW50cmllcyh7XG4gICAgICAgIGJ5U2Vzc2lvbklkOiBzZXNzaW9uSWQsXG4gICAgICB9KSkge1xuICAgICAgICByZXN1bHQucHVzaChhd2FpdCBlbnRyeS52YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBcInBhcnQuZ2V0XCI6IGFzeW5jICh7IGlkIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgcGFydHMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgcmV0dXJuIChhd2FpdCBwYXJ0cy5nZXRWYWx1ZShpZCkpID8/IG51bGw7XG4gICAgfSxcblxuICAgIFwicGFydC5zZXRcIjogYXN5bmMgKHsgaWQsIHZhbHVlIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgcGFydHMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgYXdhaXQgcGFydHMuc2V0KGlkLCB2YWx1ZSk7XG4gICAgfSxcblxuICAgIFwicGFydC5saXN0QnlTZXNzaW9uXCI6IGFzeW5jICh7IHNlc3Npb25JZCB9KSA9PiB7XG4gICAgICBjb25zdCB7IHBhcnRzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIGNvbnN0IHJlc3VsdDogUGFydFtdID0gW107XG4gICAgICBmb3IgYXdhaXQgKGNvbnN0IFssIGVudHJ5XSBvZiBwYXJ0cy5lbnRyaWVzKHtcbiAgICAgICAgYnlTZXNzaW9uSWQ6IHNlc3Npb25JZCxcbiAgICAgIH0pKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGF3YWl0IGVudHJ5LnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIFwic2FuZGJveC5nZXRcIjogYXN5bmMgKHsgaWQgfSkgPT4ge1xuICAgICAgY29uc3QgeyBzYW5kYm94ZXMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgcmV0dXJuIChhd2FpdCBzYW5kYm94ZXMuZ2V0VmFsdWUoaWQpKSA/PyBudWxsO1xuICAgIH0sXG5cbiAgICBcInNhbmRib3guc2V0XCI6IGFzeW5jICh7IGlkLCB2YWx1ZSB9KSA9PiB7XG4gICAgICBjb25zdCB7IHNhbmRib3hlcyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICBhd2FpdCBzYW5kYm94ZXMuc2V0KGlkLCB2YWx1ZSk7XG4gICAgfSxcblxuICAgIFwic2FuZGJveC51cGRhdGVcIjogYXN5bmMgKHsgaWQsIHVwZGF0ZXMgfSkgPT4ge1xuICAgICAgY29uc3QgeyBzYW5kYm94ZXMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgcmV0dXJuIG1lcmdlV2l0aEtWT3B0aW1pc3RpY1VwZGF0ZTxTYW5kYm94Pih7XG4gICAgICAgIGlkLFxuICAgICAgICB1cGRhdGVzLFxuICAgICAgICBzdG9yZTogc2FuZGJveGVzLFxuICAgICAgICBub3RGb3VuZEVycm9yTWVzc2FnZTogYCR7dGFnfVtzYW5kYm94LnVwZGF0ZV0gbm8gc2FuZGJveCBmb3VuZCB3aXRoIGlkIFwiJHtpZH1cImAsXG4gICAgICAgIGNvbmZsaWN0RXJyb3JNZXNzYWdlOiBgJHt0YWd9W3NhbmRib3gudXBkYXRlXSBvcHRpbWlzdGljIHVwZGF0ZSBmYWlsZWQgYWZ0ZXIgcmV0cmllcyBmb3IgaWQgXCIke2lkfVwiYCxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBcInNldHVwLmdldFwiOiBhc3luYyAoeyBpZCB9KSA9PiB7XG4gICAgICBjb25zdCB7IHNldHVwcyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICByZXR1cm4gKGF3YWl0IHNldHVwcy5nZXRWYWx1ZShpZCkpID8/IG51bGw7XG4gICAgfSxcblxuICAgIFwic2V0dXAuc2V0XCI6IGFzeW5jICh7IGlkLCB2YWx1ZSB9KSA9PiB7XG4gICAgICBjb25zdCB7IHNldHVwcyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICBhd2FpdCBzZXR1cHMuc2V0KGlkLCB2YWx1ZSk7XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFN0b3JhZ2VIYW5kbGVycyB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2UsIFBhcnQsIFNhbmRib3gsIFNlc3Npb24sIFNldHVwIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbmxldCBfZnM6IHR5cGVvZiBpbXBvcnQoXCJub2RlOmZzL3Byb21pc2VzXCIpIHwgdW5kZWZpbmVkO1xubGV0IF9wYXRoOiB0eXBlb2YgaW1wb3J0KFwibm9kZTpwYXRoXCIpIHwgdW5kZWZpbmVkO1xuXG5hc3luYyBmdW5jdGlvbiBmcygpIHtcbiAgaWYgKCFfZnMpIHtcbiAgICBfZnMgPSBhd2FpdCBpbXBvcnQoXCJub2RlOmZzL3Byb21pc2VzXCIpO1xuICB9XG4gIHJldHVybiBfZnM7XG59XG5hc3luYyBmdW5jdGlvbiBwYXRoKCkge1xuICBpZiAoIV9wYXRoKSB7XG4gICAgX3BhdGggPSBhd2FpdCBpbXBvcnQoXCJub2RlOnBhdGhcIik7XG4gIH1cbiAgcmV0dXJuIF9wYXRoO1xufVxuXG50eXBlIFdyaXRlTG9ja1N0YXRlID0ge1xuICBsb2NrZWQ6IGJvb2xlYW47XG4gIHdhaXRlcnM6IEFycmF5PCgpID0+IHZvaWQ+O1xufTtcblxuZnVuY3Rpb24gY3JlYXRlV3JpdGVMb2NrKCkge1xuICBjb25zdCBsb2NrcyA9IG5ldyBNYXA8c3RyaW5nLCBXcml0ZUxvY2tTdGF0ZT4oKTtcblxuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gd2l0aFdyaXRlTG9jazxUPihvcHRzOiB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgZm46ICgpID0+IFByb21pc2U8VD47XG4gIH0pOiBQcm9taXNlPFQ+IHtcbiAgICBsZXQgc3RhdGUgPSBsb2Nrcy5nZXQob3B0cy5rZXkpO1xuICAgIGlmICghc3RhdGUpIHtcbiAgICAgIHN0YXRlID0geyBsb2NrZWQ6IGZhbHNlLCB3YWl0ZXJzOiBbXSB9O1xuICAgICAgbG9ja3Muc2V0KG9wdHMua2V5LCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmxvY2tlZCkge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgc3RhdGUud2FpdGVycy5wdXNoKHJlc29sdmUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhdGUubG9ja2VkID0gdHJ1ZTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgb3B0cy5mbigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjb25zdCBuZXh0ID0gc3RhdGUud2FpdGVycy5zaGlmdCgpO1xuICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUubG9ja2VkID0gZmFsc2U7XG4gICAgICAgIGxvY2tzLmRlbGV0ZShvcHRzLmtleSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdG9yZTxUPihkaXI6IHN0cmluZykge1xuICBjb25zdCBmaWxlUGF0aCA9IGFzeW5jIChrZXk6IHN0cmluZykgPT5cbiAgICAoYXdhaXQgcGF0aCgpKS5qb2luKGRpciwgYCR7a2V5fS5qc29uYCk7XG4gIGNvbnN0IHdpdGhXcml0ZUxvY2sgPSBjcmVhdGVXcml0ZUxvY2soKTtcblxuICByZXR1cm4ge1xuICAgIGFzeW5jIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8VCB8IG51bGw+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCAoYXdhaXQgZnMoKSkucmVhZEZpbGUoYXdhaXQgZmlsZVBhdGgoa2V5KSwgXCJ1dGYtOFwiKTtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSkgYXMgVDtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFzeW5jIHNldChrZXk6IHN0cmluZywgdmFsdWU6IFQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGF3YWl0IHdpdGhXcml0ZUxvY2soe1xuICAgICAgICBrZXksXG4gICAgICAgIGZuOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcCA9IGF3YWl0IGZpbGVQYXRoKGtleSk7XG4gICAgICAgICAgY29uc3QgeyBta2Rpciwgd3JpdGVGaWxlIH0gPSBhd2FpdCBmcygpO1xuICAgICAgICAgIGNvbnN0IHsgZGlybmFtZSB9ID0gYXdhaXQgcGF0aCgpO1xuICAgICAgICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUocCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgIGF3YWl0IHdyaXRlRmlsZShwLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgMikpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSxcbiAgICB1cGRhdGUoa2V5OiBzdHJpbmcsIHVwZGF0ZXM6IFBhcnRpYWw8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICAgIHJldHVybiB3aXRoV3JpdGVMb2NrKHtcbiAgICAgICAga2V5LFxuICAgICAgICBmbjogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHAgPSBhd2FpdCBmaWxlUGF0aChrZXkpO1xuICAgICAgICAgIGNvbnN0IHsgcmVhZEZpbGUsIG1rZGlyLCB3cml0ZUZpbGUgfSA9IGF3YWl0IGZzKCk7XG4gICAgICAgICAgY29uc3QgeyBkaXJuYW1lIH0gPSBhd2FpdCBwYXRoKCk7XG4gICAgICAgICAgbGV0IGV4aXN0aW5nOiBUO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVhZEZpbGUocCwgXCJ1dGYtOFwiKTtcbiAgICAgICAgICAgIGV4aXN0aW5nID0gSlNPTi5wYXJzZShkYXRhKSBhcyBUO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb3QgZm91bmQ6ICR7a2V5fWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB1cGRhdGVkID0geyAuLi5leGlzdGluZywgLi4udXBkYXRlcyB9O1xuICAgICAgICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUocCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgIGF3YWl0IHdyaXRlRmlsZShwLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkLCBudWxsLCAyKSk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkQWxsRnJvbURpcjxUPihkaXI6IHN0cmluZyk6IFByb21pc2U8VFtdPiB7XG4gIGNvbnN0IHsgcmVhZGRpciwgcmVhZEZpbGUgfSA9IGF3YWl0IGZzKCk7XG4gIGNvbnN0IHsgam9pbiB9ID0gYXdhaXQgcGF0aCgpO1xuICBsZXQgZmlsZXM6IHN0cmluZ1tdO1xuICB0cnkge1xuICAgIGZpbGVzID0gYXdhaXQgcmVhZGRpcihkaXIpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgY29uc3QgcmVzdWx0OiBUW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgaWYgKCFmaWxlLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlYWRGaWxlKGpvaW4oZGlyLCBmaWxlKSwgXCJ1dGYtOFwiKTtcbiAgICAgIHJlc3VsdC5wdXNoKEpTT04ucGFyc2UoZGF0YSkgYXMgVCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBza2lwIGNvcnJ1cHQgZmlsZXNcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlR2l0aWdub3JlKGRpcjogc3RyaW5nKSB7XG4gIGNvbnN0IHsgbWtkaXIsIHdyaXRlRmlsZSwgcmVhZEZpbGUgfSA9IGF3YWl0IGZzKCk7XG4gIGNvbnN0IHsgam9pbiB9ID0gYXdhaXQgcGF0aCgpO1xuICBjb25zdCBnaXRpZ25vcmVQYXRoID0gam9pbihkaXIsIFwiLmdpdGlnbm9yZVwiKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCByZWFkRmlsZShnaXRpZ25vcmVQYXRoLCBcInV0Zi04XCIpO1xuICB9IGNhdGNoIHtcbiAgICBhd2FpdCBta2RpcihkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHdyaXRlRmlsZShnaXRpZ25vcmVQYXRoLCBcIipcXG5cIik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2FsU3RvcmFnZShvcHRzPzogeyBkaXI/OiBzdHJpbmcgfSk6IFN0b3JhZ2VIYW5kbGVycyB7XG4gIGNvbnN0IGRpciA9IG9wdHM/LmRpciA/PyBcIi5hZ2VudFwiO1xuICBsZXQgZ2l0aWdub3JlUHJvbWlzZTogUHJvbWlzZTx2b2lkPiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0IHNlc3Npb25TdG9yZSA9IGNyZWF0ZVN0b3JlPFNlc3Npb24+KGAke2Rpcn0vc2Vzc2lvbmApO1xuICBjb25zdCBtZXNzYWdlU3RvcmUgPSBjcmVhdGVTdG9yZTxNZXNzYWdlPihgJHtkaXJ9L21lc3NhZ2VgKTtcbiAgY29uc3QgcGFydFN0b3JlID0gY3JlYXRlU3RvcmU8UGFydD4oYCR7ZGlyfS9wYXJ0YCk7XG4gIGNvbnN0IHNhbmRib3hTdG9yZSA9IGNyZWF0ZVN0b3JlPFNhbmRib3g+KGAke2Rpcn0vc2FuZGJveGApO1xuICBjb25zdCBzZXR1cFN0b3JlID0gY3JlYXRlU3RvcmU8U2V0dXA+KGAke2Rpcn0vc2V0dXBgKTtcbiAgY29uc3QgbWVzc2FnZURpciA9IGAke2Rpcn0vbWVzc2FnZWA7XG4gIGNvbnN0IHBhcnREaXIgPSBgJHtkaXJ9L3BhcnRgO1xuXG4gIGZ1bmN0aW9uIG9uV3JpdGU8VD4oZm46ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIWdpdGlnbm9yZVByb21pc2UpIHtcbiAgICAgIGdpdGlnbm9yZVByb21pc2UgPSBlbnN1cmVHaXRpZ25vcmUoZGlyKTtcbiAgICB9XG4gICAgcmV0dXJuIGdpdGlnbm9yZVByb21pc2UudGhlbihmbik7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIFwic2Vzc2lvbi5nZXRcIjogKHsgaWQgfSkgPT4gc2Vzc2lvblN0b3JlLmdldChpZCksXG4gICAgXCJzZXNzaW9uLnNldFwiOiAoeyBpZCwgdmFsdWUgfSkgPT5cbiAgICAgIG9uV3JpdGUoKCkgPT4gc2Vzc2lvblN0b3JlLnNldChpZCwgdmFsdWUpKSxcbiAgICBcInNlc3Npb24udXBkYXRlXCI6ICh7IGlkLCB1cGRhdGVzIH0pID0+XG4gICAgICBvbldyaXRlKCgpID0+IHNlc3Npb25TdG9yZS51cGRhdGUoaWQsIHVwZGF0ZXMpKSxcblxuICAgIFwibWVzc2FnZS5nZXRcIjogKHsgaWQgfSkgPT4gbWVzc2FnZVN0b3JlLmdldChpZCksXG4gICAgXCJtZXNzYWdlLnNldFwiOiAoeyBpZCwgdmFsdWUgfSkgPT5cbiAgICAgIG9uV3JpdGUoKCkgPT4gbWVzc2FnZVN0b3JlLnNldChpZCwgdmFsdWUpKSxcbiAgICBcIm1lc3NhZ2UudXBkYXRlXCI6ICh7IGlkLCB1cGRhdGVzIH0pID0+XG4gICAgICBvbldyaXRlKCgpID0+IG1lc3NhZ2VTdG9yZS51cGRhdGUoaWQsIHVwZGF0ZXMpKSxcbiAgICBcIm1lc3NhZ2UubGlzdEJ5U2Vzc2lvblwiOiBhc3luYyAoeyBzZXNzaW9uSWQgfSkgPT4ge1xuICAgICAgY29uc3QgYWxsID0gYXdhaXQgcmVhZEFsbEZyb21EaXI8TWVzc2FnZT4obWVzc2FnZURpcik7XG4gICAgICByZXR1cm4gYWxsLmZpbHRlcigobSkgPT4gbS5zZXNzaW9uSWQgPT09IHNlc3Npb25JZCk7XG4gICAgfSxcblxuICAgIFwicGFydC5nZXRcIjogKHsgaWQgfSkgPT4gcGFydFN0b3JlLmdldChpZCksXG4gICAgXCJwYXJ0LnNldFwiOiAoeyBpZCwgdmFsdWUgfSkgPT4gb25Xcml0ZSgoKSA9PiBwYXJ0U3RvcmUuc2V0KGlkLCB2YWx1ZSkpLFxuICAgIFwicGFydC5saXN0QnlTZXNzaW9uXCI6IGFzeW5jICh7IHNlc3Npb25JZCB9KSA9PiB7XG4gICAgICBjb25zdCBhbGwgPSBhd2FpdCByZWFkQWxsRnJvbURpcjxQYXJ0PihwYXJ0RGlyKTtcbiAgICAgIHJldHVybiBhbGwuZmlsdGVyKChwKSA9PiBwLnNlc3Npb25JZCA9PT0gc2Vzc2lvbklkKTtcbiAgICB9LFxuXG4gICAgXCJzYW5kYm94LmdldFwiOiAoeyBpZCB9KSA9PiBzYW5kYm94U3RvcmUuZ2V0KGlkKSxcbiAgICBcInNhbmRib3guc2V0XCI6ICh7IGlkLCB2YWx1ZSB9KSA9PlxuICAgICAgb25Xcml0ZSgoKSA9PiBzYW5kYm94U3RvcmUuc2V0KGlkLCB2YWx1ZSkpLFxuICAgIFwic2FuZGJveC51cGRhdGVcIjogKHsgaWQsIHVwZGF0ZXMgfSkgPT5cbiAgICAgIG9uV3JpdGUoKCkgPT4gc2FuZGJveFN0b3JlLnVwZGF0ZShpZCwgdXBkYXRlcykpLFxuXG4gICAgXCJzZXR1cC5nZXRcIjogKHsgaWQgfSkgPT4gc2V0dXBTdG9yZS5nZXQoaWQpLFxuICAgIFwic2V0dXAuc2V0XCI6ICh7IGlkLCB2YWx1ZSB9KSA9PiBvbldyaXRlKCgpID0+IHNldHVwU3RvcmUuc2V0KGlkLCB2YWx1ZSkpLFxuICB9O1xufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBzaG91bGRGYWxsYmFja1RvS1YyKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gISFwcm9jZXNzLmVudi5CTE9CX1JFQURfV1JJVEVfVE9LRU47XG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQUEsU0FBUyxzQkFBc0IsMEJBQTBCO0FBOENsRCxJQUFNLGNBQU4sTUFBTSxhQUFZO0FBQUEsRUFDdkI7QUFBQSxFQUVBLFlBQVksT0FBb0I7QUFDOUIsU0FBSyxRQUFRO0FBQUEsRUFDZjtBQUFBLEVBRUEsUUFBUSxrQkFBa0IsRUFBRSxVQUF1QjtBQUNqRCxXQUFPLEVBQUUsT0FBTyxTQUFTLE1BQU07QUFBQSxFQUNqQztBQUFBLEVBRUEsUUFBUSxvQkFBb0IsRUFBRSxNQUE4QjtBQUMxRCxXQUFPLElBQUksYUFBWSxLQUFLLEtBQUs7QUFBQSxFQUNuQztBQUFBO0FBQUEsRUFHQSxHQUFHLFVBQXlDO0FBRTFDLFdBQVEsU0FBUyxLQUFLLE1BQU0sTUFBTSxFQUFVLEtBQUssS0FBSztBQUFBLEVBQ3hEO0FBQ0Y7QUErQ0EsU0FBUyxlQUFlLEdBQTJDO0FBQ2pFLFNBQU8sT0FBTyxNQUFNO0FBQ3RCO0FBRUEsU0FBUyxpQkFBaUIsSUFBa0M7QUFDMUQsU0FBTztBQUFBLElBQ0wsU0FBUztBQUFBLE1BQ1AsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBRSxRQUFRLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFBQSxNQUM5RCxLQUFLLENBQUMs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
@@ -0,0 +1,38 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
8
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
9
+ }) : x)(function(x) {
10
+ if (typeof require !== "undefined") return require.apply(this, arguments);
11
+ throw Error('Dynamic require of "' + x + '" is not supported');
12
+ });
13
+ var __commonJS = (cb, mod) => function __require2() {
14
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
15
+ };
16
+ var __copyProps = (to, from, except, desc) => {
17
+ if (from && typeof from === "object" || typeof from === "function") {
18
+ for (let key of __getOwnPropNames(from))
19
+ if (!__hasOwnProp.call(to, key) && key !== except)
20
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
21
+ }
22
+ return to;
23
+ };
24
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
25
+ // If the importer is in node compatibility mode or this is not an ESM
26
+ // file that has been converted to a CommonJS file using a Babel-
27
+ // compatible transform (i.e. "__esModule" has not been set), then set
28
+ // "default" to the CommonJS "module.exports" for node compatibility.
29
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
30
+ mod
31
+ ));
32
+
33
+ export {
34
+ __require,
35
+ __commonJS,
36
+ __toESM
37
+ };
38
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFtdLAogICJzb3VyY2VzQ29udGVudCI6IFtdLAogICJtYXBwaW5ncyI6ICIiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,9 @@
1
+ // src/rpc/base-path.ts
2
+ function basePathForAgent(agent) {
3
+ return `/api/agents/${agent}`;
4
+ }
5
+
6
+ export {
7
+ basePathForAgent
8
+ };
9
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3JwYy9iYXNlLXBhdGgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCB0eXBlIEJhc2VQYXRoID0gYC9hcGkvYWdlbnRzL1thZ2VudF1gO1xuZXhwb3J0IHR5cGUgU2Vzc2lvblBhdGggPSBgJHtCYXNlUGF0aCB8IChzdHJpbmcgJiB7fSl9L1tzZXNzaW9uSWRdYDtcbmV4cG9ydCB0eXBlIFJlY29ubmVjdFBhdGggPSBgJHtTZXNzaW9uUGF0aCB8IChzdHJpbmcgJiB7fSl9L3JlY29ubmVjdGA7XG5leHBvcnQgdHlwZSBJbnRlcnJ1cHRQYXRoID0gYCR7U2Vzc2lvblBhdGggfCAoc3RyaW5nICYge30pfS9pbnRlcnJ1cHRgO1xuXG5leHBvcnQgdHlwZSBQYXRoID0gU2Vzc2lvblBhdGggfCBSZWNvbm5lY3RQYXRoIHwgSW50ZXJydXB0UGF0aDtcblxuZXhwb3J0IGZ1bmN0aW9uIGJhc2VQYXRoRm9yQWdlbnQoYWdlbnQ6IHN0cmluZykge1xuICByZXR1cm4gYC9hcGkvYWdlbnRzLyR7YWdlbnR9YCBhcyBjb25zdDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFPTyxTQUFTLGlCQUFpQixPQUFlO0FBQzlDLFNBQU8sZUFBZSxLQUFLO0FBQzdCOyIsCiAgIm5hbWVzIjogW10KfQo=