shopify 3.87.3 → 3.87.4

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 (125) hide show
  1. package/dist/{chunk-BANYBFYN.js → chunk-2DGV6SZL.js} +2 -2
  2. package/dist/{chunk-ACKJZVCL.js → chunk-2VDLT7AT.js} +4 -4
  3. package/dist/{chunk-K2X6UJVZ.js → chunk-5MAMHRHU.js} +5 -5
  4. package/dist/{chunk-IB6NP25Z.js → chunk-5OEN66KU.js} +3 -3
  5. package/dist/{chunk-4ELQWJMW.js → chunk-5SE32FSQ.js} +2 -2
  6. package/dist/{chunk-Q2KZZA6O.js → chunk-6RV7EPXS.js} +5 -5
  7. package/dist/{chunk-75XYQNOQ.js → chunk-73NR2QYO.js} +3 -3
  8. package/dist/{chunk-4F4IVLTB.js → chunk-B5R7IGPI.js} +2 -2
  9. package/dist/{chunk-4F4IVLTB.js.map → chunk-B5R7IGPI.js.map} +1 -1
  10. package/dist/{chunk-4L44SUG6.js → chunk-CONRF5CQ.js} +3 -3
  11. package/dist/{chunk-OOAEGWMD.js → chunk-DDZ4MRDR.js} +3 -3
  12. package/dist/{chunk-H6WW6MWB.js → chunk-E5DVKI4E.js} +4 -4
  13. package/dist/{chunk-Y2JP6WFP.js → chunk-EG6MBBEN.js} +2 -2
  14. package/dist/{chunk-BFB3EWBI.js → chunk-FXQ465D3.js} +6 -6
  15. package/dist/{chunk-D3KGAWF7.js → chunk-GBO56MTW.js} +6 -6
  16. package/dist/{chunk-6LJXPTJR.js → chunk-GXRCTOFL.js} +4 -4
  17. package/dist/{chunk-BJ2JLRYU.js → chunk-JAR2WH2P.js} +7 -7
  18. package/dist/{chunk-TKNKDDI6.js → chunk-KKHQITV4.js} +7 -7
  19. package/dist/{chunk-Z66S347F.js → chunk-LMREWIO3.js} +3 -3
  20. package/dist/{chunk-K3QUVRXP.js → chunk-M4KJ2GMX.js} +7 -7
  21. package/dist/{chunk-RJKK7K6X.js → chunk-MN5WIAIX.js} +4 -4
  22. package/dist/{chunk-NNTH6AEG.js → chunk-MQGJCYOJ.js} +3 -3
  23. package/dist/{chunk-A6E7B6XB.js → chunk-NA2JV5GP.js} +4 -4
  24. package/dist/{chunk-Z73KRL3H.js → chunk-OG4B24TL.js} +4 -4
  25. package/dist/{chunk-Z73KRL3H.js.map → chunk-OG4B24TL.js.map} +1 -1
  26. package/dist/{chunk-L3HBLUKR.js → chunk-Q5AXWB7V.js} +3 -3
  27. package/dist/{chunk-B4D6TOK6.js → chunk-RSS4DZZM.js} +2 -2
  28. package/dist/{chunk-XASA3QI4.js → chunk-SE3SBZYH.js} +10 -13
  29. package/dist/{chunk-XASA3QI4.js.map → chunk-SE3SBZYH.js.map} +2 -2
  30. package/dist/{chunk-BSSK7ILG.js → chunk-SJXCBEPN.js} +4 -4
  31. package/dist/{chunk-J73WL72Y.js → chunk-TSE5KOHV.js} +4 -4
  32. package/dist/{chunk-I752CMIK.js → chunk-UPPP4PEB.js} +5 -5
  33. package/dist/{chunk-OCWC32QS.js → chunk-VDVVCJPN.js} +2 -2
  34. package/dist/{chunk-CSO5DFF2.js → chunk-W2TEGSMR.js} +6 -6
  35. package/dist/{chunk-FBYYZLCV.js → chunk-WKBH3IKR.js} +3 -3
  36. package/dist/{chunk-BK4YVK65.js → chunk-X26FF4KZ.js} +3 -3
  37. package/dist/{chunk-NSANDJUY.js → chunk-XBNJSXFC.js} +3 -3
  38. package/dist/{chunk-YBOPHHFE.js → chunk-YLJDEDAN.js} +2 -2
  39. package/dist/{chunk-MLMRBYBI.js → chunk-ZUMEAETT.js} +2 -2
  40. package/dist/cli/commands/auth/login.js +11 -11
  41. package/dist/cli/commands/auth/login.test.js +12 -12
  42. package/dist/cli/commands/auth/logout.js +11 -11
  43. package/dist/cli/commands/auth/logout.test.js +12 -12
  44. package/dist/cli/commands/cache/clear.js +11 -11
  45. package/dist/cli/commands/debug/command-flags.js +11 -11
  46. package/dist/cli/commands/docs/generate.js +11 -11
  47. package/dist/cli/commands/docs/generate.test.js +11 -11
  48. package/dist/cli/commands/help.js +11 -11
  49. package/dist/cli/commands/kitchen-sink/async.js +12 -12
  50. package/dist/cli/commands/kitchen-sink/async.test.js +12 -12
  51. package/dist/cli/commands/kitchen-sink/index.js +14 -14
  52. package/dist/cli/commands/kitchen-sink/index.test.js +14 -14
  53. package/dist/cli/commands/kitchen-sink/prompts.js +12 -12
  54. package/dist/cli/commands/kitchen-sink/prompts.test.js +12 -12
  55. package/dist/cli/commands/kitchen-sink/static.js +12 -12
  56. package/dist/cli/commands/kitchen-sink/static.test.js +12 -12
  57. package/dist/cli/commands/notifications/generate.js +12 -12
  58. package/dist/cli/commands/notifications/list.js +12 -12
  59. package/dist/cli/commands/search.js +12 -12
  60. package/dist/cli/commands/upgrade.js +12 -12
  61. package/dist/cli/commands/version.js +12 -12
  62. package/dist/cli/commands/version.test.js +12 -12
  63. package/dist/cli/services/commands/notifications.js +7 -7
  64. package/dist/cli/services/commands/search.js +3 -3
  65. package/dist/cli/services/commands/search.test.js +3 -3
  66. package/dist/cli/services/commands/version.js +4 -4
  67. package/dist/cli/services/commands/version.test.js +5 -5
  68. package/dist/cli/services/kitchen-sink/async.js +3 -3
  69. package/dist/cli/services/kitchen-sink/prompts.js +3 -3
  70. package/dist/cli/services/kitchen-sink/static.js +3 -3
  71. package/dist/cli/services/upgrade.js +4 -4
  72. package/dist/cli/services/upgrade.test.js +5 -5
  73. package/dist/{custom-oclif-loader-EHUMDLZH.js → custom-oclif-loader-FGHBF34H.js} +3 -3
  74. package/dist/{error-handler-TO5BVWHB.js → error-handler-REZ4JHHT.js} +9 -9
  75. package/dist/hooks/postrun.js +8 -8
  76. package/dist/hooks/prerun.js +8 -8
  77. package/dist/index.js +35 -35
  78. package/dist/{local-CL3CXR56.js → local-YIKMWXQ7.js} +3 -3
  79. package/dist/{node-package-manager-HD4DHKA3.js → node-package-manager-RMBDMVA4.js} +4 -4
  80. package/dist/{path-COZT77T2.js → path-GB4VIEM6.js} +2 -2
  81. package/dist/tsconfig.tsbuildinfo +1 -1
  82. package/dist/{ui-5UW2YC2R.js → ui-5WUSNUER.js} +3 -3
  83. package/dist/{workerd-4WLENU33.js → workerd-H7KWPFBD.js} +12 -12
  84. package/oclif.manifest.json +1 -1
  85. package/package.json +6 -6
  86. /package/dist/{chunk-BANYBFYN.js.map → chunk-2DGV6SZL.js.map} +0 -0
  87. /package/dist/{chunk-ACKJZVCL.js.map → chunk-2VDLT7AT.js.map} +0 -0
  88. /package/dist/{chunk-K2X6UJVZ.js.map → chunk-5MAMHRHU.js.map} +0 -0
  89. /package/dist/{chunk-IB6NP25Z.js.map → chunk-5OEN66KU.js.map} +0 -0
  90. /package/dist/{chunk-4ELQWJMW.js.map → chunk-5SE32FSQ.js.map} +0 -0
  91. /package/dist/{chunk-Q2KZZA6O.js.map → chunk-6RV7EPXS.js.map} +0 -0
  92. /package/dist/{chunk-75XYQNOQ.js.map → chunk-73NR2QYO.js.map} +0 -0
  93. /package/dist/{chunk-4L44SUG6.js.map → chunk-CONRF5CQ.js.map} +0 -0
  94. /package/dist/{chunk-OOAEGWMD.js.map → chunk-DDZ4MRDR.js.map} +0 -0
  95. /package/dist/{chunk-H6WW6MWB.js.map → chunk-E5DVKI4E.js.map} +0 -0
  96. /package/dist/{chunk-Y2JP6WFP.js.map → chunk-EG6MBBEN.js.map} +0 -0
  97. /package/dist/{chunk-BFB3EWBI.js.map → chunk-FXQ465D3.js.map} +0 -0
  98. /package/dist/{chunk-D3KGAWF7.js.map → chunk-GBO56MTW.js.map} +0 -0
  99. /package/dist/{chunk-6LJXPTJR.js.map → chunk-GXRCTOFL.js.map} +0 -0
  100. /package/dist/{chunk-BJ2JLRYU.js.map → chunk-JAR2WH2P.js.map} +0 -0
  101. /package/dist/{chunk-TKNKDDI6.js.map → chunk-KKHQITV4.js.map} +0 -0
  102. /package/dist/{chunk-Z66S347F.js.map → chunk-LMREWIO3.js.map} +0 -0
  103. /package/dist/{chunk-K3QUVRXP.js.map → chunk-M4KJ2GMX.js.map} +0 -0
  104. /package/dist/{chunk-RJKK7K6X.js.map → chunk-MN5WIAIX.js.map} +0 -0
  105. /package/dist/{chunk-NNTH6AEG.js.map → chunk-MQGJCYOJ.js.map} +0 -0
  106. /package/dist/{chunk-A6E7B6XB.js.map → chunk-NA2JV5GP.js.map} +0 -0
  107. /package/dist/{chunk-L3HBLUKR.js.map → chunk-Q5AXWB7V.js.map} +0 -0
  108. /package/dist/{chunk-B4D6TOK6.js.map → chunk-RSS4DZZM.js.map} +0 -0
  109. /package/dist/{chunk-BSSK7ILG.js.map → chunk-SJXCBEPN.js.map} +0 -0
  110. /package/dist/{chunk-J73WL72Y.js.map → chunk-TSE5KOHV.js.map} +0 -0
  111. /package/dist/{chunk-I752CMIK.js.map → chunk-UPPP4PEB.js.map} +0 -0
  112. /package/dist/{chunk-OCWC32QS.js.map → chunk-VDVVCJPN.js.map} +0 -0
  113. /package/dist/{chunk-CSO5DFF2.js.map → chunk-W2TEGSMR.js.map} +0 -0
  114. /package/dist/{chunk-FBYYZLCV.js.map → chunk-WKBH3IKR.js.map} +0 -0
  115. /package/dist/{chunk-BK4YVK65.js.map → chunk-X26FF4KZ.js.map} +0 -0
  116. /package/dist/{chunk-NSANDJUY.js.map → chunk-XBNJSXFC.js.map} +0 -0
  117. /package/dist/{chunk-YBOPHHFE.js.map → chunk-YLJDEDAN.js.map} +0 -0
  118. /package/dist/{chunk-MLMRBYBI.js.map → chunk-ZUMEAETT.js.map} +0 -0
  119. /package/dist/{custom-oclif-loader-EHUMDLZH.js.map → custom-oclif-loader-FGHBF34H.js.map} +0 -0
  120. /package/dist/{error-handler-TO5BVWHB.js.map → error-handler-REZ4JHHT.js.map} +0 -0
  121. /package/dist/{local-CL3CXR56.js.map → local-YIKMWXQ7.js.map} +0 -0
  122. /package/dist/{node-package-manager-HD4DHKA3.js.map → node-package-manager-RMBDMVA4.js.map} +0 -0
  123. /package/dist/{path-COZT77T2.js.map → path-GB4VIEM6.js.map} +0 -0
  124. /package/dist/{ui-5UW2YC2R.js.map → ui-5WUSNUER.js.map} +0 -0
  125. /package/dist/{workerd-4WLENU33.js.map → workerd-H7KWPFBD.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../node_modules/.pnpm/network-interfaces@1.1.0/node_modules/network-interfaces/index.js", "../../../node_modules/.pnpm/deepmerge@4.3.1/node_modules/deepmerge/dist/cjs.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseAssignValue.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_assignValue.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseSet.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_basePickBy.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getPrototype.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getSymbolsIn.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_nativeKeysIn.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseKeysIn.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/keysIn.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getAllKeysIn.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/pickBy.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/mapValues.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isEqual.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/last.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/differenceWith.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/fromPairs.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseToPairs.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_setToPairs.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_createToPairs.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/toPairs.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/set.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseSlice.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_parent.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseUnset.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/unset.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isEmpty.js", "../../../node_modules/.pnpm/bottleneck@2.19.5/node_modules/bottleneck/lib/parser.js", "../../../node_modules/.pnpm/bottleneck@2.19.5/node_modules/bottleneck/lib/DLList.js", "../../../node_modules/.pnpm/bottleneck@2.19.5/node_modules/bottleneck/lib/Events.js", "../../../node_modules/.pnpm/bottleneck@2.19.5/node_modules/bottleneck/lib/Queues.js", "../../../node_modules/.pnpm/bottleneck@2.19.5/node_modules/bottleneck/lib/BottleneckError.js", "../../../node_modules/.pnpm/bottleneck@2.19.5/node_modules/bottleneck/lib/Job.js", "../../../node_modules/.pnpm/bottleneck@2.19.5/node_modules/bottleneck/lib/LocalDatastore.js", "../../../node_modules/.pnpm/bottleneck@2.19.5/node_modules/bottleneck/lib/lua.json", "../../../node_modules/.pnpm/bottleneck@2.19.5/node_modules/bottleneck/lib/Scripts.js", "../../../node_modules/.pnpm/bottleneck@2.19.5/node_modules/bottleneck/lib/RedisConnection.js", "../../../node_modules/.pnpm/bottleneck@2.19.5/node_modules/bottleneck/lib/IORedisConnection.js", "../../../node_modules/.pnpm/bottleneck@2.19.5/node_modules/bottleneck/lib/RedisDatastore.js", "../../../node_modules/.pnpm/bottleneck@2.19.5/node_modules/bottleneck/lib/States.js", "../../../node_modules/.pnpm/bottleneck@2.19.5/node_modules/bottleneck/lib/Sync.js", "../../../node_modules/.pnpm/bottleneck@2.19.5/node_modules/bottleneck/lib/version.json", "../../../node_modules/.pnpm/bottleneck@2.19.5/node_modules/bottleneck/lib/Group.js", "../../../node_modules/.pnpm/bottleneck@2.19.5/node_modules/bottleneck/lib/Batcher.js", "../../../node_modules/.pnpm/bottleneck@2.19.5/node_modules/bottleneck/lib/Bottleneck.js", "../../../node_modules/.pnpm/bottleneck@2.19.5/node_modules/bottleneck/lib/index.js", "../../cli-kit/src/private/node/context/service.ts", "../../cli-kit/src/public/node/session.ts", "../../cli-kit/src/private/node/session/store.ts", "../../cli-kit/src/private/node/session/schema.ts", "../../cli-kit/src/public/node/context/fqdn.ts", "../../cli-kit/src/public/node/vendor/dev_server/index.ts", "../../cli-kit/src/public/node/vendor/dev_server/env.ts", "../../cli-kit/src/public/node/vendor/dev_server/dev-server.ts", "../../cli-kit/src/public/node/vendor/dev_server/dev-server-2024.ts", "../../cli-kit/src/public/node/vendor/dev_server/network/index.ts", "../../cli-kit/src/public/node/vendor/dev_server/network/host.ts", "../../cli-kit/src/public/node/vendor/dev_server/dev-server-2016.ts", "../../cli-kit/src/private/node/session/exchange.ts", "../../cli-kit/src/private/node/session/identity.ts", "../../cli-kit/src/private/node/session/scopes.ts", "../../cli-kit/src/public/node/result.ts", "../../cli-kit/src/private/node/session.ts", "../../cli-kit/src/private/node/session/validate.ts", "../../cli-kit/src/private/node/session/device-authorization.ts", "../../cli-kit/src/private/node/api/rest.ts", "../../cli-kit/src/private/node/api/graphql/business-platform-destinations/user-email.ts", "../../cli-kit/src/public/common/object.ts", "../../cli-kit/src/private/common/array.ts", "../../cli-kit/src/public/node/api/business-platform.ts", "../../cli-kit/src/public/node/api/graphql.ts", "../../cli-kit/src/private/node/api/graphql.ts", "../../cli-kit/src/private/node/request-ids.ts", "../../cli-kit/src/public/node/api/partners.ts", "../../cli-kit/src/public/node/api/utilities.ts", "../../cli-kit/src/private/node/context/deprecations-store.ts", "../../../node_modules/.pnpm/jose@5.9.6/node_modules/jose/dist/node/esm/index.js", "../../../node_modules/.pnpm/jose@5.9.6/node_modules/jose/dist/node/esm/runtime/base64url.js", "../../../node_modules/.pnpm/jose@5.9.6/node_modules/jose/dist/node/esm/lib/buffer_utils.js", "../../../node_modules/.pnpm/jose@5.9.6/node_modules/jose/dist/node/esm/util/errors.js", "../../../node_modules/.pnpm/jose@5.9.6/node_modules/jose/dist/node/esm/lib/is_object.js", "../../../node_modules/.pnpm/jose@5.9.6/node_modules/jose/dist/node/esm/util/base64url.js", "../../../node_modules/.pnpm/jose@5.9.6/node_modules/jose/dist/node/esm/util/decode_jwt.js", "../../cli-kit/src/private/node/analytics.ts"],
4
- "sourcesContent": ["'use strict';\n\nconst os = require('os');\n\n\nfunction isValid(address, options) {\n\tif (typeof options.internal === 'boolean' && address.internal !== options.internal) {\n\t\treturn false;\n\t}\n\n\tif (options.ipVersion === 4 && address.family !== 'IPv4') {\n\t\treturn false;\n\t}\n\n\tif (options.ipVersion === 6 && address.family !== 'IPv6') {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\n\nfunction findAddresses(interfaceName, options = {}) {\n\tconst addresses = os.networkInterfaces()[interfaceName];\n\tif (!addresses) {\n\t\tthrow new Error(`Network interface \"${interfaceName}\" does not exist`);\n\t}\n\n\tconst result = [];\n\n\n\tfor (const address of addresses) {\n\t\tif (isValid(address, options)) {\n\t\t\tresult.push(address);\n\t\t}\n\t}\n\n\treturn result;\n}\n\n\n/**\n * Returns an IP address on the given interface name, filtered by the given options\n *\n * @param {string} interfaceName\n * @param {Object} [options]\n * @param {boolean} [options.internal] If given, returns only internal addresses if true, or only external if false\n * @param {integer} [options.ipVersion] If given, returns only addresses who match this IP version (4 or 6)\n * @returns {string} The first IP address found\n */\nexports.toIp = function (interfaceName, options) {\n\tconst addresses = findAddresses(interfaceName, options);\n\n\tif (addresses.length === 0) {\n\t\tthrow new Error(`No suitable IP address found on interface \"${interfaceName}\"`);\n\t}\n\n\treturn addresses[0].address;\n};\n\n\n/**\n * Returns all IP addresses on the given interface name, filtered by the given options\n *\n * @param {string} interfaceName\n * @param {Object} [options]\n * @param {boolean} [options.internal] If given, returns only internal addresses if true, or only external if false\n * @param {integer} [options.ipVersion] If given, returns only addresses who match this IP version (4 or 6)\n * @returns {string[]} All matching IP addresses\n */\nexports.toIps = function (interfaceName, options) {\n\treturn findAddresses(interfaceName, options).map((address) => address.address);\n};\n\n\n/**\n * Returns a network interface name for the given IP address, filtered by the given options\n *\n * @param {string} ip\n * @param {Object} [options]\n * @param {boolean} [options.internal] If given, only evaluates internal addresses if true, or only external if false\n * @param {integer} [options.ipVersion] If given, only evaluates addresses who match this IP version (4 or 6)\n * @returns {string} The interface name that the given IP is bound to\n */\nexports.fromIp = function (ip, options) {\n\tconst interfaces = os.networkInterfaces();\n\tconst interfaceNames = Object.keys(interfaces);\n\n\tfor (const interfaceName of interfaceNames) {\n\t\tfor (const address of interfaces[interfaceName]) {\n\t\t\tif (address.address === ip && isValid(address, options)) {\n\t\t\t\treturn interfaceName;\n\t\t\t}\n\t\t}\n\t}\n\n\tthrow new Error(`No suitable interfaces were found with IP address \"${ip}\"`);\n};\n\n\n/**\n * Returns the first network interface name that contains at least one IP address that matches the given options\n *\n * @param {Object} [options]\n * @param {boolean} [options.internal] If given, only evaluates internal addresses if true, or only external if false\n * @param {integer} [options.ipVersion] If given, only evaluates addresses who match this IP version (4 or 6)\n * @returns {string} The matching interface name\n */\nexports.getInterface = function (options) {\n\tconst interfaces = os.networkInterfaces();\n\tconst interfaceNames = Object.keys(interfaces);\n\n\tfor (const interfaceName of interfaceNames) {\n\t\tif (findAddresses(interfaceName, options).length > 0) {\n\t\t\treturn interfaceName;\n\t\t}\n\t}\n\n\tthrow new Error(`No suitable interfaces were found`);\n};\n\n\n/**\n * Returns all network interface names that contain at least one IP address that matches the given options\n *\n * @param {Object} [options]\n * @param {boolean} [options.internal] If given, only evaluates internal addresses if true, or only external if false\n * @param {integer} [options.ipVersion] If given, only evaluates addresses who match this IP version (4 or 6)\n * @returns {string[]} The matching interface names\n */\nexports.getInterfaces = function (options) {\n\tconst interfaces = os.networkInterfaces();\n\tconst interfaceNames = Object.keys(interfaces);\n\n\tconst result = [];\n\n\tfor (const interfaceName of interfaceNames) {\n\t\tif (findAddresses(interfaceName, options).length > 0) {\n\t\t\tresult.push(interfaceName);\n\t\t}\n\t}\n\n\treturn result;\n};\n", "'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn Object.propertyIsEnumerable.call(target, symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n", "var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n", "var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n", "var assignValue = require('./_assignValue'),\n castPath = require('./_castPath'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nmodule.exports = baseSet;\n", "var baseGet = require('./_baseGet'),\n baseSet = require('./_baseSet'),\n castPath = require('./_castPath');\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n}\n\nmodule.exports = basePickBy;\n", "var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n", "var arrayPush = require('./_arrayPush'),\n getPrototype = require('./_getPrototype'),\n getSymbols = require('./_getSymbols'),\n stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nmodule.exports = getSymbolsIn;\n", "/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = nativeKeysIn;\n", "var isObject = require('./isObject'),\n isPrototype = require('./_isPrototype'),\n nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeysIn;\n", "var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeysIn = require('./_baseKeysIn'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n", "var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbolsIn = require('./_getSymbolsIn'),\n keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n", "var arrayMap = require('./_arrayMap'),\n baseIteratee = require('./_baseIteratee'),\n basePickBy = require('./_basePickBy'),\n getAllKeysIn = require('./_getAllKeysIn');\n\n/**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\nfunction pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = baseIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n}\n\nmodule.exports = pickBy;\n", "var baseAssignValue = require('./_baseAssignValue'),\n baseForOwn = require('./_baseForOwn'),\n baseIteratee = require('./_baseIteratee');\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n var result = {};\n iteratee = baseIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n}\n\nmodule.exports = mapValues;\n", "var baseIsEqual = require('./_baseIsEqual');\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nmodule.exports = isEqual;\n", "/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nmodule.exports = last;\n", "var baseDifference = require('./_baseDifference'),\n baseFlatten = require('./_baseFlatten'),\n baseRest = require('./_baseRest'),\n isArrayLikeObject = require('./isArrayLikeObject'),\n last = require('./last');\n\n/**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\nvar differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n});\n\nmodule.exports = differenceWith;\n", "/**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\nfunction fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n}\n\nmodule.exports = fromPairs;\n", "var arrayMap = require('./_arrayMap');\n\n/**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\nfunction baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n}\n\nmodule.exports = baseToPairs;\n", "/**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\nfunction setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n}\n\nmodule.exports = setToPairs;\n", "var baseToPairs = require('./_baseToPairs'),\n getTag = require('./_getTag'),\n mapToArray = require('./_mapToArray'),\n setToPairs = require('./_setToPairs');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\nfunction createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n}\n\nmodule.exports = createToPairs;\n", "var createToPairs = require('./_createToPairs'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\nvar toPairs = createToPairs(keys);\n\nmodule.exports = toPairs;\n", "var baseSet = require('./_baseSet');\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n}\n\nmodule.exports = set;\n", "/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nmodule.exports = baseSlice;\n", "var baseGet = require('./_baseGet'),\n baseSlice = require('./_baseSlice');\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nmodule.exports = parent;\n", "var castPath = require('./_castPath'),\n last = require('./last'),\n parent = require('./_parent'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\nfunction baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n}\n\nmodule.exports = baseUnset;\n", "var baseUnset = require('./_baseUnset');\n\n/**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\nfunction unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n}\n\nmodule.exports = unset;\n", "var baseKeys = require('./_baseKeys'),\n getTag = require('./_getTag'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isArrayLike = require('./isArrayLike'),\n isBuffer = require('./isBuffer'),\n isPrototype = require('./_isPrototype'),\n isTypedArray = require('./isTypedArray');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nmodule.exports = isEmpty;\n", "\"use strict\";\n\nexports.load = function (received, defaults, onto = {}) {\n var k, ref, v;\n\n for (k in defaults) {\n v = defaults[k];\n onto[k] = (ref = received[k]) != null ? ref : v;\n }\n\n return onto;\n};\n\nexports.overwrite = function (received, defaults, onto = {}) {\n var k, v;\n\n for (k in received) {\n v = received[k];\n\n if (defaults[k] !== void 0) {\n onto[k] = v;\n }\n }\n\n return onto;\n};", "\"use strict\";\n\nvar DLList;\nDLList = class DLList {\n constructor(incr, decr) {\n this.incr = incr;\n this.decr = decr;\n this._first = null;\n this._last = null;\n this.length = 0;\n }\n\n push(value) {\n var node;\n this.length++;\n\n if (typeof this.incr === \"function\") {\n this.incr();\n }\n\n node = {\n value,\n prev: this._last,\n next: null\n };\n\n if (this._last != null) {\n this._last.next = node;\n this._last = node;\n } else {\n this._first = this._last = node;\n }\n\n return void 0;\n }\n\n shift() {\n var value;\n\n if (this._first == null) {\n return;\n } else {\n this.length--;\n\n if (typeof this.decr === \"function\") {\n this.decr();\n }\n }\n\n value = this._first.value;\n\n if ((this._first = this._first.next) != null) {\n this._first.prev = null;\n } else {\n this._last = null;\n }\n\n return value;\n }\n\n first() {\n if (this._first != null) {\n return this._first.value;\n }\n }\n\n getArray() {\n var node, ref, results;\n node = this._first;\n results = [];\n\n while (node != null) {\n results.push((ref = node, node = node.next, ref.value));\n }\n\n return results;\n }\n\n forEachShift(cb) {\n var node;\n node = this.shift();\n\n while (node != null) {\n cb(node), node = this.shift();\n }\n\n return void 0;\n }\n\n debug() {\n var node, ref, ref1, ref2, results;\n node = this._first;\n results = [];\n\n while (node != null) {\n results.push((ref = node, node = node.next, {\n value: ref.value,\n prev: (ref1 = ref.prev) != null ? ref1.value : void 0,\n next: (ref2 = ref.next) != null ? ref2.value : void 0\n }));\n }\n\n return results;\n }\n\n};\nmodule.exports = DLList;", "\"use strict\";\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar Events;\nEvents = class Events {\n constructor(instance) {\n this.instance = instance;\n this._events = {};\n\n if (this.instance.on != null || this.instance.once != null || this.instance.removeAllListeners != null) {\n throw new Error(\"An Emitter already exists for this object\");\n }\n\n this.instance.on = (name, cb) => {\n return this._addListener(name, \"many\", cb);\n };\n\n this.instance.once = (name, cb) => {\n return this._addListener(name, \"once\", cb);\n };\n\n this.instance.removeAllListeners = (name = null) => {\n if (name != null) {\n return delete this._events[name];\n } else {\n return this._events = {};\n }\n };\n }\n\n _addListener(name, status, cb) {\n var base;\n\n if ((base = this._events)[name] == null) {\n base[name] = [];\n }\n\n this._events[name].push({\n cb,\n status\n });\n\n return this.instance;\n }\n\n listenerCount(name) {\n if (this._events[name] != null) {\n return this._events[name].length;\n } else {\n return 0;\n }\n }\n\n trigger(name, ...args) {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n var e, promises;\n\n try {\n if (name !== \"debug\") {\n _this.trigger(\"debug\", `Event triggered: ${name}`, args);\n }\n\n if (_this._events[name] == null) {\n return;\n }\n\n _this._events[name] = _this._events[name].filter(function (listener) {\n return listener.status !== \"none\";\n });\n promises = _this._events[name].map(\n /*#__PURE__*/\n function () {\n var _ref = _asyncToGenerator(function* (listener) {\n var e, returned;\n\n if (listener.status === \"none\") {\n return;\n }\n\n if (listener.status === \"once\") {\n listener.status = \"none\";\n }\n\n try {\n returned = typeof listener.cb === \"function\" ? listener.cb(...args) : void 0;\n\n if (typeof (returned != null ? returned.then : void 0) === \"function\") {\n return yield returned;\n } else {\n return returned;\n }\n } catch (error) {\n e = error;\n\n if (\"name\" !== \"error\") {\n _this.trigger(\"error\", e);\n }\n\n return null;\n }\n });\n\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }());\n return (yield Promise.all(promises)).find(function (x) {\n return x != null;\n });\n } catch (error) {\n e = error;\n\n if (\"name\" !== \"error\") {\n _this.trigger(\"error\", e);\n }\n\n return null;\n }\n })();\n }\n\n};\nmodule.exports = Events;", "\"use strict\";\n\nvar DLList, Events, Queues;\nDLList = require(\"./DLList\");\nEvents = require(\"./Events\");\nQueues = class Queues {\n constructor(num_priorities) {\n var i;\n this.Events = new Events(this);\n this._length = 0;\n\n this._lists = function () {\n var j, ref, results;\n results = [];\n\n for (i = j = 1, ref = num_priorities; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {\n results.push(new DLList(() => {\n return this.incr();\n }, () => {\n return this.decr();\n }));\n }\n\n return results;\n }.call(this);\n }\n\n incr() {\n if (this._length++ === 0) {\n return this.Events.trigger(\"leftzero\");\n }\n }\n\n decr() {\n if (--this._length === 0) {\n return this.Events.trigger(\"zero\");\n }\n }\n\n push(job) {\n return this._lists[job.options.priority].push(job);\n }\n\n queued(priority) {\n if (priority != null) {\n return this._lists[priority].length;\n } else {\n return this._length;\n }\n }\n\n shiftAll(fn) {\n return this._lists.forEach(function (list) {\n return list.forEachShift(fn);\n });\n }\n\n getFirst(arr = this._lists) {\n var j, len, list;\n\n for (j = 0, len = arr.length; j < len; j++) {\n list = arr[j];\n\n if (list.length > 0) {\n return list;\n }\n }\n\n return [];\n }\n\n shiftLastFrom(priority) {\n return this.getFirst(this._lists.slice(priority).reverse()).shift();\n }\n\n};\nmodule.exports = Queues;", "\"use strict\";\n\nvar BottleneckError;\nBottleneckError = class BottleneckError extends Error {};\nmodule.exports = BottleneckError;", "\"use strict\";\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar BottleneckError, DEFAULT_PRIORITY, Job, NUM_PRIORITIES, parser;\nNUM_PRIORITIES = 10;\nDEFAULT_PRIORITY = 5;\nparser = require(\"./parser\");\nBottleneckError = require(\"./BottleneckError\");\nJob = class Job {\n constructor(task, args, options, jobDefaults, rejectOnDrop, Events, _states, Promise) {\n this.task = task;\n this.args = args;\n this.rejectOnDrop = rejectOnDrop;\n this.Events = Events;\n this._states = _states;\n this.Promise = Promise;\n this.options = parser.load(options, jobDefaults);\n this.options.priority = this._sanitizePriority(this.options.priority);\n\n if (this.options.id === jobDefaults.id) {\n this.options.id = `${this.options.id}-${this._randomIndex()}`;\n }\n\n this.promise = new this.Promise((_resolve, _reject) => {\n this._resolve = _resolve;\n this._reject = _reject;\n });\n this.retryCount = 0;\n }\n\n _sanitizePriority(priority) {\n var sProperty;\n sProperty = ~~priority !== priority ? DEFAULT_PRIORITY : priority;\n\n if (sProperty < 0) {\n return 0;\n } else if (sProperty > NUM_PRIORITIES - 1) {\n return NUM_PRIORITIES - 1;\n } else {\n return sProperty;\n }\n }\n\n _randomIndex() {\n return Math.random().toString(36).slice(2);\n }\n\n doDrop({\n error,\n message = \"This job has been dropped by Bottleneck\"\n } = {}) {\n if (this._states.remove(this.options.id)) {\n if (this.rejectOnDrop) {\n this._reject(error != null ? error : new BottleneckError(message));\n }\n\n this.Events.trigger(\"dropped\", {\n args: this.args,\n options: this.options,\n task: this.task,\n promise: this.promise\n });\n return true;\n } else {\n return false;\n }\n }\n\n _assertStatus(expected) {\n var status;\n status = this._states.jobStatus(this.options.id);\n\n if (!(status === expected || expected === \"DONE\" && status === null)) {\n throw new BottleneckError(`Invalid job status ${status}, expected ${expected}. Please open an issue at https://github.com/SGrondin/bottleneck/issues`);\n }\n }\n\n doReceive() {\n this._states.start(this.options.id);\n\n return this.Events.trigger(\"received\", {\n args: this.args,\n options: this.options\n });\n }\n\n doQueue(reachedHWM, blocked) {\n this._assertStatus(\"RECEIVED\");\n\n this._states.next(this.options.id);\n\n return this.Events.trigger(\"queued\", {\n args: this.args,\n options: this.options,\n reachedHWM,\n blocked\n });\n }\n\n doRun() {\n if (this.retryCount === 0) {\n this._assertStatus(\"QUEUED\");\n\n this._states.next(this.options.id);\n } else {\n this._assertStatus(\"EXECUTING\");\n }\n\n return this.Events.trigger(\"scheduled\", {\n args: this.args,\n options: this.options\n });\n }\n\n doExecute(chained, clearGlobalState, run, free) {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n var error, eventInfo, passed;\n\n if (_this.retryCount === 0) {\n _this._assertStatus(\"RUNNING\");\n\n _this._states.next(_this.options.id);\n } else {\n _this._assertStatus(\"EXECUTING\");\n }\n\n eventInfo = {\n args: _this.args,\n options: _this.options,\n retryCount: _this.retryCount\n };\n\n _this.Events.trigger(\"executing\", eventInfo);\n\n try {\n passed = yield chained != null ? chained.schedule(_this.options, _this.task, ..._this.args) : _this.task(..._this.args);\n\n if (clearGlobalState()) {\n _this.doDone(eventInfo);\n\n yield free(_this.options, eventInfo);\n\n _this._assertStatus(\"DONE\");\n\n return _this._resolve(passed);\n }\n } catch (error1) {\n error = error1;\n return _this._onFailure(error, eventInfo, clearGlobalState, run, free);\n }\n })();\n }\n\n doExpire(clearGlobalState, run, free) {\n var error, eventInfo;\n\n if (this._states.jobStatus(this.options.id === \"RUNNING\")) {\n this._states.next(this.options.id);\n }\n\n this._assertStatus(\"EXECUTING\");\n\n eventInfo = {\n args: this.args,\n options: this.options,\n retryCount: this.retryCount\n };\n error = new BottleneckError(`This job timed out after ${this.options.expiration} ms.`);\n return this._onFailure(error, eventInfo, clearGlobalState, run, free);\n }\n\n _onFailure(error, eventInfo, clearGlobalState, run, free) {\n var _this2 = this;\n\n return _asyncToGenerator(function* () {\n var retry, retryAfter;\n\n if (clearGlobalState()) {\n retry = yield _this2.Events.trigger(\"failed\", error, eventInfo);\n\n if (retry != null) {\n retryAfter = ~~retry;\n\n _this2.Events.trigger(\"retry\", `Retrying ${_this2.options.id} after ${retryAfter} ms`, eventInfo);\n\n _this2.retryCount++;\n return run(retryAfter);\n } else {\n _this2.doDone(eventInfo);\n\n yield free(_this2.options, eventInfo);\n\n _this2._assertStatus(\"DONE\");\n\n return _this2._reject(error);\n }\n }\n })();\n }\n\n doDone(eventInfo) {\n this._assertStatus(\"EXECUTING\");\n\n this._states.next(this.options.id);\n\n return this.Events.trigger(\"done\", eventInfo);\n }\n\n};\nmodule.exports = Job;", "\"use strict\";\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar BottleneckError, LocalDatastore, parser;\nparser = require(\"./parser\");\nBottleneckError = require(\"./BottleneckError\");\nLocalDatastore = class LocalDatastore {\n constructor(instance, storeOptions, storeInstanceOptions) {\n this.instance = instance;\n this.storeOptions = storeOptions;\n this.clientId = this.instance._randomIndex();\n parser.load(storeInstanceOptions, storeInstanceOptions, this);\n this._nextRequest = this._lastReservoirRefresh = this._lastReservoirIncrease = Date.now();\n this._running = 0;\n this._done = 0;\n this._unblockTime = 0;\n this.ready = this.Promise.resolve();\n this.clients = {};\n\n this._startHeartbeat();\n }\n\n _startHeartbeat() {\n var base;\n\n if (this.heartbeat == null && (this.storeOptions.reservoirRefreshInterval != null && this.storeOptions.reservoirRefreshAmount != null || this.storeOptions.reservoirIncreaseInterval != null && this.storeOptions.reservoirIncreaseAmount != null)) {\n return typeof (base = this.heartbeat = setInterval(() => {\n var amount, incr, maximum, now, reservoir;\n now = Date.now();\n\n if (this.storeOptions.reservoirRefreshInterval != null && now >= this._lastReservoirRefresh + this.storeOptions.reservoirRefreshInterval) {\n this._lastReservoirRefresh = now;\n this.storeOptions.reservoir = this.storeOptions.reservoirRefreshAmount;\n\n this.instance._drainAll(this.computeCapacity());\n }\n\n if (this.storeOptions.reservoirIncreaseInterval != null && now >= this._lastReservoirIncrease + this.storeOptions.reservoirIncreaseInterval) {\n var _this$storeOptions = this.storeOptions;\n amount = _this$storeOptions.reservoirIncreaseAmount;\n maximum = _this$storeOptions.reservoirIncreaseMaximum;\n reservoir = _this$storeOptions.reservoir;\n this._lastReservoirIncrease = now;\n incr = maximum != null ? Math.min(amount, maximum - reservoir) : amount;\n\n if (incr > 0) {\n this.storeOptions.reservoir += incr;\n return this.instance._drainAll(this.computeCapacity());\n }\n }\n }, this.heartbeatInterval)).unref === \"function\" ? base.unref() : void 0;\n } else {\n return clearInterval(this.heartbeat);\n }\n }\n\n __publish__(message) {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n yield _this.yieldLoop();\n return _this.instance.Events.trigger(\"message\", message.toString());\n })();\n }\n\n __disconnect__(flush) {\n var _this2 = this;\n\n return _asyncToGenerator(function* () {\n yield _this2.yieldLoop();\n clearInterval(_this2.heartbeat);\n return _this2.Promise.resolve();\n })();\n }\n\n yieldLoop(t = 0) {\n return new this.Promise(function (resolve, reject) {\n return setTimeout(resolve, t);\n });\n }\n\n computePenalty() {\n var ref;\n return (ref = this.storeOptions.penalty) != null ? ref : 15 * this.storeOptions.minTime || 5000;\n }\n\n __updateSettings__(options) {\n var _this3 = this;\n\n return _asyncToGenerator(function* () {\n yield _this3.yieldLoop();\n parser.overwrite(options, options, _this3.storeOptions);\n\n _this3._startHeartbeat();\n\n _this3.instance._drainAll(_this3.computeCapacity());\n\n return true;\n })();\n }\n\n __running__() {\n var _this4 = this;\n\n return _asyncToGenerator(function* () {\n yield _this4.yieldLoop();\n return _this4._running;\n })();\n }\n\n __queued__() {\n var _this5 = this;\n\n return _asyncToGenerator(function* () {\n yield _this5.yieldLoop();\n return _this5.instance.queued();\n })();\n }\n\n __done__() {\n var _this6 = this;\n\n return _asyncToGenerator(function* () {\n yield _this6.yieldLoop();\n return _this6._done;\n })();\n }\n\n __groupCheck__(time) {\n var _this7 = this;\n\n return _asyncToGenerator(function* () {\n yield _this7.yieldLoop();\n return _this7._nextRequest + _this7.timeout < time;\n })();\n }\n\n computeCapacity() {\n var maxConcurrent, reservoir;\n var _this$storeOptions2 = this.storeOptions;\n maxConcurrent = _this$storeOptions2.maxConcurrent;\n reservoir = _this$storeOptions2.reservoir;\n\n if (maxConcurrent != null && reservoir != null) {\n return Math.min(maxConcurrent - this._running, reservoir);\n } else if (maxConcurrent != null) {\n return maxConcurrent - this._running;\n } else if (reservoir != null) {\n return reservoir;\n } else {\n return null;\n }\n }\n\n conditionsCheck(weight) {\n var capacity;\n capacity = this.computeCapacity();\n return capacity == null || weight <= capacity;\n }\n\n __incrementReservoir__(incr) {\n var _this8 = this;\n\n return _asyncToGenerator(function* () {\n var reservoir;\n yield _this8.yieldLoop();\n reservoir = _this8.storeOptions.reservoir += incr;\n\n _this8.instance._drainAll(_this8.computeCapacity());\n\n return reservoir;\n })();\n }\n\n __currentReservoir__() {\n var _this9 = this;\n\n return _asyncToGenerator(function* () {\n yield _this9.yieldLoop();\n return _this9.storeOptions.reservoir;\n })();\n }\n\n isBlocked(now) {\n return this._unblockTime >= now;\n }\n\n check(weight, now) {\n return this.conditionsCheck(weight) && this._nextRequest - now <= 0;\n }\n\n __check__(weight) {\n var _this10 = this;\n\n return _asyncToGenerator(function* () {\n var now;\n yield _this10.yieldLoop();\n now = Date.now();\n return _this10.check(weight, now);\n })();\n }\n\n __register__(index, weight, expiration) {\n var _this11 = this;\n\n return _asyncToGenerator(function* () {\n var now, wait;\n yield _this11.yieldLoop();\n now = Date.now();\n\n if (_this11.conditionsCheck(weight)) {\n _this11._running += weight;\n\n if (_this11.storeOptions.reservoir != null) {\n _this11.storeOptions.reservoir -= weight;\n }\n\n wait = Math.max(_this11._nextRequest - now, 0);\n _this11._nextRequest = now + wait + _this11.storeOptions.minTime;\n return {\n success: true,\n wait,\n reservoir: _this11.storeOptions.reservoir\n };\n } else {\n return {\n success: false\n };\n }\n })();\n }\n\n strategyIsBlock() {\n return this.storeOptions.strategy === 3;\n }\n\n __submit__(queueLength, weight) {\n var _this12 = this;\n\n return _asyncToGenerator(function* () {\n var blocked, now, reachedHWM;\n yield _this12.yieldLoop();\n\n if (_this12.storeOptions.maxConcurrent != null && weight > _this12.storeOptions.maxConcurrent) {\n throw new BottleneckError(`Impossible to add a job having a weight of ${weight} to a limiter having a maxConcurrent setting of ${_this12.storeOptions.maxConcurrent}`);\n }\n\n now = Date.now();\n reachedHWM = _this12.storeOptions.highWater != null && queueLength === _this12.storeOptions.highWater && !_this12.check(weight, now);\n blocked = _this12.strategyIsBlock() && (reachedHWM || _this12.isBlocked(now));\n\n if (blocked) {\n _this12._unblockTime = now + _this12.computePenalty();\n _this12._nextRequest = _this12._unblockTime + _this12.storeOptions.minTime;\n\n _this12.instance._dropAllQueued();\n }\n\n return {\n reachedHWM,\n blocked,\n strategy: _this12.storeOptions.strategy\n };\n })();\n }\n\n __free__(index, weight) {\n var _this13 = this;\n\n return _asyncToGenerator(function* () {\n yield _this13.yieldLoop();\n _this13._running -= weight;\n _this13._done += weight;\n\n _this13.instance._drainAll(_this13.computeCapacity());\n\n return {\n running: _this13._running\n };\n })();\n }\n\n};\nmodule.exports = LocalDatastore;", "{\n \"blacklist_client.lua\": \"local blacklist = ARGV[num_static_argv + 1]\\n\\nif redis.call('zscore', client_last_seen_key, blacklist) then\\n redis.call('zadd', client_last_seen_key, 0, blacklist)\\nend\\n\\n\\nreturn {}\\n\",\n \"check.lua\": \"local weight = tonumber(ARGV[num_static_argv + 1])\\n\\nlocal capacity = process_tick(now, false)['capacity']\\nlocal nextRequest = tonumber(redis.call('hget', settings_key, 'nextRequest'))\\n\\nreturn conditions_check(capacity, weight) and nextRequest - now <= 0\\n\",\n \"conditions_check.lua\": \"local conditions_check = function (capacity, weight)\\n return capacity == nil or weight <= capacity\\nend\\n\",\n \"current_reservoir.lua\": \"return process_tick(now, false)['reservoir']\\n\",\n \"done.lua\": \"process_tick(now, false)\\n\\nreturn tonumber(redis.call('hget', settings_key, 'done'))\\n\",\n \"free.lua\": \"local index = ARGV[num_static_argv + 1]\\n\\nredis.call('zadd', job_expirations_key, 0, index)\\n\\nreturn process_tick(now, false)['running']\\n\",\n \"get_time.lua\": \"redis.replicate_commands()\\n\\nlocal get_time = function ()\\n local time = redis.call('time')\\n\\n return tonumber(time[1]..string.sub(time[2], 1, 3))\\nend\\n\",\n \"group_check.lua\": \"return not (redis.call('exists', settings_key) == 1)\\n\",\n \"heartbeat.lua\": \"process_tick(now, true)\\n\",\n \"increment_reservoir.lua\": \"local incr = tonumber(ARGV[num_static_argv + 1])\\n\\nredis.call('hincrby', settings_key, 'reservoir', incr)\\n\\nlocal reservoir = process_tick(now, true)['reservoir']\\n\\nlocal groupTimeout = tonumber(redis.call('hget', settings_key, 'groupTimeout'))\\nrefresh_expiration(0, 0, groupTimeout)\\n\\nreturn reservoir\\n\",\n \"init.lua\": \"local clear = tonumber(ARGV[num_static_argv + 1])\\nlocal limiter_version = ARGV[num_static_argv + 2]\\nlocal num_local_argv = num_static_argv + 2\\n\\nif clear == 1 then\\n redis.call('del', unpack(KEYS))\\nend\\n\\nif redis.call('exists', settings_key) == 0 then\\n -- Create\\n local args = {'hmset', settings_key}\\n\\n for i = num_local_argv + 1, #ARGV do\\n table.insert(args, ARGV[i])\\n end\\n\\n redis.call(unpack(args))\\n redis.call('hmset', settings_key,\\n 'nextRequest', now,\\n 'lastReservoirRefresh', now,\\n 'lastReservoirIncrease', now,\\n 'running', 0,\\n 'done', 0,\\n 'unblockTime', 0,\\n 'capacityPriorityCounter', 0\\n )\\n\\nelse\\n -- Apply migrations\\n local settings = redis.call('hmget', settings_key,\\n 'id',\\n 'version'\\n )\\n local id = settings[1]\\n local current_version = settings[2]\\n\\n if current_version ~= limiter_version then\\n local version_digits = {}\\n for k, v in string.gmatch(current_version, \\\"([^.]+)\\\") do\\n table.insert(version_digits, tonumber(k))\\n end\\n\\n -- 2.10.0\\n if version_digits[2] < 10 then\\n redis.call('hsetnx', settings_key, 'reservoirRefreshInterval', '')\\n redis.call('hsetnx', settings_key, 'reservoirRefreshAmount', '')\\n redis.call('hsetnx', settings_key, 'lastReservoirRefresh', '')\\n redis.call('hsetnx', settings_key, 'done', 0)\\n redis.call('hset', settings_key, 'version', '2.10.0')\\n end\\n\\n -- 2.11.1\\n if version_digits[2] < 11 or (version_digits[2] == 11 and version_digits[3] < 1) then\\n if redis.call('hstrlen', settings_key, 'lastReservoirRefresh') == 0 then\\n redis.call('hmset', settings_key,\\n 'lastReservoirRefresh', now,\\n 'version', '2.11.1'\\n )\\n end\\n end\\n\\n -- 2.14.0\\n if version_digits[2] < 14 then\\n local old_running_key = 'b_'..id..'_running'\\n local old_executing_key = 'b_'..id..'_executing'\\n\\n if redis.call('exists', old_running_key) == 1 then\\n redis.call('rename', old_running_key, job_weights_key)\\n end\\n if redis.call('exists', old_executing_key) == 1 then\\n redis.call('rename', old_executing_key, job_expirations_key)\\n end\\n redis.call('hset', settings_key, 'version', '2.14.0')\\n end\\n\\n -- 2.15.2\\n if version_digits[2] < 15 or (version_digits[2] == 15 and version_digits[3] < 2) then\\n redis.call('hsetnx', settings_key, 'capacityPriorityCounter', 0)\\n redis.call('hset', settings_key, 'version', '2.15.2')\\n end\\n\\n -- 2.17.0\\n if version_digits[2] < 17 then\\n redis.call('hsetnx', settings_key, 'clientTimeout', 10000)\\n redis.call('hset', settings_key, 'version', '2.17.0')\\n end\\n\\n -- 2.18.0\\n if version_digits[2] < 18 then\\n redis.call('hsetnx', settings_key, 'reservoirIncreaseInterval', '')\\n redis.call('hsetnx', settings_key, 'reservoirIncreaseAmount', '')\\n redis.call('hsetnx', settings_key, 'reservoirIncreaseMaximum', '')\\n redis.call('hsetnx', settings_key, 'lastReservoirIncrease', now)\\n redis.call('hset', settings_key, 'version', '2.18.0')\\n end\\n\\n end\\n\\n process_tick(now, false)\\nend\\n\\nlocal groupTimeout = tonumber(redis.call('hget', settings_key, 'groupTimeout'))\\nrefresh_expiration(0, 0, groupTimeout)\\n\\nreturn {}\\n\",\n \"process_tick.lua\": \"local process_tick = function (now, always_publish)\\n\\n local compute_capacity = function (maxConcurrent, running, reservoir)\\n if maxConcurrent ~= nil and reservoir ~= nil then\\n return math.min((maxConcurrent - running), reservoir)\\n elseif maxConcurrent ~= nil then\\n return maxConcurrent - running\\n elseif reservoir ~= nil then\\n return reservoir\\n else\\n return nil\\n end\\n end\\n\\n local settings = redis.call('hmget', settings_key,\\n 'id',\\n 'maxConcurrent',\\n 'running',\\n 'reservoir',\\n 'reservoirRefreshInterval',\\n 'reservoirRefreshAmount',\\n 'lastReservoirRefresh',\\n 'reservoirIncreaseInterval',\\n 'reservoirIncreaseAmount',\\n 'reservoirIncreaseMaximum',\\n 'lastReservoirIncrease',\\n 'capacityPriorityCounter',\\n 'clientTimeout'\\n )\\n local id = settings[1]\\n local maxConcurrent = tonumber(settings[2])\\n local running = tonumber(settings[3])\\n local reservoir = tonumber(settings[4])\\n local reservoirRefreshInterval = tonumber(settings[5])\\n local reservoirRefreshAmount = tonumber(settings[6])\\n local lastReservoirRefresh = tonumber(settings[7])\\n local reservoirIncreaseInterval = tonumber(settings[8])\\n local reservoirIncreaseAmount = tonumber(settings[9])\\n local reservoirIncreaseMaximum = tonumber(settings[10])\\n local lastReservoirIncrease = tonumber(settings[11])\\n local capacityPriorityCounter = tonumber(settings[12])\\n local clientTimeout = tonumber(settings[13])\\n\\n local initial_capacity = compute_capacity(maxConcurrent, running, reservoir)\\n\\n --\\n -- Process 'running' changes\\n --\\n local expired = redis.call('zrangebyscore', job_expirations_key, '-inf', '('..now)\\n\\n if #expired > 0 then\\n redis.call('zremrangebyscore', job_expirations_key, '-inf', '('..now)\\n\\n local flush_batch = function (batch, acc)\\n local weights = redis.call('hmget', job_weights_key, unpack(batch))\\n redis.call('hdel', job_weights_key, unpack(batch))\\n local clients = redis.call('hmget', job_clients_key, unpack(batch))\\n redis.call('hdel', job_clients_key, unpack(batch))\\n\\n -- Calculate sum of removed weights\\n for i = 1, #weights do\\n acc['total'] = acc['total'] + (tonumber(weights[i]) or 0)\\n end\\n\\n -- Calculate sum of removed weights by client\\n local client_weights = {}\\n for i = 1, #clients do\\n local removed = tonumber(weights[i]) or 0\\n if removed > 0 then\\n acc['client_weights'][clients[i]] = (acc['client_weights'][clients[i]] or 0) + removed\\n end\\n end\\n end\\n\\n local acc = {\\n ['total'] = 0,\\n ['client_weights'] = {}\\n }\\n local batch_size = 1000\\n\\n -- Compute changes to Zsets and apply changes to Hashes\\n for i = 1, #expired, batch_size do\\n local batch = {}\\n for j = i, math.min(i + batch_size - 1, #expired) do\\n table.insert(batch, expired[j])\\n end\\n\\n flush_batch(batch, acc)\\n end\\n\\n -- Apply changes to Zsets\\n if acc['total'] > 0 then\\n redis.call('hincrby', settings_key, 'done', acc['total'])\\n running = tonumber(redis.call('hincrby', settings_key, 'running', -acc['total']))\\n end\\n\\n for client, weight in pairs(acc['client_weights']) do\\n redis.call('zincrby', client_running_key, -weight, client)\\n end\\n end\\n\\n --\\n -- Process 'reservoir' changes\\n --\\n local reservoirRefreshActive = reservoirRefreshInterval ~= nil and reservoirRefreshAmount ~= nil\\n if reservoirRefreshActive and now >= lastReservoirRefresh + reservoirRefreshInterval then\\n reservoir = reservoirRefreshAmount\\n redis.call('hmset', settings_key,\\n 'reservoir', reservoir,\\n 'lastReservoirRefresh', now\\n )\\n end\\n\\n local reservoirIncreaseActive = reservoirIncreaseInterval ~= nil and reservoirIncreaseAmount ~= nil\\n if reservoirIncreaseActive and now >= lastReservoirIncrease + reservoirIncreaseInterval then\\n local num_intervals = math.floor((now - lastReservoirIncrease) / reservoirIncreaseInterval)\\n local incr = reservoirIncreaseAmount * num_intervals\\n if reservoirIncreaseMaximum ~= nil then\\n incr = math.min(incr, reservoirIncreaseMaximum - (reservoir or 0))\\n end\\n if incr > 0 then\\n reservoir = (reservoir or 0) + incr\\n end\\n redis.call('hmset', settings_key,\\n 'reservoir', reservoir,\\n 'lastReservoirIncrease', lastReservoirIncrease + (num_intervals * reservoirIncreaseInterval)\\n )\\n end\\n\\n --\\n -- Clear unresponsive clients\\n --\\n local unresponsive = redis.call('zrangebyscore', client_last_seen_key, '-inf', (now - clientTimeout))\\n local unresponsive_lookup = {}\\n local terminated_clients = {}\\n for i = 1, #unresponsive do\\n unresponsive_lookup[unresponsive[i]] = true\\n if tonumber(redis.call('zscore', client_running_key, unresponsive[i])) == 0 then\\n table.insert(terminated_clients, unresponsive[i])\\n end\\n end\\n if #terminated_clients > 0 then\\n redis.call('zrem', client_running_key, unpack(terminated_clients))\\n redis.call('hdel', client_num_queued_key, unpack(terminated_clients))\\n redis.call('zrem', client_last_registered_key, unpack(terminated_clients))\\n redis.call('zrem', client_last_seen_key, unpack(terminated_clients))\\n end\\n\\n --\\n -- Broadcast capacity changes\\n --\\n local final_capacity = compute_capacity(maxConcurrent, running, reservoir)\\n\\n if always_publish or (initial_capacity ~= nil and final_capacity == nil) then\\n -- always_publish or was not unlimited, now unlimited\\n redis.call('publish', 'b_'..id, 'capacity:'..(final_capacity or ''))\\n\\n elseif initial_capacity ~= nil and final_capacity ~= nil and final_capacity > initial_capacity then\\n -- capacity was increased\\n -- send the capacity message to the limiter having the lowest number of running jobs\\n -- the tiebreaker is the limiter having not registered a job in the longest time\\n\\n local lowest_concurrency_value = nil\\n local lowest_concurrency_clients = {}\\n local lowest_concurrency_last_registered = {}\\n local client_concurrencies = redis.call('zrange', client_running_key, 0, -1, 'withscores')\\n\\n for i = 1, #client_concurrencies, 2 do\\n local client = client_concurrencies[i]\\n local concurrency = tonumber(client_concurrencies[i+1])\\n\\n if (\\n lowest_concurrency_value == nil or lowest_concurrency_value == concurrency\\n ) and (\\n not unresponsive_lookup[client]\\n ) and (\\n tonumber(redis.call('hget', client_num_queued_key, client)) > 0\\n ) then\\n lowest_concurrency_value = concurrency\\n table.insert(lowest_concurrency_clients, client)\\n local last_registered = tonumber(redis.call('zscore', client_last_registered_key, client))\\n table.insert(lowest_concurrency_last_registered, last_registered)\\n end\\n end\\n\\n if #lowest_concurrency_clients > 0 then\\n local position = 1\\n local earliest = lowest_concurrency_last_registered[1]\\n\\n for i,v in ipairs(lowest_concurrency_last_registered) do\\n if v < earliest then\\n position = i\\n earliest = v\\n end\\n end\\n\\n local next_client = lowest_concurrency_clients[position]\\n redis.call('publish', 'b_'..id,\\n 'capacity-priority:'..(final_capacity or '')..\\n ':'..next_client..\\n ':'..capacityPriorityCounter\\n )\\n redis.call('hincrby', settings_key, 'capacityPriorityCounter', '1')\\n else\\n redis.call('publish', 'b_'..id, 'capacity:'..(final_capacity or ''))\\n end\\n end\\n\\n return {\\n ['capacity'] = final_capacity,\\n ['running'] = running,\\n ['reservoir'] = reservoir\\n }\\nend\\n\",\n \"queued.lua\": \"local clientTimeout = tonumber(redis.call('hget', settings_key, 'clientTimeout'))\\nlocal valid_clients = redis.call('zrangebyscore', client_last_seen_key, (now - clientTimeout), 'inf')\\nlocal client_queued = redis.call('hmget', client_num_queued_key, unpack(valid_clients))\\n\\nlocal sum = 0\\nfor i = 1, #client_queued do\\n sum = sum + tonumber(client_queued[i])\\nend\\n\\nreturn sum\\n\",\n \"refresh_expiration.lua\": \"local refresh_expiration = function (now, nextRequest, groupTimeout)\\n\\n if groupTimeout ~= nil then\\n local ttl = (nextRequest + groupTimeout) - now\\n\\n for i = 1, #KEYS do\\n redis.call('pexpire', KEYS[i], ttl)\\n end\\n end\\n\\nend\\n\",\n \"refs.lua\": \"local settings_key = KEYS[1]\\nlocal job_weights_key = KEYS[2]\\nlocal job_expirations_key = KEYS[3]\\nlocal job_clients_key = KEYS[4]\\nlocal client_running_key = KEYS[5]\\nlocal client_num_queued_key = KEYS[6]\\nlocal client_last_registered_key = KEYS[7]\\nlocal client_last_seen_key = KEYS[8]\\n\\nlocal now = tonumber(ARGV[1])\\nlocal client = ARGV[2]\\n\\nlocal num_static_argv = 2\\n\",\n \"register.lua\": \"local index = ARGV[num_static_argv + 1]\\nlocal weight = tonumber(ARGV[num_static_argv + 2])\\nlocal expiration = tonumber(ARGV[num_static_argv + 3])\\n\\nlocal state = process_tick(now, false)\\nlocal capacity = state['capacity']\\nlocal reservoir = state['reservoir']\\n\\nlocal settings = redis.call('hmget', settings_key,\\n 'nextRequest',\\n 'minTime',\\n 'groupTimeout'\\n)\\nlocal nextRequest = tonumber(settings[1])\\nlocal minTime = tonumber(settings[2])\\nlocal groupTimeout = tonumber(settings[3])\\n\\nif conditions_check(capacity, weight) then\\n\\n redis.call('hincrby', settings_key, 'running', weight)\\n redis.call('hset', job_weights_key, index, weight)\\n if expiration ~= nil then\\n redis.call('zadd', job_expirations_key, now + expiration, index)\\n end\\n redis.call('hset', job_clients_key, index, client)\\n redis.call('zincrby', client_running_key, weight, client)\\n redis.call('hincrby', client_num_queued_key, client, -1)\\n redis.call('zadd', client_last_registered_key, now, client)\\n\\n local wait = math.max(nextRequest - now, 0)\\n local newNextRequest = now + wait + minTime\\n\\n if reservoir == nil then\\n redis.call('hset', settings_key,\\n 'nextRequest', newNextRequest\\n )\\n else\\n reservoir = reservoir - weight\\n redis.call('hmset', settings_key,\\n 'reservoir', reservoir,\\n 'nextRequest', newNextRequest\\n )\\n end\\n\\n refresh_expiration(now, newNextRequest, groupTimeout)\\n\\n return {true, wait, reservoir}\\n\\nelse\\n return {false}\\nend\\n\",\n \"register_client.lua\": \"local queued = tonumber(ARGV[num_static_argv + 1])\\n\\n-- Could have been re-registered concurrently\\nif not redis.call('zscore', client_last_seen_key, client) then\\n redis.call('zadd', client_running_key, 0, client)\\n redis.call('hset', client_num_queued_key, client, queued)\\n redis.call('zadd', client_last_registered_key, 0, client)\\nend\\n\\nredis.call('zadd', client_last_seen_key, now, client)\\n\\nreturn {}\\n\",\n \"running.lua\": \"return process_tick(now, false)['running']\\n\",\n \"submit.lua\": \"local queueLength = tonumber(ARGV[num_static_argv + 1])\\nlocal weight = tonumber(ARGV[num_static_argv + 2])\\n\\nlocal capacity = process_tick(now, false)['capacity']\\n\\nlocal settings = redis.call('hmget', settings_key,\\n 'id',\\n 'maxConcurrent',\\n 'highWater',\\n 'nextRequest',\\n 'strategy',\\n 'unblockTime',\\n 'penalty',\\n 'minTime',\\n 'groupTimeout'\\n)\\nlocal id = settings[1]\\nlocal maxConcurrent = tonumber(settings[2])\\nlocal highWater = tonumber(settings[3])\\nlocal nextRequest = tonumber(settings[4])\\nlocal strategy = tonumber(settings[5])\\nlocal unblockTime = tonumber(settings[6])\\nlocal penalty = tonumber(settings[7])\\nlocal minTime = tonumber(settings[8])\\nlocal groupTimeout = tonumber(settings[9])\\n\\nif maxConcurrent ~= nil and weight > maxConcurrent then\\n return redis.error_reply('OVERWEIGHT:'..weight..':'..maxConcurrent)\\nend\\n\\nlocal reachedHWM = (highWater ~= nil and queueLength == highWater\\n and not (\\n conditions_check(capacity, weight)\\n and nextRequest - now <= 0\\n )\\n)\\n\\nlocal blocked = strategy == 3 and (reachedHWM or unblockTime >= now)\\n\\nif blocked then\\n local computedPenalty = penalty\\n if computedPenalty == nil then\\n if minTime == 0 then\\n computedPenalty = 5000\\n else\\n computedPenalty = 15 * minTime\\n end\\n end\\n\\n local newNextRequest = now + computedPenalty + minTime\\n\\n redis.call('hmset', settings_key,\\n 'unblockTime', now + computedPenalty,\\n 'nextRequest', newNextRequest\\n )\\n\\n local clients_queued_reset = redis.call('hkeys', client_num_queued_key)\\n local queued_reset = {}\\n for i = 1, #clients_queued_reset do\\n table.insert(queued_reset, clients_queued_reset[i])\\n table.insert(queued_reset, 0)\\n end\\n redis.call('hmset', client_num_queued_key, unpack(queued_reset))\\n\\n redis.call('publish', 'b_'..id, 'blocked:')\\n\\n refresh_expiration(now, newNextRequest, groupTimeout)\\nend\\n\\nif not blocked and not reachedHWM then\\n redis.call('hincrby', client_num_queued_key, client, 1)\\nend\\n\\nreturn {reachedHWM, blocked, strategy}\\n\",\n \"update_settings.lua\": \"local args = {'hmset', settings_key}\\n\\nfor i = num_static_argv + 1, #ARGV do\\n table.insert(args, ARGV[i])\\nend\\n\\nredis.call(unpack(args))\\n\\nprocess_tick(now, true)\\n\\nlocal groupTimeout = tonumber(redis.call('hget', settings_key, 'groupTimeout'))\\nrefresh_expiration(0, 0, groupTimeout)\\n\\nreturn {}\\n\",\n \"validate_client.lua\": \"if not redis.call('zscore', client_last_seen_key, client) then\\n return redis.error_reply('UNKNOWN_CLIENT')\\nend\\n\\nredis.call('zadd', client_last_seen_key, now, client)\\n\",\n \"validate_keys.lua\": \"if not (redis.call('exists', settings_key) == 1) then\\n return redis.error_reply('SETTINGS_KEY_NOT_FOUND')\\nend\\n\"\n}\n", "\"use strict\";\n\nvar headers, lua, templates;\nlua = require(\"./lua.json\");\nheaders = {\n refs: lua[\"refs.lua\"],\n validate_keys: lua[\"validate_keys.lua\"],\n validate_client: lua[\"validate_client.lua\"],\n refresh_expiration: lua[\"refresh_expiration.lua\"],\n process_tick: lua[\"process_tick.lua\"],\n conditions_check: lua[\"conditions_check.lua\"],\n get_time: lua[\"get_time.lua\"]\n};\n\nexports.allKeys = function (id) {\n return [\n /*\n HASH\n */\n `b_${id}_settings`,\n /*\n HASH\n job index -> weight\n */\n `b_${id}_job_weights`,\n /*\n ZSET\n job index -> expiration\n */\n `b_${id}_job_expirations`,\n /*\n HASH\n job index -> client\n */\n `b_${id}_job_clients`,\n /*\n ZSET\n client -> sum running\n */\n `b_${id}_client_running`,\n /*\n HASH\n client -> num queued\n */\n `b_${id}_client_num_queued`,\n /*\n ZSET\n client -> last job registered\n */\n `b_${id}_client_last_registered`,\n /*\n ZSET\n client -> last seen\n */\n `b_${id}_client_last_seen`];\n};\n\ntemplates = {\n init: {\n keys: exports.allKeys,\n headers: [\"process_tick\"],\n refresh_expiration: true,\n code: lua[\"init.lua\"]\n },\n group_check: {\n keys: exports.allKeys,\n headers: [],\n refresh_expiration: false,\n code: lua[\"group_check.lua\"]\n },\n register_client: {\n keys: exports.allKeys,\n headers: [\"validate_keys\"],\n refresh_expiration: false,\n code: lua[\"register_client.lua\"]\n },\n blacklist_client: {\n keys: exports.allKeys,\n headers: [\"validate_keys\", \"validate_client\"],\n refresh_expiration: false,\n code: lua[\"blacklist_client.lua\"]\n },\n heartbeat: {\n keys: exports.allKeys,\n headers: [\"validate_keys\", \"validate_client\", \"process_tick\"],\n refresh_expiration: false,\n code: lua[\"heartbeat.lua\"]\n },\n update_settings: {\n keys: exports.allKeys,\n headers: [\"validate_keys\", \"validate_client\", \"process_tick\"],\n refresh_expiration: true,\n code: lua[\"update_settings.lua\"]\n },\n running: {\n keys: exports.allKeys,\n headers: [\"validate_keys\", \"validate_client\", \"process_tick\"],\n refresh_expiration: false,\n code: lua[\"running.lua\"]\n },\n queued: {\n keys: exports.allKeys,\n headers: [\"validate_keys\", \"validate_client\"],\n refresh_expiration: false,\n code: lua[\"queued.lua\"]\n },\n done: {\n keys: exports.allKeys,\n headers: [\"validate_keys\", \"validate_client\", \"process_tick\"],\n refresh_expiration: false,\n code: lua[\"done.lua\"]\n },\n check: {\n keys: exports.allKeys,\n headers: [\"validate_keys\", \"validate_client\", \"process_tick\", \"conditions_check\"],\n refresh_expiration: false,\n code: lua[\"check.lua\"]\n },\n submit: {\n keys: exports.allKeys,\n headers: [\"validate_keys\", \"validate_client\", \"process_tick\", \"conditions_check\"],\n refresh_expiration: true,\n code: lua[\"submit.lua\"]\n },\n register: {\n keys: exports.allKeys,\n headers: [\"validate_keys\", \"validate_client\", \"process_tick\", \"conditions_check\"],\n refresh_expiration: true,\n code: lua[\"register.lua\"]\n },\n free: {\n keys: exports.allKeys,\n headers: [\"validate_keys\", \"validate_client\", \"process_tick\"],\n refresh_expiration: true,\n code: lua[\"free.lua\"]\n },\n current_reservoir: {\n keys: exports.allKeys,\n headers: [\"validate_keys\", \"validate_client\", \"process_tick\"],\n refresh_expiration: false,\n code: lua[\"current_reservoir.lua\"]\n },\n increment_reservoir: {\n keys: exports.allKeys,\n headers: [\"validate_keys\", \"validate_client\", \"process_tick\"],\n refresh_expiration: true,\n code: lua[\"increment_reservoir.lua\"]\n }\n};\nexports.names = Object.keys(templates);\n\nexports.keys = function (name, id) {\n return templates[name].keys(id);\n};\n\nexports.payload = function (name) {\n var template;\n template = templates[name];\n return Array.prototype.concat(headers.refs, template.headers.map(function (h) {\n return headers[h];\n }), template.refresh_expiration ? headers.refresh_expiration : \"\", template.code).join(\"\\n\");\n};", "\"use strict\";\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar Events, RedisConnection, Scripts, parser;\nparser = require(\"./parser\");\nEvents = require(\"./Events\");\nScripts = require(\"./Scripts\");\n\nRedisConnection = function () {\n class RedisConnection {\n constructor(options = {}) {\n parser.load(options, this.defaults, this);\n\n if (this.Redis == null) {\n this.Redis = eval(\"require\")(\"redis\"); // Obfuscated or else Webpack/Angular will try to inline the optional redis module. To override this behavior: pass the redis module to Bottleneck as the 'Redis' option.\n }\n\n if (this.Events == null) {\n this.Events = new Events(this);\n }\n\n this.terminated = false;\n\n if (this.client == null) {\n this.client = this.Redis.createClient(this.clientOptions);\n }\n\n this.subscriber = this.client.duplicate();\n this.limiters = {};\n this.shas = {};\n this.ready = this.Promise.all([this._setup(this.client, false), this._setup(this.subscriber, true)]).then(() => {\n return this._loadScripts();\n }).then(() => {\n return {\n client: this.client,\n subscriber: this.subscriber\n };\n });\n }\n\n _setup(client, sub) {\n client.setMaxListeners(0);\n return new this.Promise((resolve, reject) => {\n client.on(\"error\", e => {\n return this.Events.trigger(\"error\", e);\n });\n\n if (sub) {\n client.on(\"message\", (channel, message) => {\n var ref;\n return (ref = this.limiters[channel]) != null ? ref._store.onMessage(channel, message) : void 0;\n });\n }\n\n if (client.ready) {\n return resolve();\n } else {\n return client.once(\"ready\", resolve);\n }\n });\n }\n\n _loadScript(name) {\n return new this.Promise((resolve, reject) => {\n var payload;\n payload = Scripts.payload(name);\n return this.client.multi([[\"script\", \"load\", payload]]).exec((err, replies) => {\n if (err != null) {\n return reject(err);\n }\n\n this.shas[name] = replies[0];\n return resolve(replies[0]);\n });\n });\n }\n\n _loadScripts() {\n return this.Promise.all(Scripts.names.map(k => {\n return this._loadScript(k);\n }));\n }\n\n __runCommand__(cmd) {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n yield _this.ready;\n return new _this.Promise((resolve, reject) => {\n return _this.client.multi([cmd]).exec_atomic(function (err, replies) {\n if (err != null) {\n return reject(err);\n } else {\n return resolve(replies[0]);\n }\n });\n });\n })();\n }\n\n __addLimiter__(instance) {\n return this.Promise.all([instance.channel(), instance.channel_client()].map(channel => {\n return new this.Promise((resolve, reject) => {\n var handler;\n\n handler = chan => {\n if (chan === channel) {\n this.subscriber.removeListener(\"subscribe\", handler);\n this.limiters[channel] = instance;\n return resolve();\n }\n };\n\n this.subscriber.on(\"subscribe\", handler);\n return this.subscriber.subscribe(channel);\n });\n }));\n }\n\n __removeLimiter__(instance) {\n var _this2 = this;\n\n return this.Promise.all([instance.channel(), instance.channel_client()].map(\n /*#__PURE__*/\n function () {\n var _ref = _asyncToGenerator(function* (channel) {\n if (!_this2.terminated) {\n yield new _this2.Promise((resolve, reject) => {\n return _this2.subscriber.unsubscribe(channel, function (err, chan) {\n if (err != null) {\n return reject(err);\n }\n\n if (chan === channel) {\n return resolve();\n }\n });\n });\n }\n\n return delete _this2.limiters[channel];\n });\n\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }()));\n }\n\n __scriptArgs__(name, id, args, cb) {\n var keys;\n keys = Scripts.keys(name, id);\n return [this.shas[name], keys.length].concat(keys, args, cb);\n }\n\n __scriptFn__(name) {\n return this.client.evalsha.bind(this.client);\n }\n\n disconnect(flush = true) {\n var i, k, len, ref;\n ref = Object.keys(this.limiters);\n\n for (i = 0, len = ref.length; i < len; i++) {\n k = ref[i];\n clearInterval(this.limiters[k]._store.heartbeat);\n }\n\n this.limiters = {};\n this.terminated = true;\n this.client.end(flush);\n this.subscriber.end(flush);\n return this.Promise.resolve();\n }\n\n }\n\n ;\n RedisConnection.prototype.datastore = \"redis\";\n RedisConnection.prototype.defaults = {\n Redis: null,\n clientOptions: {},\n client: null,\n Promise: Promise,\n Events: null\n };\n return RedisConnection;\n}.call(void 0);\n\nmodule.exports = RedisConnection;", "\"use strict\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar Events, IORedisConnection, Scripts, parser;\nparser = require(\"./parser\");\nEvents = require(\"./Events\");\nScripts = require(\"./Scripts\");\n\nIORedisConnection = function () {\n class IORedisConnection {\n constructor(options = {}) {\n parser.load(options, this.defaults, this);\n\n if (this.Redis == null) {\n this.Redis = eval(\"require\")(\"ioredis\"); // Obfuscated or else Webpack/Angular will try to inline the optional ioredis module. To override this behavior: pass the ioredis module to Bottleneck as the 'Redis' option.\n }\n\n if (this.Events == null) {\n this.Events = new Events(this);\n }\n\n this.terminated = false;\n\n if (this.clusterNodes != null) {\n this.client = new this.Redis.Cluster(this.clusterNodes, this.clientOptions);\n this.subscriber = new this.Redis.Cluster(this.clusterNodes, this.clientOptions);\n } else if (this.client != null && this.client.duplicate == null) {\n this.subscriber = new this.Redis.Cluster(this.client.startupNodes, this.client.options);\n } else {\n if (this.client == null) {\n this.client = new this.Redis(this.clientOptions);\n }\n\n this.subscriber = this.client.duplicate();\n }\n\n this.limiters = {};\n this.ready = this.Promise.all([this._setup(this.client, false), this._setup(this.subscriber, true)]).then(() => {\n this._loadScripts();\n\n return {\n client: this.client,\n subscriber: this.subscriber\n };\n });\n }\n\n _setup(client, sub) {\n client.setMaxListeners(0);\n return new this.Promise((resolve, reject) => {\n client.on(\"error\", e => {\n return this.Events.trigger(\"error\", e);\n });\n\n if (sub) {\n client.on(\"message\", (channel, message) => {\n var ref;\n return (ref = this.limiters[channel]) != null ? ref._store.onMessage(channel, message) : void 0;\n });\n }\n\n if (client.status === \"ready\") {\n return resolve();\n } else {\n return client.once(\"ready\", resolve);\n }\n });\n }\n\n _loadScripts() {\n return Scripts.names.forEach(name => {\n return this.client.defineCommand(name, {\n lua: Scripts.payload(name)\n });\n });\n }\n\n __runCommand__(cmd) {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n var _, deleted;\n\n yield _this.ready;\n\n var _ref = yield _this.client.pipeline([cmd]).exec();\n\n var _ref2 = _slicedToArray(_ref, 1);\n\n var _ref2$ = _slicedToArray(_ref2[0], 2);\n\n _ = _ref2$[0];\n deleted = _ref2$[1];\n return deleted;\n })();\n }\n\n __addLimiter__(instance) {\n return this.Promise.all([instance.channel(), instance.channel_client()].map(channel => {\n return new this.Promise((resolve, reject) => {\n return this.subscriber.subscribe(channel, () => {\n this.limiters[channel] = instance;\n return resolve();\n });\n });\n }));\n }\n\n __removeLimiter__(instance) {\n var _this2 = this;\n\n return [instance.channel(), instance.channel_client()].forEach(\n /*#__PURE__*/\n function () {\n var _ref3 = _asyncToGenerator(function* (channel) {\n if (!_this2.terminated) {\n yield _this2.subscriber.unsubscribe(channel);\n }\n\n return delete _this2.limiters[channel];\n });\n\n return function (_x) {\n return _ref3.apply(this, arguments);\n };\n }());\n }\n\n __scriptArgs__(name, id, args, cb) {\n var keys;\n keys = Scripts.keys(name, id);\n return [keys.length].concat(keys, args, cb);\n }\n\n __scriptFn__(name) {\n return this.client[name].bind(this.client);\n }\n\n disconnect(flush = true) {\n var i, k, len, ref;\n ref = Object.keys(this.limiters);\n\n for (i = 0, len = ref.length; i < len; i++) {\n k = ref[i];\n clearInterval(this.limiters[k]._store.heartbeat);\n }\n\n this.limiters = {};\n this.terminated = true;\n\n if (flush) {\n return this.Promise.all([this.client.quit(), this.subscriber.quit()]);\n } else {\n this.client.disconnect();\n this.subscriber.disconnect();\n return this.Promise.resolve();\n }\n }\n\n }\n\n ;\n IORedisConnection.prototype.datastore = \"ioredis\";\n IORedisConnection.prototype.defaults = {\n Redis: null,\n clientOptions: {},\n clusterNodes: null,\n client: null,\n Promise: Promise,\n Events: null\n };\n return IORedisConnection;\n}.call(void 0);\n\nmodule.exports = IORedisConnection;", "\"use strict\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar BottleneckError, IORedisConnection, RedisConnection, RedisDatastore, parser;\nparser = require(\"./parser\");\nBottleneckError = require(\"./BottleneckError\");\nRedisConnection = require(\"./RedisConnection\");\nIORedisConnection = require(\"./IORedisConnection\");\nRedisDatastore = class RedisDatastore {\n constructor(instance, storeOptions, storeInstanceOptions) {\n this.instance = instance;\n this.storeOptions = storeOptions;\n this.originalId = this.instance.id;\n this.clientId = this.instance._randomIndex();\n parser.load(storeInstanceOptions, storeInstanceOptions, this);\n this.clients = {};\n this.capacityPriorityCounters = {};\n this.sharedConnection = this.connection != null;\n\n if (this.connection == null) {\n this.connection = this.instance.datastore === \"redis\" ? new RedisConnection({\n Redis: this.Redis,\n clientOptions: this.clientOptions,\n Promise: this.Promise,\n Events: this.instance.Events\n }) : this.instance.datastore === \"ioredis\" ? new IORedisConnection({\n Redis: this.Redis,\n clientOptions: this.clientOptions,\n clusterNodes: this.clusterNodes,\n Promise: this.Promise,\n Events: this.instance.Events\n }) : void 0;\n }\n\n this.instance.connection = this.connection;\n this.instance.datastore = this.connection.datastore;\n this.ready = this.connection.ready.then(clients => {\n this.clients = clients;\n return this.runScript(\"init\", this.prepareInitSettings(this.clearDatastore));\n }).then(() => {\n return this.connection.__addLimiter__(this.instance);\n }).then(() => {\n return this.runScript(\"register_client\", [this.instance.queued()]);\n }).then(() => {\n var base;\n\n if (typeof (base = this.heartbeat = setInterval(() => {\n return this.runScript(\"heartbeat\", []).catch(e => {\n return this.instance.Events.trigger(\"error\", e);\n });\n }, this.heartbeatInterval)).unref === \"function\") {\n base.unref();\n }\n\n return this.clients;\n });\n }\n\n __publish__(message) {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n var client;\n\n var _ref = yield _this.ready;\n\n client = _ref.client;\n return client.publish(_this.instance.channel(), `message:${message.toString()}`);\n })();\n }\n\n onMessage(channel, message) {\n var _this2 = this;\n\n return _asyncToGenerator(function* () {\n var capacity, counter, data, drained, e, newCapacity, pos, priorityClient, rawCapacity, type;\n\n try {\n pos = message.indexOf(\":\");\n var _ref2 = [message.slice(0, pos), message.slice(pos + 1)];\n type = _ref2[0];\n data = _ref2[1];\n\n if (type === \"capacity\") {\n return yield _this2.instance._drainAll(data.length > 0 ? ~~data : void 0);\n } else if (type === \"capacity-priority\") {\n var _data$split = data.split(\":\");\n\n var _data$split2 = _slicedToArray(_data$split, 3);\n\n rawCapacity = _data$split2[0];\n priorityClient = _data$split2[1];\n counter = _data$split2[2];\n capacity = rawCapacity.length > 0 ? ~~rawCapacity : void 0;\n\n if (priorityClient === _this2.clientId) {\n drained = yield _this2.instance._drainAll(capacity);\n newCapacity = capacity != null ? capacity - (drained || 0) : \"\";\n return yield _this2.clients.client.publish(_this2.instance.channel(), `capacity-priority:${newCapacity}::${counter}`);\n } else if (priorityClient === \"\") {\n clearTimeout(_this2.capacityPriorityCounters[counter]);\n delete _this2.capacityPriorityCounters[counter];\n return _this2.instance._drainAll(capacity);\n } else {\n return _this2.capacityPriorityCounters[counter] = setTimeout(\n /*#__PURE__*/\n _asyncToGenerator(function* () {\n var e;\n\n try {\n delete _this2.capacityPriorityCounters[counter];\n yield _this2.runScript(\"blacklist_client\", [priorityClient]);\n return yield _this2.instance._drainAll(capacity);\n } catch (error) {\n e = error;\n return _this2.instance.Events.trigger(\"error\", e);\n }\n }), 1000);\n }\n } else if (type === \"message\") {\n return _this2.instance.Events.trigger(\"message\", data);\n } else if (type === \"blocked\") {\n return yield _this2.instance._dropAllQueued();\n }\n } catch (error) {\n e = error;\n return _this2.instance.Events.trigger(\"error\", e);\n }\n })();\n }\n\n __disconnect__(flush) {\n clearInterval(this.heartbeat);\n\n if (this.sharedConnection) {\n return this.connection.__removeLimiter__(this.instance);\n } else {\n return this.connection.disconnect(flush);\n }\n }\n\n runScript(name, args) {\n var _this3 = this;\n\n return _asyncToGenerator(function* () {\n if (!(name === \"init\" || name === \"register_client\")) {\n yield _this3.ready;\n }\n\n return new _this3.Promise((resolve, reject) => {\n var all_args, arr;\n all_args = [Date.now(), _this3.clientId].concat(args);\n\n _this3.instance.Events.trigger(\"debug\", `Calling Redis script: ${name}.lua`, all_args);\n\n arr = _this3.connection.__scriptArgs__(name, _this3.originalId, all_args, function (err, replies) {\n if (err != null) {\n return reject(err);\n }\n\n return resolve(replies);\n });\n return _this3.connection.__scriptFn__(name)(...arr);\n }).catch(e => {\n if (e.message === \"SETTINGS_KEY_NOT_FOUND\") {\n if (name === \"heartbeat\") {\n return _this3.Promise.resolve();\n } else {\n return _this3.runScript(\"init\", _this3.prepareInitSettings(false)).then(() => {\n return _this3.runScript(name, args);\n });\n }\n } else if (e.message === \"UNKNOWN_CLIENT\") {\n return _this3.runScript(\"register_client\", [_this3.instance.queued()]).then(() => {\n return _this3.runScript(name, args);\n });\n } else {\n return _this3.Promise.reject(e);\n }\n });\n })();\n }\n\n prepareArray(arr) {\n var i, len, results, x;\n results = [];\n\n for (i = 0, len = arr.length; i < len; i++) {\n x = arr[i];\n results.push(x != null ? x.toString() : \"\");\n }\n\n return results;\n }\n\n prepareObject(obj) {\n var arr, k, v;\n arr = [];\n\n for (k in obj) {\n v = obj[k];\n arr.push(k, v != null ? v.toString() : \"\");\n }\n\n return arr;\n }\n\n prepareInitSettings(clear) {\n var args;\n args = this.prepareObject(Object.assign({}, this.storeOptions, {\n id: this.originalId,\n version: this.instance.version,\n groupTimeout: this.timeout,\n clientTimeout: this.clientTimeout\n }));\n args.unshift(clear ? 1 : 0, this.instance.version);\n return args;\n }\n\n convertBool(b) {\n return !!b;\n }\n\n __updateSettings__(options) {\n var _this4 = this;\n\n return _asyncToGenerator(function* () {\n yield _this4.runScript(\"update_settings\", _this4.prepareObject(options));\n return parser.overwrite(options, options, _this4.storeOptions);\n })();\n }\n\n __running__() {\n return this.runScript(\"running\", []);\n }\n\n __queued__() {\n return this.runScript(\"queued\", []);\n }\n\n __done__() {\n return this.runScript(\"done\", []);\n }\n\n __groupCheck__() {\n var _this5 = this;\n\n return _asyncToGenerator(function* () {\n return _this5.convertBool((yield _this5.runScript(\"group_check\", [])));\n })();\n }\n\n __incrementReservoir__(incr) {\n return this.runScript(\"increment_reservoir\", [incr]);\n }\n\n __currentReservoir__() {\n return this.runScript(\"current_reservoir\", []);\n }\n\n __check__(weight) {\n var _this6 = this;\n\n return _asyncToGenerator(function* () {\n return _this6.convertBool((yield _this6.runScript(\"check\", _this6.prepareArray([weight]))));\n })();\n }\n\n __register__(index, weight, expiration) {\n var _this7 = this;\n\n return _asyncToGenerator(function* () {\n var reservoir, success, wait;\n\n var _ref4 = yield _this7.runScript(\"register\", _this7.prepareArray([index, weight, expiration]));\n\n var _ref5 = _slicedToArray(_ref4, 3);\n\n success = _ref5[0];\n wait = _ref5[1];\n reservoir = _ref5[2];\n return {\n success: _this7.convertBool(success),\n wait,\n reservoir\n };\n })();\n }\n\n __submit__(queueLength, weight) {\n var _this8 = this;\n\n return _asyncToGenerator(function* () {\n var blocked, e, maxConcurrent, overweight, reachedHWM, strategy;\n\n try {\n var _ref6 = yield _this8.runScript(\"submit\", _this8.prepareArray([queueLength, weight]));\n\n var _ref7 = _slicedToArray(_ref6, 3);\n\n reachedHWM = _ref7[0];\n blocked = _ref7[1];\n strategy = _ref7[2];\n return {\n reachedHWM: _this8.convertBool(reachedHWM),\n blocked: _this8.convertBool(blocked),\n strategy\n };\n } catch (error) {\n e = error;\n\n if (e.message.indexOf(\"OVERWEIGHT\") === 0) {\n var _e$message$split = e.message.split(\":\");\n\n var _e$message$split2 = _slicedToArray(_e$message$split, 3);\n\n overweight = _e$message$split2[0];\n weight = _e$message$split2[1];\n maxConcurrent = _e$message$split2[2];\n throw new BottleneckError(`Impossible to add a job having a weight of ${weight} to a limiter having a maxConcurrent setting of ${maxConcurrent}`);\n } else {\n throw e;\n }\n }\n })();\n }\n\n __free__(index, weight) {\n var _this9 = this;\n\n return _asyncToGenerator(function* () {\n var running;\n running = yield _this9.runScript(\"free\", _this9.prepareArray([index]));\n return {\n running\n };\n })();\n }\n\n};\nmodule.exports = RedisDatastore;", "\"use strict\";\n\nvar BottleneckError, States;\nBottleneckError = require(\"./BottleneckError\");\nStates = class States {\n constructor(status1) {\n this.status = status1;\n this._jobs = {};\n this.counts = this.status.map(function () {\n return 0;\n });\n }\n\n next(id) {\n var current, next;\n current = this._jobs[id];\n next = current + 1;\n\n if (current != null && next < this.status.length) {\n this.counts[current]--;\n this.counts[next]++;\n return this._jobs[id]++;\n } else if (current != null) {\n this.counts[current]--;\n return delete this._jobs[id];\n }\n }\n\n start(id) {\n var initial;\n initial = 0;\n this._jobs[id] = initial;\n return this.counts[initial]++;\n }\n\n remove(id) {\n var current;\n current = this._jobs[id];\n\n if (current != null) {\n this.counts[current]--;\n delete this._jobs[id];\n }\n\n return current != null;\n }\n\n jobStatus(id) {\n var ref;\n return (ref = this.status[this._jobs[id]]) != null ? ref : null;\n }\n\n statusJobs(status) {\n var k, pos, ref, results, v;\n\n if (status != null) {\n pos = this.status.indexOf(status);\n\n if (pos < 0) {\n throw new BottleneckError(`status must be one of ${this.status.join(', ')}`);\n }\n\n ref = this._jobs;\n results = [];\n\n for (k in ref) {\n v = ref[k];\n\n if (v === pos) {\n results.push(k);\n }\n }\n\n return results;\n } else {\n return Object.keys(this._jobs);\n }\n }\n\n statusCounts() {\n return this.counts.reduce((acc, v, i) => {\n acc[this.status[i]] = v;\n return acc;\n }, {});\n }\n\n};\nmodule.exports = States;", "\"use strict\";\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar DLList, Sync;\nDLList = require(\"./DLList\");\nSync = class Sync {\n constructor(name, Promise) {\n this.schedule = this.schedule.bind(this);\n this.name = name;\n this.Promise = Promise;\n this._running = 0;\n this._queue = new DLList();\n }\n\n isEmpty() {\n return this._queue.length === 0;\n }\n\n _tryToRun() {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n var args, cb, error, reject, resolve, returned, task;\n\n if (_this._running < 1 && _this._queue.length > 0) {\n _this._running++;\n\n var _this$_queue$shift = _this._queue.shift();\n\n task = _this$_queue$shift.task;\n args = _this$_queue$shift.args;\n resolve = _this$_queue$shift.resolve;\n reject = _this$_queue$shift.reject;\n cb = yield _asyncToGenerator(function* () {\n try {\n returned = yield task(...args);\n return function () {\n return resolve(returned);\n };\n } catch (error1) {\n error = error1;\n return function () {\n return reject(error);\n };\n }\n })();\n _this._running--;\n\n _this._tryToRun();\n\n return cb();\n }\n })();\n }\n\n schedule(task, ...args) {\n var promise, reject, resolve;\n resolve = reject = null;\n promise = new this.Promise(function (_resolve, _reject) {\n resolve = _resolve;\n return reject = _reject;\n });\n\n this._queue.push({\n task,\n args,\n resolve,\n reject\n });\n\n this._tryToRun();\n\n return promise;\n }\n\n};\nmodule.exports = Sync;", "{\"version\":\"2.19.5\"}\n", "\"use strict\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar Events, Group, IORedisConnection, RedisConnection, Scripts, parser;\nparser = require(\"./parser\");\nEvents = require(\"./Events\");\nRedisConnection = require(\"./RedisConnection\");\nIORedisConnection = require(\"./IORedisConnection\");\nScripts = require(\"./Scripts\");\n\nGroup = function () {\n class Group {\n constructor(limiterOptions = {}) {\n this.deleteKey = this.deleteKey.bind(this);\n this.limiterOptions = limiterOptions;\n parser.load(this.limiterOptions, this.defaults, this);\n this.Events = new Events(this);\n this.instances = {};\n this.Bottleneck = require(\"./Bottleneck\");\n\n this._startAutoCleanup();\n\n this.sharedConnection = this.connection != null;\n\n if (this.connection == null) {\n if (this.limiterOptions.datastore === \"redis\") {\n this.connection = new RedisConnection(Object.assign({}, this.limiterOptions, {\n Events: this.Events\n }));\n } else if (this.limiterOptions.datastore === \"ioredis\") {\n this.connection = new IORedisConnection(Object.assign({}, this.limiterOptions, {\n Events: this.Events\n }));\n }\n }\n }\n\n key(key = \"\") {\n var ref;\n return (ref = this.instances[key]) != null ? ref : (() => {\n var limiter;\n limiter = this.instances[key] = new this.Bottleneck(Object.assign(this.limiterOptions, {\n id: `${this.id}-${key}`,\n timeout: this.timeout,\n connection: this.connection\n }));\n this.Events.trigger(\"created\", limiter, key);\n return limiter;\n })();\n }\n\n deleteKey(key = \"\") {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n var deleted, instance;\n instance = _this.instances[key];\n\n if (_this.connection) {\n deleted = yield _this.connection.__runCommand__(['del', ...Scripts.allKeys(`${_this.id}-${key}`)]);\n }\n\n if (instance != null) {\n delete _this.instances[key];\n yield instance.disconnect();\n }\n\n return instance != null || deleted > 0;\n })();\n }\n\n limiters() {\n var k, ref, results, v;\n ref = this.instances;\n results = [];\n\n for (k in ref) {\n v = ref[k];\n results.push({\n key: k,\n limiter: v\n });\n }\n\n return results;\n }\n\n keys() {\n return Object.keys(this.instances);\n }\n\n clusterKeys() {\n var _this2 = this;\n\n return _asyncToGenerator(function* () {\n var cursor, end, found, i, k, keys, len, next, start;\n\n if (_this2.connection == null) {\n return _this2.Promise.resolve(_this2.keys());\n }\n\n keys = [];\n cursor = null;\n start = `b_${_this2.id}-`.length;\n end = \"_settings\".length;\n\n while (cursor !== 0) {\n var _ref = yield _this2.connection.__runCommand__([\"scan\", cursor != null ? cursor : 0, \"match\", `b_${_this2.id}-*_settings`, \"count\", 10000]);\n\n var _ref2 = _slicedToArray(_ref, 2);\n\n next = _ref2[0];\n found = _ref2[1];\n cursor = ~~next;\n\n for (i = 0, len = found.length; i < len; i++) {\n k = found[i];\n keys.push(k.slice(start, -end));\n }\n }\n\n return keys;\n })();\n }\n\n _startAutoCleanup() {\n var _this3 = this;\n\n var base;\n clearInterval(this.interval);\n return typeof (base = this.interval = setInterval(\n /*#__PURE__*/\n _asyncToGenerator(function* () {\n var e, k, ref, results, time, v;\n time = Date.now();\n ref = _this3.instances;\n results = [];\n\n for (k in ref) {\n v = ref[k];\n\n try {\n if (yield v._store.__groupCheck__(time)) {\n results.push(_this3.deleteKey(k));\n } else {\n results.push(void 0);\n }\n } catch (error) {\n e = error;\n results.push(v.Events.trigger(\"error\", e));\n }\n }\n\n return results;\n }), this.timeout / 2)).unref === \"function\" ? base.unref() : void 0;\n }\n\n updateSettings(options = {}) {\n parser.overwrite(options, this.defaults, this);\n parser.overwrite(options, options, this.limiterOptions);\n\n if (options.timeout != null) {\n return this._startAutoCleanup();\n }\n }\n\n disconnect(flush = true) {\n var ref;\n\n if (!this.sharedConnection) {\n return (ref = this.connection) != null ? ref.disconnect(flush) : void 0;\n }\n }\n\n }\n\n ;\n Group.prototype.defaults = {\n timeout: 1000 * 60 * 5,\n connection: null,\n Promise: Promise,\n id: \"group-key\"\n };\n return Group;\n}.call(void 0);\n\nmodule.exports = Group;", "\"use strict\";\n\nvar Batcher, Events, parser;\nparser = require(\"./parser\");\nEvents = require(\"./Events\");\n\nBatcher = function () {\n class Batcher {\n constructor(options = {}) {\n this.options = options;\n parser.load(this.options, this.defaults, this);\n this.Events = new Events(this);\n this._arr = [];\n\n this._resetPromise();\n\n this._lastFlush = Date.now();\n }\n\n _resetPromise() {\n return this._promise = new this.Promise((res, rej) => {\n return this._resolve = res;\n });\n }\n\n _flush() {\n clearTimeout(this._timeout);\n this._lastFlush = Date.now();\n\n this._resolve();\n\n this.Events.trigger(\"batch\", this._arr);\n this._arr = [];\n return this._resetPromise();\n }\n\n add(data) {\n var ret;\n\n this._arr.push(data);\n\n ret = this._promise;\n\n if (this._arr.length === this.maxSize) {\n this._flush();\n } else if (this.maxTime != null && this._arr.length === 1) {\n this._timeout = setTimeout(() => {\n return this._flush();\n }, this.maxTime);\n }\n\n return ret;\n }\n\n }\n\n ;\n Batcher.prototype.defaults = {\n maxTime: null,\n maxSize: null,\n Promise: Promise\n };\n return Batcher;\n}.call(void 0);\n\nmodule.exports = Batcher;", "\"use strict\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar Bottleneck,\n DEFAULT_PRIORITY,\n Events,\n Job,\n LocalDatastore,\n NUM_PRIORITIES,\n Queues,\n RedisDatastore,\n States,\n Sync,\n parser,\n splice = [].splice;\nNUM_PRIORITIES = 10;\nDEFAULT_PRIORITY = 5;\nparser = require(\"./parser\");\nQueues = require(\"./Queues\");\nJob = require(\"./Job\");\nLocalDatastore = require(\"./LocalDatastore\");\nRedisDatastore = require(\"./RedisDatastore\");\nEvents = require(\"./Events\");\nStates = require(\"./States\");\nSync = require(\"./Sync\");\n\nBottleneck = function () {\n class Bottleneck {\n constructor(options = {}, ...invalid) {\n var storeInstanceOptions, storeOptions;\n this._addToQueue = this._addToQueue.bind(this);\n\n this._validateOptions(options, invalid);\n\n parser.load(options, this.instanceDefaults, this);\n this._queues = new Queues(NUM_PRIORITIES);\n this._scheduled = {};\n this._states = new States([\"RECEIVED\", \"QUEUED\", \"RUNNING\", \"EXECUTING\"].concat(this.trackDoneStatus ? [\"DONE\"] : []));\n this._limiter = null;\n this.Events = new Events(this);\n this._submitLock = new Sync(\"submit\", this.Promise);\n this._registerLock = new Sync(\"register\", this.Promise);\n storeOptions = parser.load(options, this.storeDefaults, {});\n\n this._store = function () {\n if (this.datastore === \"redis\" || this.datastore === \"ioredis\" || this.connection != null) {\n storeInstanceOptions = parser.load(options, this.redisStoreDefaults, {});\n return new RedisDatastore(this, storeOptions, storeInstanceOptions);\n } else if (this.datastore === \"local\") {\n storeInstanceOptions = parser.load(options, this.localStoreDefaults, {});\n return new LocalDatastore(this, storeOptions, storeInstanceOptions);\n } else {\n throw new Bottleneck.prototype.BottleneckError(`Invalid datastore type: ${this.datastore}`);\n }\n }.call(this);\n\n this._queues.on(\"leftzero\", () => {\n var ref;\n return (ref = this._store.heartbeat) != null ? typeof ref.ref === \"function\" ? ref.ref() : void 0 : void 0;\n });\n\n this._queues.on(\"zero\", () => {\n var ref;\n return (ref = this._store.heartbeat) != null ? typeof ref.unref === \"function\" ? ref.unref() : void 0 : void 0;\n });\n }\n\n _validateOptions(options, invalid) {\n if (!(options != null && typeof options === \"object\" && invalid.length === 0)) {\n throw new Bottleneck.prototype.BottleneckError(\"Bottleneck v2 takes a single object argument. Refer to https://github.com/SGrondin/bottleneck#upgrading-to-v2 if you're upgrading from Bottleneck v1.\");\n }\n }\n\n ready() {\n return this._store.ready;\n }\n\n clients() {\n return this._store.clients;\n }\n\n channel() {\n return `b_${this.id}`;\n }\n\n channel_client() {\n return `b_${this.id}_${this._store.clientId}`;\n }\n\n publish(message) {\n return this._store.__publish__(message);\n }\n\n disconnect(flush = true) {\n return this._store.__disconnect__(flush);\n }\n\n chain(_limiter) {\n this._limiter = _limiter;\n return this;\n }\n\n queued(priority) {\n return this._queues.queued(priority);\n }\n\n clusterQueued() {\n return this._store.__queued__();\n }\n\n empty() {\n return this.queued() === 0 && this._submitLock.isEmpty();\n }\n\n running() {\n return this._store.__running__();\n }\n\n done() {\n return this._store.__done__();\n }\n\n jobStatus(id) {\n return this._states.jobStatus(id);\n }\n\n jobs(status) {\n return this._states.statusJobs(status);\n }\n\n counts() {\n return this._states.statusCounts();\n }\n\n _randomIndex() {\n return Math.random().toString(36).slice(2);\n }\n\n check(weight = 1) {\n return this._store.__check__(weight);\n }\n\n _clearGlobalState(index) {\n if (this._scheduled[index] != null) {\n clearTimeout(this._scheduled[index].expiration);\n delete this._scheduled[index];\n return true;\n } else {\n return false;\n }\n }\n\n _free(index, job, options, eventInfo) {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n var e, running;\n\n try {\n var _ref = yield _this._store.__free__(index, options.weight);\n\n running = _ref.running;\n\n _this.Events.trigger(\"debug\", `Freed ${options.id}`, eventInfo);\n\n if (running === 0 && _this.empty()) {\n return _this.Events.trigger(\"idle\");\n }\n } catch (error1) {\n e = error1;\n return _this.Events.trigger(\"error\", e);\n }\n })();\n }\n\n _run(index, job, wait) {\n var clearGlobalState, free, run;\n job.doRun();\n clearGlobalState = this._clearGlobalState.bind(this, index);\n run = this._run.bind(this, index, job);\n free = this._free.bind(this, index, job);\n return this._scheduled[index] = {\n timeout: setTimeout(() => {\n return job.doExecute(this._limiter, clearGlobalState, run, free);\n }, wait),\n expiration: job.options.expiration != null ? setTimeout(function () {\n return job.doExpire(clearGlobalState, run, free);\n }, wait + job.options.expiration) : void 0,\n job: job\n };\n }\n\n _drainOne(capacity) {\n return this._registerLock.schedule(() => {\n var args, index, next, options, queue;\n\n if (this.queued() === 0) {\n return this.Promise.resolve(null);\n }\n\n queue = this._queues.getFirst();\n\n var _next2 = next = queue.first();\n\n options = _next2.options;\n args = _next2.args;\n\n if (capacity != null && options.weight > capacity) {\n return this.Promise.resolve(null);\n }\n\n this.Events.trigger(\"debug\", `Draining ${options.id}`, {\n args,\n options\n });\n index = this._randomIndex();\n return this._store.__register__(index, options.weight, options.expiration).then(({\n success,\n wait,\n reservoir\n }) => {\n var empty;\n this.Events.trigger(\"debug\", `Drained ${options.id}`, {\n success,\n args,\n options\n });\n\n if (success) {\n queue.shift();\n empty = this.empty();\n\n if (empty) {\n this.Events.trigger(\"empty\");\n }\n\n if (reservoir === 0) {\n this.Events.trigger(\"depleted\", empty);\n }\n\n this._run(index, next, wait);\n\n return this.Promise.resolve(options.weight);\n } else {\n return this.Promise.resolve(null);\n }\n });\n });\n }\n\n _drainAll(capacity, total = 0) {\n return this._drainOne(capacity).then(drained => {\n var newCapacity;\n\n if (drained != null) {\n newCapacity = capacity != null ? capacity - drained : capacity;\n return this._drainAll(newCapacity, total + drained);\n } else {\n return this.Promise.resolve(total);\n }\n }).catch(e => {\n return this.Events.trigger(\"error\", e);\n });\n }\n\n _dropAllQueued(message) {\n return this._queues.shiftAll(function (job) {\n return job.doDrop({\n message\n });\n });\n }\n\n stop(options = {}) {\n var done, waitForExecuting;\n options = parser.load(options, this.stopDefaults);\n\n waitForExecuting = at => {\n var finished;\n\n finished = () => {\n var counts;\n counts = this._states.counts;\n return counts[0] + counts[1] + counts[2] + counts[3] === at;\n };\n\n return new this.Promise((resolve, reject) => {\n if (finished()) {\n return resolve();\n } else {\n return this.on(\"done\", () => {\n if (finished()) {\n this.removeAllListeners(\"done\");\n return resolve();\n }\n });\n }\n });\n };\n\n done = options.dropWaitingJobs ? (this._run = function (index, next) {\n return next.doDrop({\n message: options.dropErrorMessage\n });\n }, this._drainOne = () => {\n return this.Promise.resolve(null);\n }, this._registerLock.schedule(() => {\n return this._submitLock.schedule(() => {\n var k, ref, v;\n ref = this._scheduled;\n\n for (k in ref) {\n v = ref[k];\n\n if (this.jobStatus(v.job.options.id) === \"RUNNING\") {\n clearTimeout(v.timeout);\n clearTimeout(v.expiration);\n v.job.doDrop({\n message: options.dropErrorMessage\n });\n }\n }\n\n this._dropAllQueued(options.dropErrorMessage);\n\n return waitForExecuting(0);\n });\n })) : this.schedule({\n priority: NUM_PRIORITIES - 1,\n weight: 0\n }, () => {\n return waitForExecuting(1);\n });\n\n this._receive = function (job) {\n return job._reject(new Bottleneck.prototype.BottleneckError(options.enqueueErrorMessage));\n };\n\n this.stop = () => {\n return this.Promise.reject(new Bottleneck.prototype.BottleneckError(\"stop() has already been called\"));\n };\n\n return done;\n }\n\n _addToQueue(job) {\n var _this2 = this;\n\n return _asyncToGenerator(function* () {\n var args, blocked, error, options, reachedHWM, shifted, strategy;\n args = job.args;\n options = job.options;\n\n try {\n var _ref2 = yield _this2._store.__submit__(_this2.queued(), options.weight);\n\n reachedHWM = _ref2.reachedHWM;\n blocked = _ref2.blocked;\n strategy = _ref2.strategy;\n } catch (error1) {\n error = error1;\n\n _this2.Events.trigger(\"debug\", `Could not queue ${options.id}`, {\n args,\n options,\n error\n });\n\n job.doDrop({\n error\n });\n return false;\n }\n\n if (blocked) {\n job.doDrop();\n return true;\n } else if (reachedHWM) {\n shifted = strategy === Bottleneck.prototype.strategy.LEAK ? _this2._queues.shiftLastFrom(options.priority) : strategy === Bottleneck.prototype.strategy.OVERFLOW_PRIORITY ? _this2._queues.shiftLastFrom(options.priority + 1) : strategy === Bottleneck.prototype.strategy.OVERFLOW ? job : void 0;\n\n if (shifted != null) {\n shifted.doDrop();\n }\n\n if (shifted == null || strategy === Bottleneck.prototype.strategy.OVERFLOW) {\n if (shifted == null) {\n job.doDrop();\n }\n\n return reachedHWM;\n }\n }\n\n job.doQueue(reachedHWM, blocked);\n\n _this2._queues.push(job);\n\n yield _this2._drainAll();\n return reachedHWM;\n })();\n }\n\n _receive(job) {\n if (this._states.jobStatus(job.options.id) != null) {\n job._reject(new Bottleneck.prototype.BottleneckError(`A job with the same id already exists (id=${job.options.id})`));\n\n return false;\n } else {\n job.doReceive();\n return this._submitLock.schedule(this._addToQueue, job);\n }\n }\n\n submit(...args) {\n var cb, fn, job, options, ref, ref1, task;\n\n if (typeof args[0] === \"function\") {\n var _ref3, _ref4, _splice$call, _splice$call2;\n\n ref = args, (_ref3 = ref, _ref4 = _toArray(_ref3), fn = _ref4[0], args = _ref4.slice(1), _ref3), (_splice$call = splice.call(args, -1), _splice$call2 = _slicedToArray(_splice$call, 1), cb = _splice$call2[0], _splice$call);\n options = parser.load({}, this.jobDefaults);\n } else {\n var _ref5, _ref6, _splice$call3, _splice$call4;\n\n ref1 = args, (_ref5 = ref1, _ref6 = _toArray(_ref5), options = _ref6[0], fn = _ref6[1], args = _ref6.slice(2), _ref5), (_splice$call3 = splice.call(args, -1), _splice$call4 = _slicedToArray(_splice$call3, 1), cb = _splice$call4[0], _splice$call3);\n options = parser.load(options, this.jobDefaults);\n }\n\n task = (...args) => {\n return new this.Promise(function (resolve, reject) {\n return fn(...args, function (...args) {\n return (args[0] != null ? reject : resolve)(args);\n });\n });\n };\n\n job = new Job(task, args, options, this.jobDefaults, this.rejectOnDrop, this.Events, this._states, this.Promise);\n job.promise.then(function (args) {\n return typeof cb === \"function\" ? cb(...args) : void 0;\n }).catch(function (args) {\n if (Array.isArray(args)) {\n return typeof cb === \"function\" ? cb(...args) : void 0;\n } else {\n return typeof cb === \"function\" ? cb(args) : void 0;\n }\n });\n return this._receive(job);\n }\n\n schedule(...args) {\n var job, options, task;\n\n if (typeof args[0] === \"function\") {\n var _args = args;\n\n var _args2 = _toArray(_args);\n\n task = _args2[0];\n args = _args2.slice(1);\n options = {};\n } else {\n var _args3 = args;\n\n var _args4 = _toArray(_args3);\n\n options = _args4[0];\n task = _args4[1];\n args = _args4.slice(2);\n }\n\n job = new Job(task, args, options, this.jobDefaults, this.rejectOnDrop, this.Events, this._states, this.Promise);\n\n this._receive(job);\n\n return job.promise;\n }\n\n wrap(fn) {\n var schedule, wrapped;\n schedule = this.schedule.bind(this);\n\n wrapped = function wrapped(...args) {\n return schedule(fn.bind(this), ...args);\n };\n\n wrapped.withOptions = function (options, ...args) {\n return schedule(options, fn, ...args);\n };\n\n return wrapped;\n }\n\n updateSettings(options = {}) {\n var _this3 = this;\n\n return _asyncToGenerator(function* () {\n yield _this3._store.__updateSettings__(parser.overwrite(options, _this3.storeDefaults));\n parser.overwrite(options, _this3.instanceDefaults, _this3);\n return _this3;\n })();\n }\n\n currentReservoir() {\n return this._store.__currentReservoir__();\n }\n\n incrementReservoir(incr = 0) {\n return this._store.__incrementReservoir__(incr);\n }\n\n }\n\n ;\n Bottleneck.default = Bottleneck;\n Bottleneck.Events = Events;\n Bottleneck.version = Bottleneck.prototype.version = require(\"./version.json\").version;\n Bottleneck.strategy = Bottleneck.prototype.strategy = {\n LEAK: 1,\n OVERFLOW: 2,\n OVERFLOW_PRIORITY: 4,\n BLOCK: 3\n };\n Bottleneck.BottleneckError = Bottleneck.prototype.BottleneckError = require(\"./BottleneckError\");\n Bottleneck.Group = Bottleneck.prototype.Group = require(\"./Group\");\n Bottleneck.RedisConnection = Bottleneck.prototype.RedisConnection = require(\"./RedisConnection\");\n Bottleneck.IORedisConnection = Bottleneck.prototype.IORedisConnection = require(\"./IORedisConnection\");\n Bottleneck.Batcher = Bottleneck.prototype.Batcher = require(\"./Batcher\");\n Bottleneck.prototype.jobDefaults = {\n priority: DEFAULT_PRIORITY,\n weight: 1,\n expiration: null,\n id: \"<no-id>\"\n };\n Bottleneck.prototype.storeDefaults = {\n maxConcurrent: null,\n minTime: 0,\n highWater: null,\n strategy: Bottleneck.prototype.strategy.LEAK,\n penalty: null,\n reservoir: null,\n reservoirRefreshInterval: null,\n reservoirRefreshAmount: null,\n reservoirIncreaseInterval: null,\n reservoirIncreaseAmount: null,\n reservoirIncreaseMaximum: null\n };\n Bottleneck.prototype.localStoreDefaults = {\n Promise: Promise,\n timeout: null,\n heartbeatInterval: 250\n };\n Bottleneck.prototype.redisStoreDefaults = {\n Promise: Promise,\n timeout: null,\n heartbeatInterval: 5000,\n clientTimeout: 10000,\n Redis: null,\n clientOptions: {},\n clusterNodes: null,\n clearDatastore: false,\n connection: null\n };\n Bottleneck.prototype.instanceDefaults = {\n datastore: \"local\",\n connection: null,\n id: \"<no-id>\",\n rejectOnDrop: true,\n trackDoneStatus: false,\n Promise: Promise\n };\n Bottleneck.prototype.stopDefaults = {\n enqueueErrorMessage: \"This limiter has been stopped and cannot accept new jobs.\",\n dropWaitingJobs: true,\n dropErrorMessage: \"This limiter has been stopped.\"\n };\n return Bottleneck;\n}.call(void 0);\n\nmodule.exports = Bottleneck;", "\"use strict\";\n\nmodule.exports = require(\"./Bottleneck\");", "import {environmentVariables} from '../constants.js'\n\n/**\n * Enum that represents the environment to use for a given service.\n *\n * @readonly\n */\nexport enum Environment {\n Local = 'local',\n Production = 'production',\n}\n\n/**\n * Returns the environment to use for a given service.\n *\n * @param env - Environment variables.\n * @returns The environment to use for a given service.\n */\nexport function serviceEnvironment(env = process.env): Environment {\n const value = env[environmentVariables.serviceEnv]\n if (value === 'local') {\n return Environment.Local\n } else {\n return Environment.Production\n }\n}\n\n/**\n * Returns true if the environment is local.\n *\n * @param env - Environment variables.\n * @returns True if the environment is local.\n */\nexport function isLocalEnvironment(env = process.env): boolean {\n return serviceEnvironment(env) === Environment.Local\n}\n", "import {BugError} from './error.js'\nimport {getPartnersToken} from './environment.js'\nimport {nonRandomUUID} from './crypto.js'\nimport * as sessionStore from '../../private/node/session/store.js'\nimport {\n exchangeCustomPartnerToken,\n exchangeCliTokenForAppManagementAccessToken,\n exchangeCliTokenForBusinessPlatformAccessToken,\n} from '../../private/node/session/exchange.js'\nimport {outputContent, outputToken, outputDebug} from '../../public/node/output.js'\nimport {\n AdminAPIScope,\n AppManagementAPIScope,\n BusinessPlatformScope,\n EnsureAuthenticatedAdditionalOptions,\n PartnersAPIScope,\n StorefrontRendererScope,\n ensureAuthenticated,\n setLastSeenAuthMethod,\n setLastSeenUserIdAfterAuth,\n} from '../../private/node/session.js'\nimport {isThemeAccessSession} from '../../private/node/api/rest.js'\n\n/**\n * Session Object to access the Admin API, includes the token and the store FQDN.\n */\nexport interface AdminSession {\n token: string\n storeFqdn: string\n}\n\n/**\n * Session Object for Partners API and App Management API access.\n */\nexport interface Session {\n token: string\n businessPlatformToken: string\n accountInfo: AccountInfo\n userId: string\n}\n\nexport type AccountInfo = UserAccountInfo | ServiceAccountInfo | UnknownAccountInfo\n\ninterface UserAccountInfo {\n type: 'UserAccount'\n email: string\n}\n\ninterface ServiceAccountInfo {\n type: 'ServiceAccount'\n orgName: string\n}\n\ninterface UnknownAccountInfo {\n type: 'UnknownAccount'\n}\n\n/**\n * Type guard to check if an account is a UserAccount.\n *\n * @param account - The account to check.\n * @returns True if the account is a UserAccount.\n */\nexport function isUserAccount(account: AccountInfo): account is UserAccountInfo {\n return account.type === 'UserAccount'\n}\n\n/**\n * Type guard to check if an account is a ServiceAccount.\n *\n * @param account - The account to check.\n * @returns True if the account is a ServiceAccount.\n */\nexport function isServiceAccount(account: AccountInfo): account is ServiceAccountInfo {\n return account.type === 'ServiceAccount'\n}\n\n/**\n * Ensure that we have a valid session with no particular scopes.\n *\n * @param env - Optional environment variables to use.\n * @param options - Optional extra options to use.\n * @returns The user ID.\n */\nexport async function ensureAuthenticatedUser(\n env = process.env,\n options: EnsureAuthenticatedAdditionalOptions = {},\n): Promise<{userId: string}> {\n outputDebug(outputContent`Ensuring that the user is authenticated with no particular scopes`)\n const tokens = await ensureAuthenticated({}, env, options)\n return {userId: tokens.userId}\n}\n\n/**\n * Ensure that we have a valid session to access the Partners API.\n * If SHOPIFY_CLI_PARTNERS_TOKEN exists, that token will be used to obtain a valid Partners Token\n * If SHOPIFY_CLI_PARTNERS_TOKEN exists, scopes will be ignored.\n *\n * @param scopes - Optional array of extra scopes to authenticate with.\n * @param env - Optional environment variables to use.\n * @param options - Optional extra options to use.\n * @returns The access token for the Partners API.\n */\nexport async function ensureAuthenticatedPartners(\n scopes: PartnersAPIScope[] = [],\n env = process.env,\n options: EnsureAuthenticatedAdditionalOptions = {},\n): Promise<{token: string; userId: string}> {\n outputDebug(outputContent`Ensuring that the user is authenticated with the Partners API with the following scopes:\n${outputToken.json(scopes)}\n`)\n const envToken = getPartnersToken()\n if (envToken) {\n const result = await exchangeCustomPartnerToken(envToken)\n return {token: result.accessToken, userId: result.userId}\n }\n const tokens = await ensureAuthenticated({partnersApi: {scopes}}, env, options)\n if (!tokens.partners) {\n throw new BugError('No partners token found after ensuring authenticated')\n }\n return {token: tokens.partners, userId: tokens.userId}\n}\n\n/**\n * Ensure that we have a valid session to access the App Management API.\n *\n * @param options - Optional extra options to use.\n * @param appManagementScopes - Optional array of extra scopes to authenticate with.\n * @param businessPlatformScopes - Optional array of extra scopes to authenticate with.\n * @param env - Optional environment variables to use.\n * @returns The access token for the App Management API.\n */\nexport async function ensureAuthenticatedAppManagementAndBusinessPlatform(\n options: EnsureAuthenticatedAdditionalOptions = {},\n appManagementScopes: AppManagementAPIScope[] = [],\n businessPlatformScopes: BusinessPlatformScope[] = [],\n env = process.env,\n): Promise<{appManagementToken: string; userId: string; businessPlatformToken: string}> {\n outputDebug(outputContent`Ensuring that the user is authenticated with the App Management API with the following scopes:\n${outputToken.json(appManagementScopes)}\n`)\n\n const envToken = getPartnersToken()\n if (envToken) {\n const appManagmentToken = await exchangeCliTokenForAppManagementAccessToken(envToken)\n const businessPlatformToken = await exchangeCliTokenForBusinessPlatformAccessToken(envToken)\n\n return {\n appManagementToken: appManagmentToken.accessToken,\n userId: appManagmentToken.userId,\n businessPlatformToken: businessPlatformToken.accessToken,\n }\n }\n\n const tokens = await ensureAuthenticated(\n {appManagementApi: {scopes: appManagementScopes}, businessPlatformApi: {scopes: businessPlatformScopes}},\n env,\n options,\n )\n if (!tokens.appManagement || !tokens.businessPlatform) {\n throw new BugError('No App Management or Business Platform token found after ensuring authenticated')\n }\n\n return {\n appManagementToken: tokens.appManagement,\n userId: tokens.userId,\n businessPlatformToken: tokens.businessPlatform,\n }\n}\n\n/**\n * Ensure that we have a valid session to access the Storefront API.\n *\n * @param scopes - Optional array of extra scopes to authenticate with.\n * @param password - Optional password to use.\n * @param options - Optional extra options to use.\n * @returns The access token for the Storefront API.\n */\nexport async function ensureAuthenticatedStorefront(\n scopes: StorefrontRendererScope[] = [],\n password: string | undefined = undefined,\n options: EnsureAuthenticatedAdditionalOptions = {},\n): Promise<string> {\n if (password) {\n const session = {token: password, storeFqdn: ''}\n const authMethod = isThemeAccessSession(session) ? 'theme_access_token' : 'custom_app_token'\n setLastSeenAuthMethod(authMethod)\n setLastSeenUserIdAfterAuth(nonRandomUUID(password))\n return password\n }\n\n outputDebug(outputContent`Ensuring that the user is authenticated with the Storefront API with the following scopes:\n${outputToken.json(scopes)}\n`)\n const tokens = await ensureAuthenticated({storefrontRendererApi: {scopes}}, process.env, options)\n if (!tokens.storefront) {\n throw new BugError('No storefront token found after ensuring authenticated')\n }\n return tokens.storefront\n}\n\n/**\n * Ensure that we have a valid Admin session for the given store.\n *\n * @param store - Store fqdn to request auth for.\n * @param scopes - Optional array of extra scopes to authenticate with.\n * @param options - Optional extra options to use.\n * @returns The access token for the Admin API.\n */\nexport async function ensureAuthenticatedAdmin(\n store: string,\n scopes: AdminAPIScope[] = [],\n options: EnsureAuthenticatedAdditionalOptions = {},\n): Promise<AdminSession> {\n outputDebug(outputContent`Ensuring that the user is authenticated with the Admin API with the following scopes for the store ${outputToken.raw(\n store,\n )}:\n${outputToken.json(scopes)}\n`)\n const tokens = await ensureAuthenticated({adminApi: {scopes, storeFqdn: store}}, process.env, {\n ...options,\n })\n if (!tokens.admin) {\n throw new BugError('No admin token found after ensuring authenticated')\n }\n return tokens.admin\n}\n\n/**\n * Ensure that we have a valid session to access the Theme API.\n * If a password is provided, that token will be used against Theme Access API.\n * Otherwise, it will ensure that the user is authenticated with the Admin API.\n *\n * @param store - Store fqdn to request auth for.\n * @param password - Password generated from Theme Access app.\n * @param scopes - Optional array of extra scopes to authenticate with.\n * @param options - Optional extra options to use.\n * @returns The access token and store.\n */\nexport async function ensureAuthenticatedThemes(\n store: string,\n password: string | undefined,\n scopes: AdminAPIScope[] = [],\n options: EnsureAuthenticatedAdditionalOptions = {},\n): Promise<AdminSession> {\n outputDebug(outputContent`Ensuring that the user is authenticated with the Theme API with the following scopes:\n${outputToken.json(scopes)}\n`)\n if (password) {\n const session = {token: password, storeFqdn: store}\n const authMethod = isThemeAccessSession(session) ? 'theme_access_token' : 'custom_app_token'\n setLastSeenAuthMethod(authMethod)\n setLastSeenUserIdAfterAuth(nonRandomUUID(password))\n return session\n }\n return ensureAuthenticatedAdmin(store, scopes, options)\n}\n\n/**\n * Ensure that we have a valid session to access the Business Platform API.\n *\n * @param scopes - Optional array of extra scopes to authenticate with.\n * @returns The access token for the Business Platform API.\n */\nexport async function ensureAuthenticatedBusinessPlatform(scopes: BusinessPlatformScope[] = []): Promise<string> {\n outputDebug(outputContent`Ensuring that the user is authenticated with the Business Platform API with the following scopes:\n${outputToken.json(scopes)}\n`)\n const tokens = await ensureAuthenticated({businessPlatformApi: {scopes}}, process.env)\n if (!tokens.businessPlatform) {\n throw new BugError('No business-platform token found after ensuring authenticated')\n }\n return tokens.businessPlatform\n}\n\n/**\n * Logout from Shopify.\n *\n * @returns A promise that resolves when the logout is complete.\n */\nexport function logout(): Promise<void> {\n return sessionStore.remove()\n}\n", "import {SessionsSchema} from './schema.js'\nimport {getSessions, removeCurrentSessionId, removeSessions, setSessions} from '../conf-store.js'\nimport {identityFqdn} from '../../../public/node/context/fqdn.js'\nimport type {Sessions} from './schema.js'\n\n/**\n * Serializes the session as a JSON and stores it in the system.\n * @param session - the session to store.\n */\nexport async function store(sessions: Sessions) {\n const jsonSessions = JSON.stringify(sessions)\n setSessions(jsonSessions)\n}\n\n/**\n * Fetches the sessions from the local storage and returns it.\n * If the format of the object is invalid, the method will discard it.\n * @returns Returns a promise that resolves with the sessions object if it exists and is valid.\n */\nexport async function fetch(): Promise<Sessions | undefined> {\n const content = getSessions()\n\n if (!content) {\n return undefined\n }\n const contentJson = JSON.parse(content)\n const parsedSessions = await SessionsSchema.safeParseAsync(contentJson)\n if (parsedSessions.success) {\n return parsedSessions.data\n } else {\n await remove()\n return undefined\n }\n}\n\n/**\n * Removes a session from the system.\n */\nexport async function remove() {\n removeSessions()\n removeCurrentSessionId()\n}\n\n/**\n * Gets the session alias for a given user ID.\n *\n * @param userId - The user ID of the session to get the alias for.\n * @returns The alias for the session if it exists, otherwise undefined.\n */\nexport async function getSessionAlias(userId: string): Promise<string | undefined> {\n const sessions = await fetch()\n if (!sessions) return undefined\n\n const fqdn = await identityFqdn()\n if (!sessions[fqdn] || !sessions[fqdn][userId]) return undefined\n return sessions[fqdn][userId].identity.alias\n}\n\n/**\n * Finds a session by its alias.\n *\n * @param alias - The alias to search for\n * @returns The user ID if found, otherwise undefined\n */\nexport async function findSessionByAlias(alias: string): Promise<string | undefined> {\n const sessions = await fetch()\n if (!sessions) return undefined\n\n const fqdn = await identityFqdn()\n const fqdnSessions = sessions[fqdn]\n if (!fqdnSessions) return undefined\n\n for (const [userId, session] of Object.entries(fqdnSessions)) {\n if (session.identity.alias === alias) {\n return userId\n }\n }\n\n return undefined\n}\n", "import {zod} from '../../../public/node/schema.js'\n\nconst DateSchema = zod.preprocess((arg) => {\n if (typeof arg === 'string' || arg instanceof Date) return new Date(arg)\n return null\n}, zod.date())\n\n/**\n * The schema represents an Identity token.\n */\nconst IdentityTokenSchema = zod.object({\n accessToken: zod.string(),\n refreshToken: zod.string(),\n expiresAt: DateSchema,\n scopes: zod.array(zod.string()),\n userId: zod.string(),\n alias: zod.string().optional(),\n})\n\n/**\n * The schema represents an application token.\n */\nconst ApplicationTokenSchema = zod.object({\n accessToken: zod.string(),\n expiresAt: DateSchema,\n scopes: zod.array(zod.string()),\n storeFqdn: zod.string().optional(),\n})\n\nconst SessionSchema = zod.object({\n identity: IdentityTokenSchema,\n applications: zod.object({}).catchall(ApplicationTokenSchema),\n})\n\n/**\n * This schema represents the format of the session\n * that we cache in the system to avoid unnecessary\n * token exchanges.\n *\n * @example\n * ```\n * {\n * \"accounts.shopify.com\": {\n * \"user-123\": {\n * \"identity\": { ... }, // IdentityTokenSchema\n * \"applications\": {\n * \"mystore.myshopify.com-admin\": { // ApplicationTokenSchema\n * \"accessToken\": \"...\",\n * \"expiresAt\": \"...\",\n * \"scopes\": [\"...\"],\n * },\n * \"partners\": { ... },\n * }\n * },\n * \"8765-4321\": { ... }\n * },\n * \"identity.spin.com\": {\n * \"user-345\": { ... }\n * }\n * }\n * ```\n */\nexport const SessionsSchema = zod.object({}).catchall(zod.object({}).catchall(SessionSchema))\n\nexport type Sessions = zod.infer<typeof SessionsSchema>\nexport type Session = zod.infer<typeof SessionSchema>\nexport type IdentityToken = zod.infer<typeof IdentityTokenSchema>\nexport type ApplicationToken = zod.infer<typeof ApplicationTokenSchema>\n\n/**\n * Confirms that a given identity token structure matches what the schema currently defines.\n *\n * A full re-auth is the expectation if this validation fails.\n */\nexport function validateCachedIdentityTokenStructure(identityToken: unknown) {\n const parsed = IdentityTokenSchema.safeParse(identityToken)\n return parsed.success\n}\n", "import {AbortError, BugError} from '../error.js'\nimport {serviceEnvironment} from '../../../private/node/context/service.js'\nimport {DevServer, DevServerCore} from '../vendor/dev_server/index.js'\nimport {blockPartnersAccess} from '../environment.js'\n\nexport const NotProvidedStoreFQDNError = new AbortError(\n \"Couldn't obtain the Shopify FQDN because the store FQDN was not provided.\",\n)\n\n/**\n * It returns the Partners' API service we should interact with.\n *\n * @returns Fully-qualified domain of the partners service we should interact with.\n */\nexport async function partnersFqdn(): Promise<string> {\n if (blockPartnersAccess()) {\n throw new BugError('Partners API is blocked by the SHOPIFY_CLI_NEVER_USE_PARTNERS_API environment variable.')\n }\n const environment = serviceEnvironment()\n const productionFqdn = 'partners.shopify.com'\n switch (environment) {\n case 'local':\n return new DevServer('partners').host()\n default:\n return productionFqdn\n }\n}\n\n/**\n * It returns the Admin service we should interact with.\n *\n * @returns Fully-qualified domain of the Admin service we should interact with.\n */\nexport async function adminFqdn(): Promise<string> {\n const environment = serviceEnvironment()\n const productionFqdn = 'admin.shopify.com'\n switch (environment) {\n case 'local':\n return new DevServerCore().host('admin')\n default:\n return productionFqdn\n }\n}\n\n/**\n * It returns the App Management API service we should interact with.\n *\n * @returns Fully-qualified domain of the App Management service we should interact with.\n */\nexport async function appManagementFqdn(): Promise<string> {\n const environment = serviceEnvironment()\n const productionFqdn = 'app.shopify.com'\n switch (environment) {\n case 'local':\n return new DevServerCore().host('app')\n default:\n return productionFqdn\n }\n}\n\n/**\n * It returns the App Dev API service we should interact with.\n *\n * @param storeFqdn - The store FQDN.\n * @returns Fully-qualified domain of the App Dev service we should interact with.\n */\nexport async function appDevFqdn(storeFqdn: string): Promise<string> {\n const environment = serviceEnvironment()\n switch (environment) {\n case 'local':\n return new DevServerCore().host('app')\n default:\n return storeFqdn\n }\n}\n/**\n * It returns the Developer Dashboard domain we should interact with.\n *\n * @returns Fully-qualified domain of the Developer Dashboard we should interact with.\n */\nexport async function developerDashboardFqdn(): Promise<string> {\n const environment = serviceEnvironment()\n const productionFqdn = 'dev.shopify.com'\n switch (environment) {\n case 'local':\n return new DevServerCore().host('dev')\n default:\n return productionFqdn\n }\n}\n\n/**\n * It returns the BusinessPlatform' API service we should interact with.\n *\n * @returns Fully-qualified domain of the partners service we should interact with.\n */\nexport async function businessPlatformFqdn(): Promise<string> {\n const environment = serviceEnvironment()\n const productionFqdn = 'destinations.shopifysvc.com'\n switch (environment) {\n case 'local':\n return new DevServer('business-platform').host()\n default:\n return productionFqdn\n }\n}\n\n/**\n * It returns the Identity service we should interact with.\n *\n * @returns Fully-qualified domain of the Identity service we should interact with.\n */\nexport async function identityFqdn(): Promise<string> {\n const environment = serviceEnvironment()\n const productionFqdn = 'accounts.shopify.com'\n switch (environment) {\n case 'local':\n return new DevServer('identity').host()\n default:\n return productionFqdn\n }\n}\n\n/**\n * Normalize the store name to be used in the CLI.\n * It will add the .myshopify.com domain if it's not present.\n *\n * @param store - Store name.\n * @returns Normalized store name.\n */\nexport function normalizeStoreFqdn(store: string): string {\n const storeFqdn = store\n .replace(/^https?:\\/\\//, '')\n .replace(/\\/$/, '')\n .replace(/\\/admin$/, '')\n const addDomain = (storeFqdn: string) => {\n switch (serviceEnvironment()) {\n case 'local':\n return new DevServerCore().host(storeFqdn)\n default:\n return `${storeFqdn}.myshopify.com`\n }\n }\n const containDomain = (storeFqdn: string) =>\n storeFqdn.endsWith('.myshopify.com') || storeFqdn.endsWith('shopify.io') || storeFqdn.endsWith('.shop.dev')\n return containDomain(storeFqdn) ? storeFqdn : addDomain(storeFqdn)\n}\n", "export {isDevServerEnvironment} from './env.js'\nexport {DevServer, DevServerCore} from './dev-server.js'\n", "export const isDevServerEnvironment = process.env.USING_DEV === '1'\n\nexport function assertCompatibleEnvironment() {\n if (!isDevServerEnvironment) {\n throw new Error('DevServer is not supported in this environment')\n }\n}\n", "import fs from 'node:fs'\n\nimport {createServer as createServer2024} from './dev-server-2024.js'\nimport {createServer as createServer2016} from './dev-server-2016.js'\nimport type {DevServer as DevServerType, DevServerCore as DevServerCoreType, HostOptions} from './types.js'\n\nexport {isDevServerEnvironment} from './env.js'\n\nexport class DevServer implements DevServerType {\n private readonly serverImpl: DevServerType\n\n constructor(private readonly projectName: string) {\n if (projectName === 'shopify') {\n throw new Error(\"Use `import {DevServerCore}` for the 'shopify' project\")\n }\n this.serverImpl = inferProjectServer(projectName)\n }\n\n host(options?: HostOptions) {\n return this.serverImpl.host(options)\n }\n\n url(options?: HostOptions) {\n return this.serverImpl.url(options)\n }\n}\n\nexport class DevServerCore implements DevServerCoreType {\n private readonly serverImpl: DevServerType\n\n constructor() {\n this.serverImpl = inferProjectServer('shopify')\n }\n\n host(prefix: string) {\n return this.serverImpl.host({nonstandardHostPrefix: prefix})\n }\n\n url(prefix: string) {\n return this.serverImpl.url({nonstandardHostPrefix: prefix})\n }\n}\n\nconst INFERENCE_MODE_SENTINEL = '/opt/dev/misc/dev-server-inference-mode'\n\nfunction inferProjectServer(projectName: string) {\n if (inferenceModeAndProjectIsEdition2016(projectName)) {\n return createServer2016(projectName)\n } else {\n return createServer2024(projectName)\n }\n}\n\nfunction inferenceModeAndProjectIsEdition2016(projectName: string): boolean {\n try {\n fs.accessSync(INFERENCE_MODE_SENTINEL)\n\n try {\n fs.accessSync(`/opt/nginx/etc/manifest/${projectName}/current/edition-2024`)\n return false\n } catch {\n return true\n }\n } catch {\n return false\n }\n}\n", "import fs from 'node:fs'\n\nimport * as ni from 'network-interfaces'\n\nimport type {HostOptions} from './types.js'\nimport {assertConnectable, getIpFromHosts} from './network/index.js'\nimport {assertCompatibleEnvironment} from './env.js'\n\nconst NON_SHOP_PREFIXES = ['app', 'dev', 'shopify']\nconst BACKEND_PORT = 8080\n\nexport function createServer(projectName: string) {\n return {\n host: (options: HostOptions = {}) => host(projectName, options),\n url: (options: HostOptions = {}) => url(projectName, options),\n }\n}\n\nfunction host(projectName: string, options: HostOptions = {}): string {\n assertCompatibleEnvironment()\n ;(assertRunningOverride || assertRunning2024)(projectName)\n\n const prefix = (options.nonstandardHostPrefix || projectName).replace(/_/g, '-')\n\n if (projectName === 'shopify') {\n if (prefix.endsWith('-dev-api')) {\n const shopName = prefix.replace('-dev-api', '')\n return `${shopName}.dev-api.shop.dev`\n }\n if (!NON_SHOP_PREFIXES.includes(prefix)) {\n return `${prefix}.my.shop.dev`\n }\n }\n return `${prefix}.shop.dev`\n}\n\nfunction url(projectName: string, options: HostOptions = {}): string {\n return `https://${host(projectName, options)}`\n}\n\nfunction assertRunning2024(projectName: string): void {\n assertConnectable({\n projectName,\n addr: getBackendIp(projectName),\n port: BACKEND_PORT,\n })\n}\n\nfunction getBackendIp(projectName: string): string {\n try {\n const backendIp = resolveBackendHost(projectName)\n ni.fromIp(backendIp, {internal: true, ipVersion: 4})\n\n return backendIp\n } catch (error) {\n throw new Error(`DevServer for '${projectName}' is not running: \\`dev up ${projectName}\\` to start it.`)\n }\n}\n\nfunction resolveBackendHost(name: string): string {\n let host: string\n try {\n host = fs.readlinkSync(`/opt/nginx/etc/manifest/${name}/current`)\n } catch (error) {\n host = `${name}.root.shopify.dev.internal`\n }\n\n try {\n return getIpFromHosts(host)\n } catch {\n return host\n }\n}\n\n// Allow overrides for more concise test setup. Meh.\nlet assertRunningOverride: typeof assertRunning2024 | undefined\n\nexport function setAssertRunning(override: typeof assertRunningOverride) {\n assertRunningOverride = override\n}\n", "import {spawnSync} from 'node:child_process'\nimport path from 'node:path'\n\nexport {getIpFromHosts} from './host.js'\n\nexport interface ConnectionArguments {\n projectName: string\n addr: string\n port: number\n timeout?: number\n}\n\n// eslint-disable-next-line prettier/prettier\nconst DEFAULT_CONNECT_TIMEOUT = 100\n// Skip initialization on module load to prevent Spin trying to load a macOS dylib\n// (port checks should never run on Spin anyway)\nlet checkPort: ReturnType<typeof getCheckPortHelper>\n\nexport function assertConnectable(options: ConnectionArguments): void {\n checkPort ||= getCheckPortHelper()\n\n const {port, addr, timeout = DEFAULT_CONNECT_TIMEOUT} = options\n try {\n const normalizedAddr = addr === 'localhost' ? '127.0.0.1' : addr\n const running = checkPort(normalizedAddr, port, timeout)\n if (!running) {\n throw new Error(\n `DevServer for '${options.projectName}' is not running on ${port} / ${addr}: \\`dev up ${options.projectName}\\` to start it.`,\n )\n }\n } catch (err) {\n throw new Error(`DevServer check for '${options.projectName}' on ${port} / ${addr} failed (${err})`)\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function TEST_testResetCheckPort(): void {\n checkPort = getCheckPortHelper()\n}\n\nfunction getCheckPortHelper(): (addr: string, port: number, timeout: number) => boolean {\n return fallbackCheckPort\n}\n\nfunction fallbackCheckPort(address: string, port: number, timeout: number): boolean {\n const result = spawnSync('nc', ['-z', '-w', '1', address, port.toString()], {\n timeout,\n stdio: 'ignore',\n })\n\n return result.status === 0\n}\n", "import fs from 'node:fs'\nimport path from 'node:path'\n\nconst HOSTS_FILE = '/etc/hosts'\n\nlet hostToIpCache: Record<string, string> = {}\nlet lastModifiedTime = 0\n\nfunction loadHostsFile() {\n try {\n const stats = fs.statSync(HOSTS_FILE)\n const modifiedTime = stats.mtimeMs\n\n if (modifiedTime === lastModifiedTime) return\n\n const hostsContent = fs.readFileSync(HOSTS_FILE, 'utf8')\n const lines = hostsContent.split(/\\r?\\n/)\n\n hostToIpCache = {}\n\n for (const line of lines) {\n if (line.trim().startsWith('#') || line.trim() === '') {\n continue\n }\n\n const matches = /^\\s*(?<ipAddress>[^\\s#]+)\\s+(?<matchedHostName>[^\\s#]+)\\s*(#.*)?$/.exec(line)\n if (matches && matches.groups) {\n const {ipAddress, matchedHostName} = matches.groups\n if (matchedHostName && ipAddress) {\n hostToIpCache[matchedHostName] = ipAddress\n }\n }\n }\n\n lastModifiedTime = modifiedTime\n } catch (error) {\n console.log('Error reading hosts file:', error)\n }\n}\n\nexport function getIpFromHosts(hostname: string) {\n loadHostsFile()\n\n const ipAddress = hostToIpCache[hostname]\n if (ipAddress) {\n return ipAddress\n }\n\n throw new Error(`No IP found for hostname: ${hostname}`)\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function TEST_ClearCache() {\n hostToIpCache = {}\n lastModifiedTime = 0\n}\n", "import fs from 'fs'\nimport * as os from 'node:os'\n\nimport {assertConnectable} from './network/index.js'\nimport {assertCompatibleEnvironment} from './env.js'\nimport {HostOptions} from './types.js'\n\nexport function createServer(projectName: string) {\n return {\n host: (options: HostOptions = {}) => host(projectName, options),\n url: (options: HostOptions = {}) => url(projectName, options),\n }\n}\n\nfunction host(projectName: string, options: HostOptions = {}): string {\n assertCompatibleEnvironment()\n ;(assertRunningOverride || assertRunning2016)(projectName)\n\n const prefix = options.nonstandardHostPrefix || projectName\n\n return `${prefix}.myshopify.io`\n}\n\nfunction url(projectName: string, options: HostOptions = {}): string {\n return `https://${host(projectName, options)}`\n}\n\nfunction assertRunning2016(projectName: string): void {\n const [addr, port] = getAddrPort(projectName)\n assertConnectable({projectName, addr, port})\n}\n\nfunction getAddrPort(name: string): [string, number] {\n try {\n const portContent = fs.readFileSync(`${os.homedir()}/.local/run/services/${name}/server/port`, 'utf-8')\n return ['localhost', parseInt(portContent, 10)]\n } catch (error) {\n throw new Error(`DevServer for '${name}' is not running: \\`dev up ${name}\\` to start it.`)\n }\n}\n\n// Allow overrides for more concise test setup. Meh.\nlet assertRunningOverride: typeof assertRunning2016 | undefined\n\nexport function setAssertRunning(override: typeof assertRunningOverride) {\n assertRunningOverride = override\n}\n", "import {ApplicationToken, IdentityToken} from './schema.js'\nimport {applicationId, clientId as getIdentityClientId} from './identity.js'\nimport {tokenExchangeScopes} from './scopes.js'\nimport {API} from '../api.js'\nimport {identityFqdn} from '../../../public/node/context/fqdn.js'\nimport {shopifyFetch} from '../../../public/node/http.js'\nimport {err, ok, Result} from '../../../public/node/result.js'\nimport {AbortError, BugError, ExtendableError} from '../../../public/node/error.js'\nimport {setLastSeenAuthMethod, setLastSeenUserIdAfterAuth} from '../session.js'\nimport {nonRandomUUID} from '../../../public/node/crypto.js'\nimport * as jose from 'jose'\n\nexport class InvalidGrantError extends ExtendableError {}\nexport class InvalidRequestError extends ExtendableError {}\nclass InvalidTargetError extends AbortError {}\n\nexport interface ExchangeScopes {\n admin: string[]\n partners: string[]\n storefront: string[]\n businessPlatform: string[]\n appManagement: string[]\n}\n\n/**\n * Given an identity token, request an application token.\n * @param identityToken - access token obtained in a previous step\n * @param store - the store to use, only needed for admin API\n * @returns An array with the application access tokens.\n */\nexport async function exchangeAccessForApplicationTokens(\n identityToken: IdentityToken,\n scopes: ExchangeScopes,\n store?: string,\n): Promise<{[x: string]: ApplicationToken}> {\n const token = identityToken.accessToken\n\n const [partners, storefront, businessPlatform, admin, appManagement] = await Promise.all([\n requestAppToken('partners', token, scopes.partners),\n requestAppToken('storefront-renderer', token, scopes.storefront),\n requestAppToken('business-platform', token, scopes.businessPlatform),\n store ? requestAppToken('admin', token, scopes.admin, store) : {},\n requestAppToken('app-management', token, scopes.appManagement),\n ])\n\n return {\n ...partners,\n ...storefront,\n ...businessPlatform,\n ...admin,\n ...appManagement,\n }\n}\n\n/**\n * Given an expired access token, refresh it to get a new one.\n */\nexport async function refreshAccessToken(currentToken: IdentityToken): Promise<IdentityToken> {\n const clientId = getIdentityClientId()\n const params = {\n grant_type: 'refresh_token',\n access_token: currentToken.accessToken,\n refresh_token: currentToken.refreshToken,\n client_id: clientId,\n }\n const tokenResult = await tokenRequest(params)\n const value = tokenResult.mapError(tokenRequestErrorHandler).valueOrBug()\n return buildIdentityToken(value, currentToken.userId, currentToken.alias)\n}\n\n/**\n * Given a custom CLI token passed as ENV variable request a valid API access token\n * @param token - The CLI token passed as ENV variable `SHOPIFY_CLI_PARTNERS_TOKEN`\n * @param apiName - The API to exchange for the access token\n * @param scopes - The scopes to request with the access token\n * @returns An instance with the application access tokens.\n */\nasync function exchangeCliTokenForAccessToken(\n apiName: API,\n token: string,\n scopes: string[],\n): Promise<{accessToken: string; userId: string}> {\n const appId = applicationId(apiName)\n try {\n const newToken = await requestAppToken(apiName, token, scopes)\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const accessToken = newToken[appId]!.accessToken\n const userId = nonRandomUUID(token)\n setLastSeenUserIdAfterAuth(userId)\n setLastSeenAuthMethod('partners_token')\n return {accessToken, userId}\n } catch (error) {\n const prettyName = apiName.replace(/-/g, ' ').replace(/\\b\\w/g, (char) => char.toUpperCase())\n throw new AbortError(\n `The custom token provided can't be used for the ${prettyName} API.`,\n 'Ensure the token is correct and not expired.',\n )\n }\n}\n\n/**\n * Given a custom CLI token passed as ENV variable, request a valid Partners API token\n * This token does not accept extra scopes, just the cli one.\n * @param token - The CLI token passed as ENV variable `SHOPIFY_CLI_PARTNERS_TOKEN`\n * @returns An instance with the application access tokens.\n */\nexport async function exchangeCustomPartnerToken(token: string): Promise<{accessToken: string; userId: string}> {\n return exchangeCliTokenForAccessToken('partners', token, tokenExchangeScopes('partners'))\n}\n\n/**\n * Given a custom CLI token passed as ENV variable, request a valid App Management API token\n * @param token - The CLI token passed as ENV variable `SHOPIFY_CLI_PARTNERS_TOKEN`\n * @returns An instance with the application access tokens.\n */\nexport async function exchangeCliTokenForAppManagementAccessToken(\n token: string,\n): Promise<{accessToken: string; userId: string}> {\n return exchangeCliTokenForAccessToken('app-management', token, tokenExchangeScopes('app-management'))\n}\n\n/**\n * Given a custom CLI token passed as ENV variable, request a valid Business Platform API token\n * @param token - The CLI token passed as ENV variable `SHOPIFY_CLI_PARTNERS_TOKEN`\n * @returns An instance with the application access tokens.\n */\nexport async function exchangeCliTokenForBusinessPlatformAccessToken(\n token: string,\n): Promise<{accessToken: string; userId: string}> {\n return exchangeCliTokenForAccessToken('business-platform', token, tokenExchangeScopes('business-platform'))\n}\n\ntype IdentityDeviceError = 'authorization_pending' | 'access_denied' | 'expired_token' | 'slow_down' | 'unknown_failure'\n\n/**\n * Given a deviceCode obtained after starting a device identity flow, request an identity token.\n * @param deviceCode - The device code obtained after starting a device identity flow\n * @param scopes - The scopes to request\n * @returns An instance with the identity access tokens.\n */\nexport async function exchangeDeviceCodeForAccessToken(\n deviceCode: string,\n): Promise<Result<IdentityToken, IdentityDeviceError>> {\n const clientId = await getIdentityClientId()\n\n const params = {\n grant_type: 'urn:ietf:params:oauth:grant-type:device_code',\n device_code: deviceCode,\n client_id: clientId,\n }\n\n const tokenResult = await tokenRequest(params)\n if (tokenResult.isErr()) {\n return err(tokenResult.error.error as IdentityDeviceError)\n }\n const identityToken = buildIdentityToken(tokenResult.value)\n return ok(identityToken)\n}\n\nexport async function requestAppToken(\n api: API,\n token: string,\n scopes: string[] = [],\n store?: string,\n): Promise<{[x: string]: ApplicationToken}> {\n const appId = applicationId(api)\n const clientId = await getIdentityClientId()\n\n const params = {\n grant_type: 'urn:ietf:params:oauth:grant-type:token-exchange',\n requested_token_type: 'urn:ietf:params:oauth:token-type:access_token',\n subject_token_type: 'urn:ietf:params:oauth:token-type:access_token',\n client_id: clientId,\n audience: appId,\n scope: scopes.join(' '),\n subject_token: token,\n ...(api === 'admin' && {destination: `https://${store}/admin`, store}),\n }\n\n let identifier = appId\n if (api === 'admin' && store) {\n identifier = `${store}-${appId}`\n }\n const tokenResult = await tokenRequest(params)\n const value = tokenResult.mapError(tokenRequestErrorHandler).valueOrBug()\n const appToken = buildApplicationToken(value)\n return {[identifier]: appToken}\n}\n\ninterface TokenRequestResult {\n access_token: string\n expires_in: number\n refresh_token: string\n scope: string\n id_token?: string\n}\n\nfunction tokenRequestErrorHandler({error, store}: {error: string; store?: string}) {\n const invalidTargetErrorMessage = `You are not authorized to use the CLI to develop in the provided store${\n store ? `: ${store}` : '.'\n }`\n\n if (error === 'invalid_grant') {\n // There's an scenario when Identity returns \"invalid_grant\" when trying to refresh the token\n // using a valid refresh token. When that happens, we take the user through the authentication flow.\n return new InvalidGrantError()\n }\n if (error === 'invalid_request') {\n // There's an scenario when Identity returns \"invalid_request\" when exchanging an identity token.\n // This means the token is invalid. We clear the session and throw an error to let the caller know.\n return new InvalidRequestError()\n }\n if (error === 'invalid_target') {\n return new InvalidTargetError(invalidTargetErrorMessage, '', [\n 'Ensure you have logged in to the store using the Shopify admin at least once.',\n 'Ensure you are the store owner, or have a staff account if you are attempting to log in to a dev store.',\n 'Ensure you are using the permanent store domain, not a vanity domain.',\n ])\n }\n // eslint-disable-next-line @shopify/cli/no-error-factory-functions\n return new AbortError(error)\n}\n\nasync function tokenRequest(params: {\n [key: string]: string\n}): Promise<Result<TokenRequestResult, {error: string; store?: string}>> {\n const fqdn = await identityFqdn()\n const url = new URL(`https://${fqdn}/oauth/token`)\n url.search = new URLSearchParams(Object.entries(params)).toString()\n\n const res = await shopifyFetch(url.href, {method: 'POST'})\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const payload: any = await res.json()\n\n if (res.ok) return ok(payload)\n\n return err({error: payload.error, store: params.store})\n}\n\nfunction buildIdentityToken(\n result: TokenRequestResult,\n existingUserId?: string,\n existingAlias?: string,\n): IdentityToken {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const userId = existingUserId ?? (result.id_token ? jose.decodeJwt(result.id_token).sub! : undefined)\n\n if (!userId) {\n throw new BugError('Error setting userId for session. No id_token or pre-existing user ID provided.')\n }\n\n return {\n accessToken: result.access_token,\n refreshToken: result.refresh_token,\n expiresAt: new Date(Date.now() + result.expires_in * 1000),\n scopes: result.scope.split(' '),\n userId,\n alias: existingAlias,\n }\n}\n\nfunction buildApplicationToken(result: TokenRequestResult): ApplicationToken {\n return {\n accessToken: result.access_token,\n expiresAt: new Date(Date.now() + result.expires_in * 1000),\n scopes: result.scope.split(' '),\n }\n}\n", "import {API} from '../api.js'\nimport {BugError} from '../../../public/node/error.js'\nimport {Environment, serviceEnvironment} from '../context/service.js'\n\nexport function clientId(): string {\n const environment = serviceEnvironment()\n if (environment === Environment.Local) {\n return 'e5380e02-312a-7408-5718-e07017e9cf52'\n } else if (environment === Environment.Production) {\n return 'fbdb2649-e327-4907-8f67-908d24cfd7e3'\n } else {\n return 'e5380e02-312a-7408-5718-e07017e9cf52'\n }\n}\n\nexport function applicationId(api: API): string {\n switch (api) {\n case 'admin': {\n const environment = serviceEnvironment()\n if (environment === Environment.Local) {\n return 'e92482cebb9bfb9fb5a0199cc770fde3de6c8d16b798ee73e36c9d815e070e52'\n } else if (environment === Environment.Production) {\n return '7ee65a63608843c577db8b23c4d7316ea0a01bd2f7594f8a9c06ea668c1b775c'\n } else {\n return 'e92482cebb9bfb9fb5a0199cc770fde3de6c8d16b798ee73e36c9d815e070e52'\n }\n }\n case 'partners': {\n const environment = serviceEnvironment()\n if (environment === Environment.Local) {\n return 'df89d73339ac3c6c5f0a98d9ca93260763e384d51d6038da129889c308973978'\n } else if (environment === Environment.Production) {\n return '271e16d403dfa18082ffb3d197bd2b5f4479c3fc32736d69296829cbb28d41a6'\n } else {\n return 'df89d73339ac3c6c5f0a98d9ca93260763e384d51d6038da129889c308973978'\n }\n }\n case 'storefront-renderer': {\n const environment = serviceEnvironment()\n if (environment === Environment.Local) {\n return '46f603de-894f-488d-9471-5b721280ff49'\n } else if (environment === Environment.Production) {\n return 'ee139b3d-5861-4d45-b387-1bc3ada7811c'\n } else {\n return '46f603de-894f-488d-9471-5b721280ff49'\n }\n }\n case 'business-platform': {\n const environment = serviceEnvironment()\n if (environment === Environment.Local) {\n return 'ace6dc89-b526-456d-a942-4b8ef6acda4b'\n } else if (environment === Environment.Production) {\n return '32ff8ee5-82b8-4d93-9f8a-c6997cefb7dc'\n } else {\n return 'ace6dc89-b526-456d-a942-4b8ef6acda4b'\n }\n }\n case 'app-management': {\n const environment = serviceEnvironment()\n if (environment === Environment.Production) {\n return '7ee65a63608843c577db8b23c4d7316ea0a01bd2f7594f8a9c06ea668c1b775c'\n } else {\n return 'e92482cebb9bfb9fb5a0199cc770fde3de6c8d16b798ee73e36c9d815e070e52'\n }\n }\n default:\n throw new BugError(`Application id for API of type: ${api}`)\n }\n}\n", "import {allAPIs, API} from '../api.js'\nimport {BugError} from '../../../public/node/error.js'\n\n/**\n * Generate a flat array with all the default scopes for all the APIs plus\n * any custom scope defined by the user.\n * @param extraScopes - custom user-defined scopes\n * @returns Array of scopes\n */\nexport function allDefaultScopes(extraScopes: string[] = []): string[] {\n let scopes = allAPIs.map((api) => defaultApiScopes(api)).flat()\n scopes = ['openid', ...scopes, ...extraScopes].map(scopeTransform)\n return Array.from(new Set(scopes))\n}\n\n/**\n * Generate a flat array with the default scopes for the given API plus\n * any custom scope defined by the user\n * @param api - API to get the scopes for\n * @param extraScopes - custom user-defined scopes\n * @returns Array of scopes\n */\nexport function apiScopes(api: API, extraScopes: string[] = []): string[] {\n const scopes = [...defaultApiScopes(api), ...extraScopes.map(scopeTransform)].map(scopeTransform)\n return Array.from(new Set(scopes))\n}\n\n/**\n * Returns specific scopes required for token exchange with the given API.\n * @param api - API to get the scopes for\n * @returns Array of transformed scopes\n */\nexport function tokenExchangeScopes(api: API): string[] {\n switch (api) {\n case 'partners':\n return [scopeTransform('cli')]\n case 'app-management':\n return [scopeTransform('app-management')]\n case 'business-platform':\n return [scopeTransform('destinations')]\n default:\n throw new BugError(`API not supported for token exchange: ${api}`)\n }\n}\n\nfunction defaultApiScopes(api: API): string[] {\n switch (api) {\n case 'admin':\n return ['graphql', 'themes', 'collaborator']\n case 'storefront-renderer':\n return ['devtools']\n case 'partners':\n return ['cli']\n case 'business-platform':\n return ['destinations', 'store-management', 'on-demand-user-access']\n case 'app-management':\n return ['app-management']\n default:\n throw new BugError(`Unknown API: ${api}`)\n }\n}\n\nfunction scopeTransform(scope: string): string {\n switch (scope) {\n case 'graphql':\n return 'https://api.shopify.com/auth/shop.admin.graphql'\n case 'themes':\n return 'https://api.shopify.com/auth/shop.admin.themes'\n case 'collaborator':\n return 'https://api.shopify.com/auth/partners.collaborator-relationships.readonly'\n case 'cli':\n return 'https://api.shopify.com/auth/partners.app.cli.access'\n case 'devtools':\n return 'https://api.shopify.com/auth/shop.storefront-renderer.devtools'\n case 'destinations':\n return 'https://api.shopify.com/auth/destinations.readonly'\n case 'store-management':\n return 'https://api.shopify.com/auth/organization.store-management'\n case 'on-demand-user-access':\n return 'https://api.shopify.com/auth/organization.on-demand-user-access'\n case 'app-management':\n return 'https://api.shopify.com/auth/organization.apps.manage'\n default:\n return scope\n }\n}\n", "import {FatalError, AbortError, ExtendableError} from './error.js'\n\nexport type Result<TValue, TError> = Ok<TValue, TError> | Err<TValue, TError>\n\n/**\n * Utility metho to create an `Ok` result from a `value`\n *\n * @param value - `value` used to crete the `Result`\n * @returns an instance of a `Ok` `Result` inferring its type\n */\nexport const ok = <TValue, TError = never>(value: TValue): Ok<TValue, TError> => new Ok(value)\n\n/**\n * Utility method to create an `Error` result from an `error`\n *\n * @param err - `error` used to crete the `Result`\n * @returns an instance of an `Error` `Result` inferring its type\n */\nexport const err = <TValue = never, TError = unknown>(err: TError): Err<TValue, TError> => new Err(err)\n\nexport class Ok<TValue, TError> {\n constructor(readonly value: TValue) {}\n\n /**\n * Check if a `Result` is an `Err` inferring its type. `!isErr()` should be used before accessing the `value`\n *\n * @returns `false` as the `Resul` is `OK`\n */\n isErr(): this is Err<TValue, TError> {\n return false\n }\n\n /**\n * Runs the `handler` method an return the same an unaltered copy of the `Result`. It could be used to log an\n * output when the result is `Ok` without breaking the flow\n *\n * @param handler - method to be run when the result is `Ok`\n * @returns a copy of the same `Result`\n */\n doOnOk(handler: (value: TValue) => void): Result<TValue, TError> {\n handler(this.value)\n return ok(this.value)\n }\n\n /**\n * A safe mode to throw the `error` of the `Result`\n */\n valueOrBug(): TValue {\n return this.value\n }\n\n /**\n * Throws an abort error if the result doesn't represent a value.\n */\n valueOrAbort(): TValue {\n return this.value\n }\n\n /**\n * Maps the value to another one with a different type. It leaves the `Error` type unaltered\n *\n * @param mapper - The mapper method to apply an `OK` value\n * @returns a new result with the new mapped value\n */\n map<TMappedValue>(mapper: (value: TValue) => TMappedValue): Result<TMappedValue, TError> {\n return ok(mapper(this.value))\n }\n\n /**\n * Maps the error type to another one. It leaves the `Ok` type and value unaltered\n *\n * @param _mapper - This mapper method is not used for an `Ok` value\n * @returns a new result with the new mapped error type and an value\n */\n mapError<TMappedError>(_mapper: (error: TError) => TMappedError): Result<TValue, TMappedError> {\n return ok(this.value)\n }\n}\n\nexport class Err<TValue, TError> {\n // eslint-disable-next-line node/handle-callback-err\n constructor(readonly error: TError) {}\n\n /**\n * Check if a `Result` is an `Err` inferring its type. `!isErr()` should be used before accessing the `value`\n *\n * @returns `false` as the `Resul` is `OK`\n */\n isErr(): this is Err<TValue, TError> {\n return true\n }\n\n /**\n * Return an unaltered copy of the `Error` without doing anything.\n *\n * @param _handler - This handler method is not used for an `Error`\n * @returns a copy of the same `Error`\n */\n doOnOk(_handler: (value: TValue) => void): Result<TValue, TError> {\n return err(this.error)\n }\n\n /**\n * A safe mode to throw the `error` of the `Result`\n */\n valueOrBug(): TValue {\n throw this.error\n }\n\n /**\n * Throws an abort error if the result doesn't represent a value.\n */\n valueOrAbort(): TValue {\n if (this.error instanceof FatalError) {\n throw this.error\n } else if (this.error instanceof ExtendableError || this.error instanceof Error) {\n const error = new AbortError(this.error.message)\n error.stack = this.error.stack\n throw error\n } else {\n throw new AbortError(`${this.error}`)\n }\n }\n\n /**\n * Maps the value type to another one. It leaves the `Error` unaltered\n *\n * @param _mapper - This mapper method is not used for an `Error` value\n * @returns a new result with the new value type and an unaltered error\n */\n map<TMappedValue>(_mapper: (valueOrBug: TValue) => TMappedValue): Result<TMappedValue, TError> {\n return err(this.error)\n }\n\n /**\n * Maps the error to another one with a different type. It leaves the value type unaltered\n *\n * @param mapper - The mapper method to apply an `Error` value\n * @returns a new result with the new mapped error\n */\n mapError<TMappedError>(mapper: (error: TError) => TMappedError): Result<TValue, TMappedError> {\n return err(mapper(this.error))\n }\n}\n", "import {applicationId} from './session/identity.js'\nimport {validateSession} from './session/validate.js'\nimport {allDefaultScopes, apiScopes} from './session/scopes.js'\nimport {\n exchangeAccessForApplicationTokens,\n exchangeCustomPartnerToken,\n ExchangeScopes,\n refreshAccessToken,\n InvalidGrantError,\n InvalidRequestError,\n} from './session/exchange.js'\nimport {IdentityToken, Session, Sessions} from './session/schema.js'\nimport * as sessionStore from './session/store.js'\nimport {pollForDeviceAuthorization, requestDeviceAuthorization} from './session/device-authorization.js'\nimport {isThemeAccessSession} from './api/rest.js'\nimport {getCurrentSessionId, setCurrentSessionId} from './conf-store.js'\nimport {UserEmailQueryString, UserEmailQuery} from './api/graphql/business-platform-destinations/user-email.js'\nimport {outputContent, outputToken, outputDebug, outputCompleted} from '../../public/node/output.js'\nimport {firstPartyDev, themeToken} from '../../public/node/context/local.js'\nimport {AbortError} from '../../public/node/error.js'\nimport {normalizeStoreFqdn, identityFqdn} from '../../public/node/context/fqdn.js'\nimport {getIdentityTokenInformation, getPartnersToken} from '../../public/node/environment.js'\nimport {AdminSession, logout} from '../../public/node/session.js'\nimport {nonRandomUUID} from '../../public/node/crypto.js'\nimport {isEmpty} from '../../public/common/object.js'\nimport {businessPlatformRequest} from '../../public/node/api/business-platform.js'\n\n/**\n * Fetches the user's email from the Business Platform API\n * @param businessPlatformToken - The business platform token\n * @returns The user's email address or undefined if not found\n */\nasync function fetchEmail(businessPlatformToken: string | undefined): Promise<string | undefined> {\n if (!businessPlatformToken) return undefined\n\n try {\n const userEmailResult = await businessPlatformRequest<UserEmailQuery>(UserEmailQueryString, businessPlatformToken)\n return userEmailResult.currentUserAccount?.email\n // eslint-disable-next-line no-catch-all/no-catch-all\n } catch (error) {\n outputDebug(outputContent`Failed to fetch user email: ${(error as Error).message ?? String(error)}`)\n return undefined\n }\n}\n\n/**\n * A scope supported by the Shopify Admin API.\n */\nexport type AdminAPIScope = 'graphql' | 'themes' | 'collaborator'\n\n/**\n * It represents the options to authenticate against the Shopify Admin API.\n */\n\ninterface AdminAPIOAuthOptions {\n /** Store to request permissions for. */\n storeFqdn: string\n /** List of scopes to request permissions for. */\n scopes: AdminAPIScope[]\n}\n\n/**\n * A scope supported by the Partners API.\n */\nexport type PartnersAPIScope = 'cli'\ninterface PartnersAPIOAuthOptions {\n /** List of scopes to request permissions for. */\n scopes: PartnersAPIScope[]\n}\n\n/**\n * A scope supported by the Developer Platform API.\n */\nexport type AppManagementAPIScope = 'https://api.shopify.com/auth/organization.apps.manage'\ninterface AppManagementAPIOauthOptions {\n /** List of scopes to request permissions for. */\n scopes: AppManagementAPIScope[]\n}\n\n/**\n * A scope supported by the Storefront Renderer API.\n */\nexport type StorefrontRendererScope = 'devtools'\ninterface StorefrontRendererAPIOAuthOptions {\n /** List of scopes to request permissions for. */\n scopes: StorefrontRendererScope[]\n}\n\nexport type BusinessPlatformScope = 'destinations'\ninterface BusinessPlatformAPIOAuthOptions {\n /** List of scopes to request permissions for. */\n scopes: BusinessPlatformScope[]\n}\n\n/**\n * It represents the authentication requirements and\n * is the input necessary to trigger the authentication\n * flow.\n */\nexport interface OAuthApplications {\n adminApi?: AdminAPIOAuthOptions\n storefrontRendererApi?: StorefrontRendererAPIOAuthOptions\n partnersApi?: PartnersAPIOAuthOptions\n businessPlatformApi?: BusinessPlatformAPIOAuthOptions\n appManagementApi?: AppManagementAPIOauthOptions\n}\n\nexport interface OAuthSession {\n admin?: AdminSession\n partners?: string\n storefront?: string\n businessPlatform?: string\n appManagement?: string\n userId: string\n}\n\ntype AuthMethod = 'partners_token' | 'device_auth' | 'theme_access_token' | 'custom_app_token' | 'none'\n\nlet userId: undefined | string\nlet authMethod: AuthMethod = 'none'\n\n/**\n * Retrieves the user ID from the current session or returns 'unknown' if not found.\n *\n * This function performs the following steps:\n * 1. Checks for a cached user ID in memory (obtained in the current run).\n * 2. Attempts to fetch it from the local storage (from a previous auth session).\n * 3. Checks if a custom token was used (either as a theme password or partners token).\n * 4. If a custom token is present in the environment, generates a UUID and uses it as userId.\n * 5. If after all this we don't have a userId, then reports as 'unknown'.\n *\n * @returns A Promise that resolves to the user ID as a string.\n */\nexport async function getLastSeenUserIdAfterAuth(): Promise<string> {\n if (userId) return userId\n\n const currentSessionId = getCurrentSessionId()\n if (currentSessionId) return currentSessionId\n\n const customToken = getPartnersToken() ?? themeToken()\n return customToken ? nonRandomUUID(customToken) : 'unknown'\n}\n\nexport function setLastSeenUserIdAfterAuth(id: string) {\n userId = id\n}\n\n/**\n * Retrieves the last seen authentication method used in the current session.\n *\n * This function checks for the authentication method in the following order:\n * 1. Returns the cached auth method if it's not 'none'.\n * 2. Checks for a cached session, which implies 'device_auth' was used.\n * 3. Checks for a partners token in the environment.\n * 4. Checks for a theme password in the environment.\n * 5. If none of the above are true, returns 'none'.\n *\n * @returns A Promise that resolves to the last seen authentication method as an AuthMethod type.\n */\nexport async function getLastSeenAuthMethod(): Promise<AuthMethod> {\n if (authMethod !== 'none') return authMethod\n\n if (getCurrentSessionId()) return 'device_auth'\n\n const partnersToken = getPartnersToken()\n if (partnersToken) return 'partners_token'\n\n const themePassword = themeToken()\n if (themePassword) {\n return isThemeAccessSession({token: themePassword, storeFqdn: ''}) ? 'theme_access_token' : 'custom_app_token'\n }\n\n return 'none'\n}\n\nexport function setLastSeenAuthMethod(method: AuthMethod) {\n authMethod = method\n}\n\nexport interface EnsureAuthenticatedAdditionalOptions {\n noPrompt?: boolean\n forceRefresh?: boolean\n forceNewSession?: boolean\n}\n\n/**\n * This method ensures that we have a valid session to authenticate against the given applications using the provided scopes.\n *\n * @param applications - An object containing the applications we need to be authenticated with.\n * @param _env - Optional environment variables to use.\n * @param options - Optional extra options to use.\n * @returns An instance with the access tokens organized by application.\n */\nexport async function ensureAuthenticated(\n applications: OAuthApplications,\n _env?: NodeJS.ProcessEnv,\n {forceRefresh = false, noPrompt = false, forceNewSession = false}: EnsureAuthenticatedAdditionalOptions = {},\n): Promise<OAuthSession> {\n const fqdn = await identityFqdn()\n\n const previousStoreFqdn = applications.adminApi?.storeFqdn\n if (previousStoreFqdn) {\n const normalizedStoreName = normalizeStoreFqdn(previousStoreFqdn)\n if (previousStoreFqdn === applications.adminApi?.storeFqdn) {\n applications.adminApi.storeFqdn = normalizedStoreName\n }\n }\n\n const sessions = (await sessionStore.fetch()) ?? {}\n\n let currentSessionId = getCurrentSessionId()\n if (!currentSessionId) {\n const userIds = Object.keys(sessions[fqdn] ?? {})\n if (userIds.length > 0) currentSessionId = userIds[0]\n }\n const currentSession: Session | undefined =\n currentSessionId && !forceNewSession ? sessions[fqdn]?.[currentSessionId] : undefined\n const scopes = getFlattenScopes(applications)\n\n outputDebug(outputContent`Validating existing session against the scopes:\n${outputToken.json(scopes)}\nFor applications:\n${outputToken.json(applications)}\n`)\n\n const validationResult = await validateSession(scopes, applications, currentSession)\n\n let newSession = {}\n\n if (validationResult === 'needs_full_auth') {\n await throwOnNoPrompt(noPrompt)\n outputDebug(outputContent`Initiating the full authentication flow...`)\n newSession = await executeCompleteFlow(applications)\n } else if (validationResult === 'needs_refresh' || forceRefresh) {\n outputDebug(outputContent`The current session is valid but needs refresh. Refreshing...`)\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n newSession = await refreshTokens(currentSession!, applications)\n } catch (error) {\n if (error instanceof InvalidGrantError) {\n await throwOnNoPrompt(noPrompt)\n newSession = await executeCompleteFlow(applications)\n } else if (error instanceof InvalidRequestError) {\n await sessionStore.remove()\n throw new AbortError('\\nError validating auth session', \"We've cleared the current session, please try again\")\n } else {\n throw error\n }\n }\n }\n\n const completeSession = {...currentSession, ...newSession} as Session\n const newSessionId = completeSession.identity.userId\n const updatedSessions: Sessions = {\n ...sessions,\n [fqdn]: {...sessions[fqdn], [newSessionId]: completeSession},\n }\n\n // Save the new session info if it has changed\n if (!isEmpty(newSession)) {\n await sessionStore.store(updatedSessions)\n setCurrentSessionId(newSessionId)\n }\n\n const tokens = await tokensFor(applications, completeSession)\n\n // Overwrite partners token if using a custom CLI Token\n const envToken = getPartnersToken()\n if (envToken && applications.partnersApi) {\n tokens.partners = (await exchangeCustomPartnerToken(envToken)).accessToken\n }\n\n setLastSeenAuthMethod(envToken ? 'partners_token' : 'device_auth')\n setLastSeenUserIdAfterAuth(tokens.userId)\n return tokens\n}\n\nasync function throwOnNoPrompt(noPrompt: boolean) {\n if (!noPrompt) return\n await logout()\n throw new AbortError(\n `The currently available CLI credentials are invalid.\n\nThe CLI is currently unable to prompt for reauthentication.`,\n 'Restart the CLI process you were running. If in an interactive terminal, you will be prompted to reauthenticate. If in a non-interactive terminal, ensure the correct credentials are available in the program environment.',\n )\n}\n\n/**\n * Execute the full authentication flow.\n *\n * @param applications - An object containing the applications we need to be authenticated with.\n * @param alias - Optional alias to use for the session.\n */\nasync function executeCompleteFlow(applications: OAuthApplications): Promise<Session> {\n const scopes = getFlattenScopes(applications)\n const exchangeScopes = getExchangeScopes(applications)\n const store = applications.adminApi?.storeFqdn\n if (firstPartyDev()) {\n outputDebug(outputContent`Authenticating as Shopify Employee...`)\n scopes.push('employee')\n }\n\n let identityToken: IdentityToken\n const identityTokenInformation = getIdentityTokenInformation()\n if (identityTokenInformation) {\n identityToken = buildIdentityTokenFromEnv(scopes, identityTokenInformation)\n } else {\n // Request a device code to authorize without a browser redirect.\n outputDebug(outputContent`Requesting device authorization code...`)\n const deviceAuth = await requestDeviceAuthorization(scopes)\n\n // Poll for the identity token\n outputDebug(outputContent`Starting polling for the identity token...`)\n identityToken = await pollForDeviceAuthorization(deviceAuth.deviceCode, deviceAuth.interval)\n }\n\n // Exchange identity token for application tokens\n outputDebug(outputContent`CLI token received. Exchanging it for application tokens...`)\n const result = await exchangeAccessForApplicationTokens(identityToken, exchangeScopes, store)\n\n // Get the alias for the session (email or userId)\n const businessPlatformToken = result[applicationId('business-platform')]?.accessToken\n const alias = (await fetchEmail(businessPlatformToken)) ?? identityToken.userId\n\n const session: Session = {\n identity: {\n ...identityToken,\n alias,\n },\n applications: result,\n }\n\n outputCompleted(`Logged in.`)\n\n return session\n}\n\n/**\n * Refresh the tokens for a given session.\n *\n * @param session - The session to refresh.\n */\nasync function refreshTokens(session: Session, applications: OAuthApplications): Promise<Session> {\n // Refresh Identity Token\n const identityToken = await refreshAccessToken(session.identity)\n // Exchange new identity token for application tokens\n const exchangeScopes = getExchangeScopes(applications)\n const applicationTokens = await exchangeAccessForApplicationTokens(\n identityToken,\n exchangeScopes,\n applications.adminApi?.storeFqdn,\n )\n\n return {\n identity: identityToken,\n applications: applicationTokens,\n }\n}\n\n/**\n * Get the application tokens for a given session.\n *\n * @param applications - An object containing the applications we need the tokens for.\n * @param session - The current session.\n * @param fqdn - The identity FQDN.\n */\nasync function tokensFor(applications: OAuthApplications, session: Session): Promise<OAuthSession> {\n const tokens: OAuthSession = {\n userId: session.identity.userId,\n }\n\n if (applications.adminApi) {\n const appId = applicationId('admin')\n const realAppId = `${applications.adminApi.storeFqdn}-${appId}`\n const token = session.applications[realAppId]?.accessToken\n if (token) {\n tokens.admin = {token, storeFqdn: applications.adminApi.storeFqdn}\n }\n }\n\n if (applications.partnersApi) {\n const appId = applicationId('partners')\n tokens.partners = session.applications[appId]?.accessToken\n }\n\n if (applications.storefrontRendererApi) {\n const appId = applicationId('storefront-renderer')\n tokens.storefront = session.applications[appId]?.accessToken\n }\n\n if (applications.businessPlatformApi) {\n const appId = applicationId('business-platform')\n tokens.businessPlatform = session.applications[appId]?.accessToken\n }\n\n if (applications.appManagementApi) {\n const appId = applicationId('app-management')\n tokens.appManagement = session.applications[appId]?.accessToken\n }\n\n return tokens\n}\n\n// Scope Helpers\n/**\n * Get a flattened array of scopes for the given applications.\n *\n * @param apps - An object containing the applications we need the scopes for.\n * @returns A flattened array of scopes.\n */\nfunction getFlattenScopes(apps: OAuthApplications): string[] {\n const admin = apps.adminApi?.scopes ?? []\n const partner = apps.partnersApi?.scopes ?? []\n const storefront = apps.storefrontRendererApi?.scopes ?? []\n const businessPlatform = apps.businessPlatformApi?.scopes ?? []\n const appManagement = apps.appManagementApi?.scopes ?? []\n const requestedScopes = [...admin, ...partner, ...storefront, ...businessPlatform, ...appManagement]\n return allDefaultScopes(requestedScopes)\n}\n\n/**\n * Get the scopes for the given applications.\n *\n * @param apps - An object containing the applications we need the scopes for.\n * @returns An object containing the scopes for each application.\n */\nfunction getExchangeScopes(apps: OAuthApplications): ExchangeScopes {\n const adminScope = apps.adminApi?.scopes ?? []\n const partnerScope = apps.partnersApi?.scopes ?? []\n const storefrontScopes = apps.storefrontRendererApi?.scopes ?? []\n const businessPlatformScopes = apps.businessPlatformApi?.scopes ?? []\n const appManagementScopes = apps.appManagementApi?.scopes ?? []\n return {\n admin: apiScopes('admin', adminScope),\n partners: apiScopes('partners', partnerScope),\n storefront: apiScopes('storefront-renderer', storefrontScopes),\n businessPlatform: apiScopes('business-platform', businessPlatformScopes),\n appManagement: apiScopes('app-management', appManagementScopes),\n }\n}\n\nfunction buildIdentityTokenFromEnv(\n scopes: string[],\n identityTokenInformation: {accessToken: string; refreshToken: string; userId: string},\n) {\n return {\n ...identityTokenInformation,\n expiresAt: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000),\n scopes,\n alias: identityTokenInformation.userId,\n }\n}\n", "/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport {applicationId} from './identity.js'\nimport {ApplicationToken, IdentityToken, Session, validateCachedIdentityTokenStructure} from './schema.js'\nimport {sessionConstants} from '../constants.js'\nimport {firstPartyDev} from '../../../public/node/context/local.js'\nimport {OAuthApplications} from '../session.js'\nimport {outputDebug} from '../../../public/node/output.js'\n\ntype ValidationResult = 'needs_refresh' | 'needs_full_auth' | 'ok'\n\n/**\n * Validate if an identity token is valid for the requested scopes\n */\nfunction validateScopes(requestedScopes: string[], identity: IdentityToken) {\n const currentScopes = identity.scopes\n if (firstPartyDev() !== currentScopes.includes('employee')) return false\n return requestedScopes.every((scope) => currentScopes.includes(scope))\n}\n\n/**\n * Validate if the current session is valid or we need to refresh/re-authenticate\n * @param scopes - requested scopes to validate\n * @param applications - requested applications\n * @param session - current session with identity and application tokens\n * @returns 'ok' if the session is valid, 'needs_full_auth' if we need to re-authenticate, 'needs_refresh' if we need to refresh the session\n */\nexport async function validateSession(\n scopes: string[],\n applications: OAuthApplications,\n session: Session | undefined,\n): Promise<ValidationResult> {\n if (!session) return 'needs_full_auth'\n const scopesAreValid = validateScopes(scopes, session.identity)\n if (!scopesAreValid) return 'needs_full_auth'\n let tokensAreExpired = isTokenExpired(session.identity)\n\n if (applications.partnersApi) {\n const appId = applicationId('partners')\n const token = session.applications[appId]!\n tokensAreExpired = tokensAreExpired || isTokenExpired(token)\n }\n\n if (applications.appManagementApi) {\n const appId = applicationId('app-management')\n const token = session.applications[appId]!\n tokensAreExpired = tokensAreExpired || isTokenExpired(token)\n }\n\n if (applications.storefrontRendererApi) {\n const appId = applicationId('storefront-renderer')\n const token = session.applications[appId]!\n tokensAreExpired = tokensAreExpired || isTokenExpired(token)\n }\n\n if (applications.adminApi) {\n const appId = applicationId('admin')\n const realAppId = `${applications.adminApi.storeFqdn}-${appId}`\n const token = session.applications[realAppId]!\n tokensAreExpired = tokensAreExpired || isTokenExpired(token)\n }\n\n outputDebug(`- Token validation -> It's expired: ${tokensAreExpired}`)\n\n if (!validateCachedIdentityTokenStructure(session.identity)) {\n return 'needs_full_auth'\n }\n\n if (tokensAreExpired) return 'needs_refresh'\n\n return 'ok'\n}\n\nfunction isTokenExpired(token: ApplicationToken): boolean {\n if (!token) return true\n return token.expiresAt < expireThreshold()\n}\n\nfunction expireThreshold(): Date {\n return new Date(Date.now() + sessionConstants.expirationTimeMarginInMinutes * 60 * 1000)\n}\n", "import {clientId} from './identity.js'\nimport {exchangeDeviceCodeForAccessToken} from './exchange.js'\nimport {IdentityToken} from './schema.js'\nimport {identityFqdn} from '../../../public/node/context/fqdn.js'\nimport {shopifyFetch} from '../../../public/node/http.js'\nimport {outputContent, outputDebug, outputInfo, outputToken} from '../../../public/node/output.js'\nimport {AbortError, BugError} from '../../../public/node/error.js'\nimport {isCloudEnvironment} from '../../../public/node/context/local.js'\nimport {isCI, openURL} from '../../../public/node/system.js'\nimport {isTTY, keypress} from '../../../public/node/ui.js'\nimport {Response} from 'node-fetch'\n\nexport interface DeviceAuthorizationResponse {\n deviceCode: string\n userCode: string\n verificationUri: string\n expiresIn: number\n verificationUriComplete?: string\n interval?: number\n}\n\n/**\n * Initiate a device authorization flow.\n * This will return a DeviceAuthorizationResponse containing the URL where user\n * should go to authorize the device without the need of a callback to the CLI.\n *\n * Also returns a `deviceCode` used for polling the token endpoint in the next step.\n *\n * @param scopes - The scopes to request\n * @returns An object with the device authorization response.\n */\nexport async function requestDeviceAuthorization(scopes: string[]): Promise<DeviceAuthorizationResponse> {\n const fqdn = await identityFqdn()\n const identityClientId = clientId()\n const queryParams = {client_id: identityClientId, scope: scopes.join(' ')}\n const url = `https://${fqdn}/oauth/device_authorization`\n\n const response = await shopifyFetch(url, {\n method: 'POST',\n headers: {'Content-type': 'application/x-www-form-urlencoded'},\n body: convertRequestToParams(queryParams),\n })\n\n // First read the response body as text so we have it for debugging\n let responseText: string\n try {\n responseText = await response.text()\n } catch (error) {\n throw new BugError(\n `Failed to read response from authorization service (HTTP ${response.status}). Network or streaming error occurred.`,\n 'Check your network connection and try again.',\n )\n }\n\n // Now try to parse the text as JSON\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let jsonResult: any\n try {\n jsonResult = JSON.parse(responseText)\n } catch {\n // JSON.parse failed, handle the parsing error\n const errorMessage = buildAuthorizationParseErrorMessage(response, responseText)\n throw new BugError(errorMessage)\n }\n\n outputDebug(outputContent`Received device authorization code: ${outputToken.json(jsonResult)}`)\n if (!jsonResult.device_code || !jsonResult.verification_uri_complete) {\n throw new BugError('Failed to start authorization process')\n }\n\n outputInfo('\\nTo run this command, log in to Shopify.')\n\n if (isCI()) {\n throw new AbortError(\n 'Authorization is required to continue, but the current environment does not support interactive prompts.',\n 'To resolve this, specify credentials in your environment, or run the command in an interactive environment such as your local terminal.',\n )\n }\n\n outputInfo(outputContent`User verification code: ${jsonResult.user_code}`)\n const linkToken = outputToken.link(jsonResult.verification_uri_complete)\n\n const cloudMessage = () => {\n outputInfo(outputContent`👉 Open this link to start the auth process: ${linkToken}`)\n }\n\n if (isCloudEnvironment() || !isTTY()) {\n cloudMessage()\n } else {\n outputInfo('👉 Press any key to open the login page on your browser')\n await keypress()\n const opened = await openURL(jsonResult.verification_uri_complete)\n if (opened) {\n outputInfo(outputContent`Opened link to start the auth process: ${linkToken}`)\n } else {\n cloudMessage()\n }\n }\n\n return {\n deviceCode: jsonResult.device_code,\n userCode: jsonResult.user_code,\n verificationUri: jsonResult.verification_uri,\n expiresIn: jsonResult.expires_in,\n verificationUriComplete: jsonResult.verification_uri_complete,\n interval: jsonResult.interval,\n }\n}\n\n/**\n * Poll the Oauth token endpoint with the device code obtained from a DeviceAuthorizationResponse.\n * The endpoint will return `authorization_pending` until the user completes the auth flow in the browser.\n * Once the user completes the auth flow, the endpoint will return the identity token.\n *\n * Timeout for the polling is defined by the server and is around 600 seconds.\n *\n * @param code - The device code obtained after starting a device identity flow\n * @param interval - The interval to poll the token endpoint\n * @returns The identity token\n */\nexport async function pollForDeviceAuthorization(code: string, interval = 5): Promise<IdentityToken> {\n let currentIntervalInSeconds = interval\n\n return new Promise<IdentityToken>((resolve, reject) => {\n const onPoll = async () => {\n const result = await exchangeDeviceCodeForAccessToken(code)\n if (!result.isErr()) {\n resolve(result.value)\n return\n }\n\n const error = result.error ?? 'unknown_failure'\n\n outputDebug(outputContent`Polling for device authorization... status: ${error}`)\n switch (error) {\n case 'authorization_pending': {\n startPolling()\n return\n }\n case 'slow_down':\n currentIntervalInSeconds += 5\n startPolling()\n return\n case 'access_denied':\n case 'expired_token':\n case 'unknown_failure': {\n reject(new Error(`Device authorization failed: ${error}`))\n }\n }\n }\n\n const startPolling = () => {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n setTimeout(onPoll, currentIntervalInSeconds * 1000)\n }\n\n startPolling()\n })\n}\n\nfunction convertRequestToParams(queryParams: {client_id: string; scope: string}): string {\n return Object.entries(queryParams)\n .map(([key, value]) => value && `${key}=${value}`)\n .filter((hasValue) => Boolean(hasValue))\n .join('&')\n}\n\n/**\n * Build a detailed error message for JSON parsing failures from the authorization service.\n * Provides context-specific error messages based on response status and content.\n *\n * @param response - The HTTP response object\n * @param responseText - The raw response body text\n * @returns Detailed error message about the failure\n */\nfunction buildAuthorizationParseErrorMessage(response: Response, responseText: string): string {\n // Build helpful error message based on response status and content\n let errorMessage = `Received invalid response from authorization service (HTTP ${response.status}).`\n\n // Add status-based context\n if (response.status >= 500) {\n errorMessage += ' The service may be experiencing issues.'\n } else if (response.status >= 400) {\n errorMessage += ' The request may be malformed or unauthorized.'\n }\n\n // Add content-based context (check these regardless of status)\n if (responseText.trim().startsWith('<!DOCTYPE') || responseText.trim().startsWith('<html')) {\n errorMessage += ' Received HTML instead of JSON - the service endpoint may have changed.'\n } else if (responseText.trim() === '') {\n errorMessage += ' Received empty response body.'\n } else {\n errorMessage += ' Response could not be parsed as valid JSON.'\n }\n\n return `${errorMessage} If this issue persists, please contact support at https://help.shopify.com`\n}\n", "import {buildHeaders} from './headers.js'\nimport {themeKitAccessDomain} from '../constants.js'\nimport {AdminSession} from '../../../public/node/session.js'\n\nexport function restRequestBody<T>(requestBody?: T) {\n if (!requestBody) {\n return\n }\n return JSON.stringify(requestBody)\n}\n\nexport function restRequestUrl(\n session: AdminSession,\n apiVersion: string,\n path: string,\n searchParams: {[name: string]: string} = {},\n) {\n const url = new URL(\n isThemeAccessSession(session)\n ? `https://${themeKitAccessDomain}/cli/admin/api/${apiVersion}${path}.json`\n : `https://${session.storeFqdn}/admin/api/${apiVersion}${path}.json`,\n )\n Object.entries(searchParams).forEach(([name, value]) => {\n url.searchParams.set(name, value)\n })\n\n return url.toString()\n}\n\nexport function restRequestHeaders(session: AdminSession) {\n const store = session.storeFqdn\n const token = session.token\n const headers = buildHeaders(session.token)\n\n if (isThemeAccessSession(session)) {\n headers['X-Shopify-Shop'] = store\n headers['X-Shopify-Access-Token'] = token\n }\n\n return headers\n}\n\nexport function isThemeAccessSession(session: AdminSession) {\n return session.token.startsWith('shptka_')\n}\n", "// UserEmail query for fetching user email from Business Platform API\nexport interface UserEmailQuery {\n currentUserAccount?: {\n email: string\n } | null\n}\n\nexport const UserEmailQueryString = `\n query UserEmail {\n currentUserAccount {\n email\n }\n }\n`\n", "import {unionArrayStrategy} from '../../private/common/array.js'\nimport deepMerge from 'deepmerge'\nimport {Dictionary, ObjectIterator, PropertyPath, ValueKeyIteratee} from 'lodash'\nimport lodashPickBy from 'lodash/pickBy.js'\nimport lodashMapValues from 'lodash/mapValues.js'\nimport lodashIsEqual from 'lodash/isEqual.js'\nimport differenceWith from 'lodash/differenceWith.js'\nimport fromPairs from 'lodash/fromPairs.js'\nimport toPairs from 'lodash/toPairs.js'\nimport get from 'lodash/get.js'\nimport set from 'lodash/set.js'\nimport unset from 'lodash/unset.js'\nimport lodashIsEmpty from 'lodash/isEmpty.js'\n\n/**\n * Deep merges the two objects and returns a new object with the merge result.\n *\n * @param lhs - One of the objects to be merged.\n * @param rhs - Another object to be merged.\n * @param arrayMergeStrategy - Strategy used to merge the array typed fields. Union strategy is used by default to avoid\n * duplicated elements.\n * @returns A Javascrip tobject with th emerged objects.\n */\nexport function deepMergeObjects<T1, T2>(\n lhs: Partial<T1>,\n rhs: Partial<T2>,\n arrayMergeStrategy: (destinationArray: unknown[], sourceArray: unknown[]) => unknown[] = unionArrayStrategy,\n): T1 & T2 {\n return deepMerge(lhs, rhs, {arrayMerge: arrayMergeStrategy})\n}\n\n/**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @param object - The source object.\n * @param predicate - The function invoked per property.\n * @returns Returns the new object.\n */\nexport function pickBy<T>(object: Dictionary<T> | null | undefined, predicate: ValueKeyIteratee<T>): Dictionary<T> {\n return lodashPickBy(object, predicate)\n}\n\n/**\n * Creates an object with the same keys as object and values generated by running each own\n * enumerable property of object through iteratee. The iteratee function is\n * invoked with three arguments: (value, key, object).\n *\n * @param source - The object to iterate over.\n * @param callback - The function invoked per iteration.\n * @returns Returns the new mapped object.\n */\nexport function mapValues<T extends object, TResult>(\n source: T | null | undefined,\n callback: ObjectIterator<T, TResult>,\n): {[P in keyof T]: TResult} {\n return lodashMapValues(source, callback)\n}\n\n/**\n * Deeply compares two objects and returns true if they are equal.\n *\n * @param one - The first object to be compared.\n * @param two - The second object to be compared.\n * @returns True if the objects are equal, false otherwise.\n */\nexport function deepCompare(one: object, two: object): boolean {\n return lodashIsEqual(one, two)\n}\n\n/**\n * Return the difference between two nested objects.\n *\n * @param one - The first object to be compared.\n * @param two - The second object to be compared.\n * @returns Two objects containing the fields that are different, each one with the values of one object.\n */\nexport function deepDifference(one: object, two: object): [object, object] {\n const changes = differenceWith(toPairs(one), toPairs(two), deepCompare)\n const changes2 = differenceWith(toPairs(two), toPairs(one), deepCompare)\n return [fromPairs(changes), fromPairs(changes2)]\n}\n\n/**\n * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.\n *\n * @param object - The object to query.\n * @param path - The path of the property to get.\n * @returns - Returns the resolved value.\n */\nexport function getPathValue<T = object>(object: object, path: PropertyPath): T | undefined {\n return get(object, path) === undefined ? undefined : (get(object, path) as T)\n}\n\n/**\n * Sets the value at path of object. If a portion of path doesn't exist, it's create.\n *\n * @param object - The object to modify.\n * @param path - The path of the property to set.\n * @param value - The value to set.\n * @returns - Returns object.\n */\nexport function setPathValue(object: object, path: PropertyPath, value?: unknown): object {\n return set(object, path, value)\n}\n\n/**\n * Removes the property at path of object.\n *\n * @param object - The object to modify.\n * @param path - The path of the property to unset.\n * @returns - Returns true if the property is deleted or not found, else false.\n */\nexport function unsetPathValue(object: object, path: PropertyPath): boolean {\n return unset(object, path)\n}\n\n/**\n * Checks if value is an empty object, collection, map, or set.\n *\n * @param object - The value to check.\n * @returns - Returns true if value is empty, else false.\n */\nexport function isEmpty(object: object): boolean {\n return lodashIsEmpty(object)\n}\n\n/**\n * Removes the undefined elements.\n *\n * @param object - The object whose undefined will be deleted.\n * @returns A copy of the object with the undefined elements deleted.\n */\nexport function compact(object: object): object {\n return Object.fromEntries(Object.entries(object).filter(([_, value]) => value != null))\n}\n", "export function unionArrayStrategy(destinationArray: unknown[], sourceArray: unknown[]): unknown[] {\n return Array.from(new Set([...destinationArray, ...sourceArray]))\n}\n", "import {CacheOptions, GraphQLVariables, UnauthorizedHandler, graphqlRequest, graphqlRequestDoc} from './graphql.js'\nimport {handleDeprecations} from './partners.js'\nimport {businessPlatformFqdn} from '../context/fqdn.js'\nimport {TypedDocumentNode} from '@graphql-typed-document-node/core'\nimport {Variables} from 'graphql-request'\n\n/**\n * Sets up the request to the Business Platform Destinations API.\n *\n * @param token - Business Platform token.\n */\nasync function setupRequest(token: string) {\n const api = 'BusinessPlatform'\n const fqdn = await businessPlatformFqdn()\n const url = `https://${fqdn}/destinations/api/2020-07/graphql`\n return {\n token,\n api,\n url,\n responseOptions: {onResponse: handleDeprecations},\n }\n}\n\n/**\n * Executes a GraphQL query against the Business Platform Destinations API.\n *\n * @param query - GraphQL query to execute.\n * @param token - Business Platform token.\n * @param variables - GraphQL variables to pass to the query.\n * @param cacheOptions - Cache options for the request. If not present, the request will not be cached.\n * @returns The response of the query of generic type <T>.\n */\nexport async function businessPlatformRequest<T>(\n query: string,\n token: string,\n variables?: GraphQLVariables,\n cacheOptions?: CacheOptions,\n): Promise<T> {\n return graphqlRequest<T>({\n ...(await setupRequest(token)),\n query,\n variables,\n cacheOptions,\n })\n}\n\n/**\n * @param query - GraphQL query to execute.\n * @param token - Business Platform token.\n * @param variables - GraphQL variables to pass to the query.\n * @param cacheOptions - Cache options for the request. If not present, the request will not be cached.\n */\nexport interface BusinessPlatformRequestOptions<TResult, TVariables extends Variables> {\n query: TypedDocumentNode<TResult, TVariables>\n token: string\n variables?: TVariables\n cacheOptions?: CacheOptions\n unauthorizedHandler: UnauthorizedHandler\n}\n\n/**\n * Executes a GraphQL query against the Business Platform Destinations API. Uses typed documents.\n *\n * @param options - The options for the request.\n * @returns The response of the query of generic type <TResult>.\n */\nexport async function businessPlatformRequestDoc<TResult, TVariables extends Variables>(\n options: BusinessPlatformRequestOptions<TResult, TVariables>,\n): Promise<TResult> {\n return graphqlRequestDoc<TResult, TVariables>({\n ...(await setupRequest(options.token)),\n query: options.query,\n variables: options.variables,\n cacheOptions: options.cacheOptions,\n unauthorizedHandler: options.unauthorizedHandler,\n })\n}\n\n/**\n * Sets up the request to the Business Platform Organizations API.\n *\n * @param token - Business Platform token.\n * @param organizationId - Organization ID as a numeric (non-GID) value.\n */\nasync function setupOrganizationsRequest(token: string, organizationId: string) {\n const api = 'BusinessPlatform'\n const fqdn = await businessPlatformFqdn()\n const url = `https://${fqdn}/organizations/api/unstable/organization/${organizationId}/graphql`\n return {\n token,\n api,\n url,\n responseOptions: {onResponse: handleDeprecations},\n }\n}\n\nexport interface BusinessPlatformOrganizationsRequestNonTypedOptions {\n query: string\n token: string\n organizationId: string\n unauthorizedHandler: UnauthorizedHandler\n variables?: GraphQLVariables\n}\n\n/**\n * Executes a GraphQL query against the Business Platform Organizations API.\n *\n * @param options - The options for the request.\n * @returns The response of the query of generic type <T>.\n */\nexport async function businessPlatformOrganizationsRequest<T>(\n options: BusinessPlatformOrganizationsRequestNonTypedOptions,\n): Promise<T> {\n return graphqlRequest<T>({\n query: options.query,\n ...(await setupOrganizationsRequest(options.token, options.organizationId)),\n variables: options.variables,\n unauthorizedHandler: options.unauthorizedHandler,\n })\n}\n\nexport interface BusinessPlatformOrganizationsRequestOptions<TResult, TVariables extends Variables>\n extends BusinessPlatformRequestOptions<TResult, TVariables> {\n organizationId: string\n}\n\n/**\n * Executes a GraphQL query against the Business Platform Organizations API. Uses typed documents.\n *\n * @param options - The options for the request.\n * @returns The response of the query of generic type <T>.\n */\nexport async function businessPlatformOrganizationsRequestDoc<TResult, TVariables extends Variables>(\n options: BusinessPlatformOrganizationsRequestOptions<TResult, TVariables>,\n): Promise<TResult> {\n return graphqlRequestDoc<TResult, TVariables>({\n query: options.query,\n ...(await setupOrganizationsRequest(options.token, options.organizationId)),\n variables: options.variables,\n unauthorizedHandler: options.unauthorizedHandler,\n })\n}\n", "import {buildHeaders, httpsAgent} from '../../../private/node/api/headers.js'\nimport {debugLogRequestInfo, errorHandler} from '../../../private/node/api/graphql.js'\nimport {addPublicMetadata, runWithTimer} from '../metadata.js'\nimport {retryAwareRequest} from '../../../private/node/api.js'\nimport {requestIdsCollection} from '../../../private/node/request-ids.js'\nimport {nonRandomUUID} from '../crypto.js'\nimport {\n cacheRetrieveOrRepopulate,\n ConfSchema,\n GraphQLRequestKey,\n TimeInterval,\n timeIntervalToMilliseconds,\n} from '../../../private/node/conf-store.js'\nimport {LocalStorage} from '../local-storage.js'\nimport {abortSignalFromRequestBehaviour, requestMode, RequestModeInput} from '../http.js'\nimport {CLI_KIT_VERSION} from '../../common/version.js'\nimport {\n GraphQLClient,\n rawRequest,\n RequestDocument,\n resolveRequestDocument,\n Variables,\n ClientError,\n} from 'graphql-request'\nimport {TypedDocumentNode} from '@graphql-typed-document-node/core'\n\n// to replace TVariable type when there graphql query has no variables\nexport type Exact<T extends {[key: string]: unknown}> = {[K in keyof T]: T[K]}\n\nexport interface GraphQLVariables {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any\n}\n\nexport type GraphQLResponse<T> = Awaited<ReturnType<typeof rawRequest<T>>>\n\nexport interface CacheOptions {\n cacheTTL: TimeInterval\n cacheExtraKey?: string\n cacheStore?: LocalStorage<ConfSchema>\n}\n\ninterface RefreshedTokenOnAuthorizedResponse {\n token?: string\n}\n\nexport type RefreshTokenOnAuthorizedResponse = Promise<RefreshedTokenOnAuthorizedResponse>\n\nexport interface UnauthorizedHandler {\n type: 'token_refresh'\n handler: () => RefreshTokenOnAuthorizedResponse\n}\n\ninterface GraphQLRequestBaseOptions<TResult> {\n api: string\n url: string\n token?: string\n addedHeaders?: {[header: string]: string}\n responseOptions?: GraphQLResponseOptions<TResult>\n cacheOptions?: CacheOptions\n preferredBehaviour?: RequestModeInput\n}\n\ntype PerformGraphQLRequestOptions<TResult> = GraphQLRequestBaseOptions<TResult> & {\n queryAsString: string\n variables?: Variables\n unauthorizedHandler?: UnauthorizedHandler\n}\n\nexport type GraphQLRequestOptions<T> = GraphQLRequestBaseOptions<T> & {\n query: RequestDocument\n variables?: Variables\n unauthorizedHandler?: UnauthorizedHandler\n}\n\nexport type GraphQLRequestDocOptions<TResult, TVariables> = GraphQLRequestBaseOptions<TResult> & {\n query: TypedDocumentNode<TResult, TVariables> | TypedDocumentNode<TResult, Exact<{[key: string]: never}>>\n variables?: TVariables\n unauthorizedHandler?: UnauthorizedHandler\n}\n\nexport interface GraphQLResponseOptions<T> {\n handleErrors?: boolean\n onResponse?: (response: GraphQLResponse<T>) => void\n}\n\nasync function createGraphQLClient({\n url,\n addedHeaders,\n token,\n}: {\n url: string\n token: string | undefined\n addedHeaders?: {[header: string]: string}\n}) {\n const headers = {\n ...addedHeaders,\n ...buildHeaders(token),\n }\n const clientOptions = {agent: await httpsAgent(), headers}\n\n return {\n client: new GraphQLClient(url, clientOptions),\n headers,\n }\n}\n\n/**\n * Handles execution of a GraphQL query.\n *\n * @param options - GraphQL request options.\n */\nasync function performGraphQLRequest<TResult>(options: PerformGraphQLRequestOptions<TResult>) {\n const {token, addedHeaders, queryAsString, variables, api, url, responseOptions, unauthorizedHandler, cacheOptions} =\n options\n const behaviour = requestMode(options.preferredBehaviour ?? 'default')\n\n let {headers, client} = await createGraphQLClient({url, addedHeaders, token})\n debugLogRequestInfo(api, queryAsString, url, variables, headers)\n\n const rawGraphQLRequest = async () => {\n let fullResponse: GraphQLResponse<TResult>\n // there is a errorPolicy option which returns rather than throwing on errors, but we _do_ ultimately want to\n // throw.\n try {\n // mapping signal to any due to polyfill meaning types don't exactly match (but are functionally equivalent)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n client.requestConfig.signal = abortSignalFromRequestBehaviour(behaviour) as any\n fullResponse = await client.rawRequest<TResult>(queryAsString, variables)\n await logLastRequestIdFromResponse(fullResponse)\n return fullResponse\n } catch (error) {\n if (error instanceof ClientError) {\n // error.response does have a headers property like a normal response, but it's not typed as such.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n await logLastRequestIdFromResponse(error.response as any)\n }\n throw error\n }\n }\n\n const tokenRefreshHandler = unauthorizedHandler?.handler\n\n const tokenRefreshUnauthorizedHandlerFunction = tokenRefreshHandler\n ? async () => {\n const refreshTokenResult = await tokenRefreshHandler()\n if (refreshTokenResult.token) {\n const {client: newClient, headers: newHeaders} = await createGraphQLClient({\n url,\n addedHeaders,\n token: refreshTokenResult.token,\n })\n client = newClient\n headers = newHeaders\n return true\n } else {\n return false\n }\n }\n : undefined\n\n const request = () =>\n retryAwareRequest(\n {request: rawGraphQLRequest, url, ...behaviour},\n responseOptions?.handleErrors === false ? undefined : errorHandler(api),\n )\n\n const executeWithTimer = () =>\n runWithTimer('cmd_all_timing_network_ms')(async () => {\n let response\n try {\n response = await request()\n } catch (error) {\n if (error instanceof ClientError && error.response.status === 401 && tokenRefreshUnauthorizedHandlerFunction) {\n if (await tokenRefreshUnauthorizedHandlerFunction()) {\n response = await request()\n } else {\n throw error\n }\n } else {\n throw error\n }\n }\n\n if (responseOptions?.onResponse) {\n responseOptions.onResponse(response)\n }\n return response.data\n })\n\n // If there is no cache config for this query, just execute it and return the result.\n if (cacheOptions === undefined) {\n return executeWithTimer()\n }\n\n const {cacheTTL, cacheExtraKey, cacheStore} = cacheOptions\n\n // The cache key is a combination of the hashed query and variables, with an optional extra key provided by the user.\n const queryHash = nonRandomUUID(queryAsString)\n const variablesHash = nonRandomUUID(JSON.stringify(variables ?? {}))\n const cacheKey: GraphQLRequestKey = `q-${queryHash}-${variablesHash}-${CLI_KIT_VERSION}-${cacheExtraKey ?? ''}`\n\n const result = await cacheRetrieveOrRepopulate(\n cacheKey,\n async () => {\n const result = await executeWithTimer()\n return JSON.stringify(result)\n },\n timeIntervalToMilliseconds(cacheTTL),\n cacheStore,\n )\n\n return JSON.parse(result) as TResult\n}\n\nasync function logLastRequestIdFromResponse(response: GraphQLResponse<unknown>) {\n try {\n const requestId = response.headers.get('x-request-id')\n requestIdsCollection.addRequestId(requestId)\n await addPublicMetadata(() => ({\n cmd_all_last_graphql_request_id: requestId ?? undefined,\n }))\n // eslint-disable-next-line no-catch-all/no-catch-all\n } catch {\n // no problem if unable to get request ID.\n }\n}\n\n/**\n * Executes a GraphQL query to an endpoint.\n *\n * @param options - GraphQL request options.\n * @returns The response of the query of generic type <T>.\n */\nexport async function graphqlRequest<T>(options: GraphQLRequestOptions<T>): Promise<T> {\n return performGraphQLRequest<T>({\n ...options,\n queryAsString: options.query as string,\n })\n}\n\n/**\n * Executes a GraphQL query to an endpoint. Uses typed documents.\n *\n * @param options - GraphQL request options.\n * @returns The response of the query of generic type <TResult>.\n */\nexport async function graphqlRequestDoc<TResult, TVariables extends Variables>(\n options: GraphQLRequestDocOptions<TResult, TVariables>,\n): Promise<TResult> {\n return performGraphQLRequest<TResult>({\n ...options,\n queryAsString: resolveRequestDocument(options.query).query,\n })\n}\n", "import {GraphQLClientError, sanitizedHeadersOutput} from './headers.js'\nimport {sanitizeURL} from './urls.js'\nimport {stringifyMessage, outputContent, outputToken, outputDebug} from '../../../public/node/output.js'\nimport {AbortError} from '../../../public/node/error.js'\nimport {ClientError, Variables} from 'graphql-request'\n\nexport function debugLogRequestInfo(\n api: string,\n query: string,\n url: string,\n variables?: Variables,\n headers: {[key: string]: string} = {},\n) {\n outputDebug(outputContent`Sending ${outputToken.json(api)} GraphQL request:\n ${outputToken.raw(query.toString().trim())}\n${variables ? `\\nWith variables:\\n${sanitizeVariables(variables)}\\n` : ''}\nWith request headers:\n${sanitizedHeadersOutput(headers)}\\n\nto ${sanitizeURL(url)}`)\n}\n\nexport function sanitizeVariables(variables: Variables): string {\n const result: Variables = {...variables}\n const sensitiveKeys = ['apiKey', 'serialized_script']\n\n const sanitizedResult = sanitizeDeepVariables(result, sensitiveKeys)\n\n return JSON.stringify(sanitizedResult, null, 2)\n}\n\nfunction sanitizeDeepVariables(value: unknown, sensitiveKeys: string[]): unknown {\n // Checking for JSON\n if (typeof value === 'string') {\n try {\n const parsed = JSON.parse(value)\n if (typeof parsed === 'object' && parsed !== null) {\n const sanitized = sanitizeDeepVariables(parsed, sensitiveKeys)\n return JSON.stringify(sanitized, null)\n }\n // eslint-disable-next-line no-catch-all/no-catch-all\n } catch (error) {\n return value\n }\n }\n\n if (typeof value !== 'object' || value === null) {\n return value\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => sanitizeDeepVariables(item, sensitiveKeys))\n }\n\n const result: Variables = {}\n\n for (const [key, val] of Object.entries(value)) {\n if (sensitiveKeys.includes(key) && typeof val === 'string') {\n result[key] = '*****'\n continue\n }\n\n result[key] = sanitizeDeepVariables(val, sensitiveKeys)\n }\n\n return result\n}\n\nexport function errorHandler(api: string): (error: unknown, requestId?: string) => unknown {\n return (error: unknown, requestId?: string) => {\n if (error instanceof ClientError) {\n const {status} = error.response\n let errorMessage = stringifyMessage(outputContent`\nThe ${outputToken.raw(api)} GraphQL API responded unsuccessfully with${\n status === 200 ? '' : ` the HTTP status ${status} and`\n } errors:\n\n${outputToken.json(error.response.errors)}\n `)\n if (requestId) {\n errorMessage += `\nRequest ID: ${requestId}\n`\n }\n let mappedError: Error\n if (status < 500) {\n mappedError = new GraphQLClientError(errorMessage, status, error.response.errors)\n } else {\n mappedError = new AbortError(errorMessage)\n }\n mappedError.stack = error.stack\n return mappedError\n } else {\n return error\n }\n }\n}\n", "export const MAX_REQUEST_IDS = 100\n\n/**\n * Manages collection of request IDs during command execution\n */\nclass RequestIDCollection {\n private static instance: RequestIDCollection\n\n static getInstance(): RequestIDCollection {\n if (!RequestIDCollection.instance) {\n RequestIDCollection.instance = new RequestIDCollection()\n }\n return RequestIDCollection.instance\n }\n\n private requestIds: string[] = []\n\n /**\n * Add a request ID to the collection\n * We only report the first MAX_REQUEST_IDS request IDs.\n */\n addRequestId(requestId: string | undefined | null) {\n if (requestId && this.requestIds.length < MAX_REQUEST_IDS) {\n this.requestIds.push(requestId)\n }\n }\n\n /**\n * Get all collected request IDs\n */\n getRequestIds(): string[] {\n return this.requestIds\n }\n\n /**\n * Clear all stored request IDs\n */\n clear() {\n this.requestIds = []\n }\n}\n\nexport const requestIdsCollection = RequestIDCollection.getInstance()\n", "import {\n graphqlRequest,\n GraphQLVariables,\n GraphQLResponse,\n graphqlRequestDoc,\n CacheOptions,\n UnauthorizedHandler,\n} from './graphql.js'\nimport {addCursorAndFiltersToAppLogsUrl} from './utilities.js'\nimport {partnersFqdn} from '../context/fqdn.js'\nimport {setNextDeprecationDate} from '../../../private/node/context/deprecations-store.js'\nimport {getPackageManager} from '../node-package-manager.js'\nimport {cwd} from '../path.js'\nimport {AbortError} from '../error.js'\nimport {formatPackageManagerCommand} from '../output.js'\nimport {RequestModeInput} from '../http.js'\nimport Bottleneck from 'bottleneck'\nimport {Variables} from 'graphql-request'\nimport {TypedDocumentNode} from '@graphql-typed-document-node/core'\n\n// API Rate limiter for partners API (Limit is 10 requests per second)\n// Jobs are launched every 150ms to add an extra 50ms margin per request.\n// Only 10 requests can be executed concurrently.\nconst limiter = new Bottleneck({\n minTime: 150,\n maxConcurrent: 10,\n})\n\n/**\n * Sets up the request to the Partners API.\n *\n * @param token - Partners token.\n */\nasync function setupRequest(token: string) {\n const api = 'Partners'\n const fqdn = await partnersFqdn()\n const url = `https://${fqdn}/api/cli/graphql`\n return {\n token,\n api,\n url,\n responseOptions: {onResponse: handleDeprecations},\n }\n}\n\n/**\n * Executes a GraphQL query against the Partners API.\n *\n * @param query - GraphQL query to execute.\n * @param token - Partners token.\n * @param variables - GraphQL variables to pass to the query.\n * @param cacheOptions - Cache options.\n * @param preferredBehaviour - Preferred behaviour for the request.\n * @param unauthorizedHandler - Optional handler for unauthorized requests.\n * @returns The response of the query of generic type <T>.\n */\nexport async function partnersRequest<T>(\n query: string,\n token: string,\n variables?: GraphQLVariables,\n cacheOptions?: CacheOptions,\n preferredBehaviour?: RequestModeInput,\n unauthorizedHandler?: UnauthorizedHandler,\n): Promise<T> {\n const opts = await setupRequest(token)\n const result = limiter.schedule(() =>\n graphqlRequest<T>({\n ...opts,\n query,\n variables,\n cacheOptions,\n preferredBehaviour,\n unauthorizedHandler,\n }),\n )\n\n return result\n}\n\nexport const generateFetchAppLogUrl = async (\n cursor?: string,\n filters?: {\n status?: string\n source?: string\n },\n): Promise<string> => {\n const fqdn = await partnersFqdn()\n const url = `https://${fqdn}/app_logs/poll`\n return addCursorAndFiltersToAppLogsUrl(url, cursor, filters)\n}\n\n/**\n * Executes a GraphQL query against the Partners API. Uses typed documents.\n *\n * @param query - GraphQL query to execute.\n * @param token - Partners token.\n * @param variables - GraphQL variables to pass to the query.\n * @param preferredBehaviour - Preferred behaviour for the request.\n * @param unauthorizedHandler - Optional handler for unauthorized requests.\n * @returns The response of the query of generic type <TResult>.\n */\nexport async function partnersRequestDoc<TResult, TVariables extends Variables>(\n query: TypedDocumentNode<TResult, TVariables>,\n token: string,\n variables?: TVariables,\n preferredBehaviour?: RequestModeInput,\n unauthorizedHandler?: UnauthorizedHandler,\n): Promise<TResult> {\n try {\n const opts = await setupRequest(token)\n const result = limiter.schedule(() =>\n graphqlRequestDoc<TResult, TVariables>({\n ...opts,\n query,\n variables,\n preferredBehaviour,\n unauthorizedHandler,\n }),\n )\n\n return result\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n if (error.errors?.[0]?.extensions?.type === 'unsupported_client_version') {\n const packageManager = await getPackageManager(cwd())\n\n throw new AbortError(['Upgrade your CLI version to run this command.'], null, [\n ['Run', {command: formatPackageManagerCommand(packageManager, 'shopify upgrade')}],\n ])\n }\n\n throw error\n }\n}\n\ninterface Deprecation {\n supportedUntilDate?: string\n}\n\ninterface WithDeprecations {\n deprecations: Deprecation[]\n}\n\n/**\n * Sets the next deprecation date from [GraphQL response extensions](https://www.apollographql.com/docs/resources/graphql-glossary/#extensions)\n * if `response.extensions.deprecations` objects contain a `supportedUntilDate` (ISO 8601-formatted string).\n *\n * @param response - The response of the query.\n */\nexport function handleDeprecations<T>(response: GraphQLResponse<T>): void {\n if (!response.extensions) return\n\n const deprecationDates: Date[] = []\n for (const deprecation of (response.extensions as WithDeprecations).deprecations) {\n if (deprecation.supportedUntilDate) {\n deprecationDates.push(new Date(deprecation.supportedUntilDate))\n }\n }\n\n setNextDeprecationDate(deprecationDates)\n}\n", "export const addCursorAndFiltersToAppLogsUrl = (\n baseUrl: string,\n cursor?: string,\n filters?: {\n status?: string\n source?: string\n },\n): string => {\n const url = new URL(baseUrl)\n\n if (cursor) {\n url.searchParams.append('cursor', cursor)\n }\n\n if (filters?.status) {\n url.searchParams.append('status', filters.status)\n }\n\n if (filters?.source) {\n url.searchParams.append('source', filters.source)\n }\n\n return url.toString()\n}\n", "interface DeprecationsStore {\n nextDeprecationDate: Date | undefined\n}\n\ninterface GlobalWithDeprecationsStore {\n deprecationsStore: DeprecationsStore\n}\n\nconst globalWithDeprecationsStore: GlobalWithDeprecationsStore = {\n ...globalThis,\n deprecationsStore: {\n nextDeprecationDate: undefined,\n },\n}\n\n/**\n * Get the earliest date in the future when deprecations will no longer be supported, if any.\n *\n * @returns The next deprecation date.\n */\nexport function getNextDeprecationDate(): Date | undefined {\n return globalWithDeprecationsStore.deprecationsStore.nextDeprecationDate\n}\n\n/**\n * Set the next deprecation date to the earliest date in the future.\n *\n * @param dates - Dates when deprecations will no longer be supported.\n */\nexport function setNextDeprecationDate(dates: Date[]): Date | undefined {\n if (dates.length < 1) return\n\n const earliestFutureDateTime = earliestDateTimeAfter(Date.now(), dates)\n if (!earliestFutureDateTime) return\n\n const nextDeprecationDate = getNextDeprecationDate()\n if (!nextDeprecationDate || earliestFutureDateTime < nextDeprecationDate.getTime()) {\n globalWithDeprecationsStore.deprecationsStore.nextDeprecationDate = new Date(earliestFutureDateTime)\n }\n}\n\nfunction earliestDateTimeAfter(afterTime: number, dates: Date[]): number | undefined {\n const times = dates.map((date) => date.getTime())\n return times.sort().find((time) => time > afterTime)\n}\n", "export { compactDecrypt } from './jwe/compact/decrypt.js';\nexport { flattenedDecrypt } from './jwe/flattened/decrypt.js';\nexport { generalDecrypt } from './jwe/general/decrypt.js';\nexport { GeneralEncrypt } from './jwe/general/encrypt.js';\nexport { compactVerify } from './jws/compact/verify.js';\nexport { flattenedVerify } from './jws/flattened/verify.js';\nexport { generalVerify } from './jws/general/verify.js';\nexport { jwtVerify } from './jwt/verify.js';\nexport { jwtDecrypt } from './jwt/decrypt.js';\nexport { CompactEncrypt } from './jwe/compact/encrypt.js';\nexport { FlattenedEncrypt } from './jwe/flattened/encrypt.js';\nexport { CompactSign } from './jws/compact/sign.js';\nexport { FlattenedSign } from './jws/flattened/sign.js';\nexport { GeneralSign } from './jws/general/sign.js';\nexport { SignJWT } from './jwt/sign.js';\nexport { EncryptJWT } from './jwt/encrypt.js';\nexport { calculateJwkThumbprint, calculateJwkThumbprintUri } from './jwk/thumbprint.js';\nexport { EmbeddedJWK } from './jwk/embedded.js';\nexport { createLocalJWKSet } from './jwks/local.js';\nexport { createRemoteJWKSet, jwksCache, experimental_jwksCache } from './jwks/remote.js';\nexport { UnsecuredJWT } from './jwt/unsecured.js';\nexport { exportPKCS8, exportSPKI, exportJWK } from './key/export.js';\nexport { importSPKI, importPKCS8, importX509, importJWK } from './key/import.js';\nexport { decodeProtectedHeader } from './util/decode_protected_header.js';\nexport { decodeJwt } from './util/decode_jwt.js';\nexport * as errors from './util/errors.js';\nexport { generateKeyPair } from './key/generate_key_pair.js';\nexport { generateSecret } from './key/generate_secret.js';\nexport * as base64url from './util/base64url.js';\nexport { default as cryptoRuntime } from './util/runtime.js';\n", "import { Buffer } from 'node:buffer';\nimport { decoder } from '../lib/buffer_utils.js';\nfunction normalize(input) {\n let encoded = input;\n if (encoded instanceof Uint8Array) {\n encoded = decoder.decode(encoded);\n }\n return encoded;\n}\nconst encode = (input) => Buffer.from(input).toString('base64url');\nexport const decodeBase64 = (input) => new Uint8Array(Buffer.from(input, 'base64'));\nexport const encodeBase64 = (input) => Buffer.from(input).toString('base64');\nexport { encode };\nexport const decode = (input) => new Uint8Array(Buffer.from(normalize(input), 'base64url'));\n", "import digest from '../runtime/digest.js';\nexport const encoder = new TextEncoder();\nexport const decoder = new TextDecoder();\nconst MAX_INT32 = 2 ** 32;\nexport function concat(...buffers) {\n const size = buffers.reduce((acc, { length }) => acc + length, 0);\n const buf = new Uint8Array(size);\n let i = 0;\n for (const buffer of buffers) {\n buf.set(buffer, i);\n i += buffer.length;\n }\n return buf;\n}\nexport function p2s(alg, p2sInput) {\n return concat(encoder.encode(alg), new Uint8Array([0]), p2sInput);\n}\nfunction writeUInt32BE(buf, value, offset) {\n if (value < 0 || value >= MAX_INT32) {\n throw new RangeError(`value must be >= 0 and <= ${MAX_INT32 - 1}. Received ${value}`);\n }\n buf.set([value >>> 24, value >>> 16, value >>> 8, value & 0xff], offset);\n}\nexport function uint64be(value) {\n const high = Math.floor(value / MAX_INT32);\n const low = value % MAX_INT32;\n const buf = new Uint8Array(8);\n writeUInt32BE(buf, high, 0);\n writeUInt32BE(buf, low, 4);\n return buf;\n}\nexport function uint32be(value) {\n const buf = new Uint8Array(4);\n writeUInt32BE(buf, value);\n return buf;\n}\nexport function lengthAndInput(input) {\n return concat(uint32be(input.length), input);\n}\nexport async function concatKdf(secret, bits, value) {\n const iterations = Math.ceil((bits >> 3) / 32);\n const res = new Uint8Array(iterations * 32);\n for (let iter = 0; iter < iterations; iter++) {\n const buf = new Uint8Array(4 + secret.length + value.length);\n buf.set(uint32be(iter + 1));\n buf.set(secret, 4);\n buf.set(value, 4 + secret.length);\n res.set(await digest('sha256', buf), iter * 32);\n }\n return res.slice(0, bits >> 3);\n}\n", "export class JOSEError extends Error {\n static code = 'ERR_JOSE_GENERIC';\n code = 'ERR_JOSE_GENERIC';\n constructor(message, options) {\n super(message, options);\n this.name = this.constructor.name;\n Error.captureStackTrace?.(this, this.constructor);\n }\n}\nexport class JWTClaimValidationFailed extends JOSEError {\n static code = 'ERR_JWT_CLAIM_VALIDATION_FAILED';\n code = 'ERR_JWT_CLAIM_VALIDATION_FAILED';\n claim;\n reason;\n payload;\n constructor(message, payload, claim = 'unspecified', reason = 'unspecified') {\n super(message, { cause: { claim, reason, payload } });\n this.claim = claim;\n this.reason = reason;\n this.payload = payload;\n }\n}\nexport class JWTExpired extends JOSEError {\n static code = 'ERR_JWT_EXPIRED';\n code = 'ERR_JWT_EXPIRED';\n claim;\n reason;\n payload;\n constructor(message, payload, claim = 'unspecified', reason = 'unspecified') {\n super(message, { cause: { claim, reason, payload } });\n this.claim = claim;\n this.reason = reason;\n this.payload = payload;\n }\n}\nexport class JOSEAlgNotAllowed extends JOSEError {\n static code = 'ERR_JOSE_ALG_NOT_ALLOWED';\n code = 'ERR_JOSE_ALG_NOT_ALLOWED';\n}\nexport class JOSENotSupported extends JOSEError {\n static code = 'ERR_JOSE_NOT_SUPPORTED';\n code = 'ERR_JOSE_NOT_SUPPORTED';\n}\nexport class JWEDecryptionFailed extends JOSEError {\n static code = 'ERR_JWE_DECRYPTION_FAILED';\n code = 'ERR_JWE_DECRYPTION_FAILED';\n constructor(message = 'decryption operation failed', options) {\n super(message, options);\n }\n}\nexport class JWEInvalid extends JOSEError {\n static code = 'ERR_JWE_INVALID';\n code = 'ERR_JWE_INVALID';\n}\nexport class JWSInvalid extends JOSEError {\n static code = 'ERR_JWS_INVALID';\n code = 'ERR_JWS_INVALID';\n}\nexport class JWTInvalid extends JOSEError {\n static code = 'ERR_JWT_INVALID';\n code = 'ERR_JWT_INVALID';\n}\nexport class JWKInvalid extends JOSEError {\n static code = 'ERR_JWK_INVALID';\n code = 'ERR_JWK_INVALID';\n}\nexport class JWKSInvalid extends JOSEError {\n static code = 'ERR_JWKS_INVALID';\n code = 'ERR_JWKS_INVALID';\n}\nexport class JWKSNoMatchingKey extends JOSEError {\n static code = 'ERR_JWKS_NO_MATCHING_KEY';\n code = 'ERR_JWKS_NO_MATCHING_KEY';\n constructor(message = 'no applicable key found in the JSON Web Key Set', options) {\n super(message, options);\n }\n}\nexport class JWKSMultipleMatchingKeys extends JOSEError {\n [Symbol.asyncIterator];\n static code = 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';\n code = 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';\n constructor(message = 'multiple matching keys found in the JSON Web Key Set', options) {\n super(message, options);\n }\n}\nexport class JWKSTimeout extends JOSEError {\n static code = 'ERR_JWKS_TIMEOUT';\n code = 'ERR_JWKS_TIMEOUT';\n constructor(message = 'request timed out', options) {\n super(message, options);\n }\n}\nexport class JWSSignatureVerificationFailed extends JOSEError {\n static code = 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';\n code = 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';\n constructor(message = 'signature verification failed', options) {\n super(message, options);\n }\n}\n", "function isObjectLike(value) {\n return typeof value === 'object' && value !== null;\n}\nexport default function isObject(input) {\n if (!isObjectLike(input) || Object.prototype.toString.call(input) !== '[object Object]') {\n return false;\n }\n if (Object.getPrototypeOf(input) === null) {\n return true;\n }\n let proto = input;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(input) === proto;\n}\n", "import * as base64url from '../runtime/base64url.js';\nexport const encode = base64url.encode;\nexport const decode = base64url.decode;\n", "import { decode as base64url } from './base64url.js';\nimport { decoder } from '../lib/buffer_utils.js';\nimport isObject from '../lib/is_object.js';\nimport { JWTInvalid } from './errors.js';\nexport function decodeJwt(jwt) {\n if (typeof jwt !== 'string')\n throw new JWTInvalid('JWTs must use Compact JWS serialization, JWT must be a string');\n const { 1: payload, length } = jwt.split('.');\n if (length === 5)\n throw new JWTInvalid('Only JWTs using Compact JWS serialization can be decoded');\n if (length !== 3)\n throw new JWTInvalid('Invalid JWT');\n if (!payload)\n throw new JWTInvalid('JWTs must contain a payload');\n let decoded;\n try {\n decoded = base64url(payload);\n }\n catch {\n throw new JWTInvalid('Failed to base64url decode the payload');\n }\n let result;\n try {\n result = JSON.parse(decoder.decode(decoded));\n }\n catch {\n throw new JWTInvalid('Failed to parse the decoded payload as JSON');\n }\n if (!isObject(result))\n throw new JWTInvalid('Invalid JWT Claims Set');\n return result;\n}\n", "import {getLastSeenAuthMethod} from './session.js'\nimport {hashString} from '../../public/node/crypto.js'\nimport {getPackageManager, packageManagerFromUserAgent} from '../../public/node/node-package-manager.js'\nimport BaseCommand from '../../public/node/base-command.js'\nimport {CommandContent} from '../../public/node/hooks/prerun.js'\nimport * as metadata from '../../public/node/metadata.js'\nimport {platformAndArch} from '../../public/node/os.js'\nimport {ciPlatform, cloudEnvironment, macAddress} from '../../public/node/context/local.js'\nimport {cwd} from '../../public/node/path.js'\nimport {currentProcessIsGlobal} from '../../public/node/is-global.js'\nimport {isWsl} from '../../public/node/system.js'\nimport {Command, Interfaces} from '@oclif/core'\n\ninterface StartOptions {\n commandContent: CommandContent\n args: string[]\n currentTime?: number\n commandClass?: Command.Class | typeof BaseCommand\n}\n\nexport async function startAnalytics({\n commandContent,\n args,\n currentTime = new Date().getTime(),\n commandClass,\n}: StartOptions): Promise<void> {\n let startCommand: string = commandContent.command\n if (commandClass && Object.prototype.hasOwnProperty.call(commandClass, 'analyticsNameOverride')) {\n startCommand = (commandClass as typeof BaseCommand).analyticsNameOverride() ?? commandContent.command\n }\n\n let pluginName = commandClass?.plugin?.name\n if (commandClass && 'customPluginName' in commandClass) {\n pluginName = commandClass.customPluginName as string\n }\n\n await metadata.addSensitiveMetadata(() => ({\n commandStartOptions: {\n startTime: currentTime,\n startCommand,\n startArgs: args,\n },\n }))\n\n await metadata.addPublicMetadata(() => ({\n cmd_all_launcher: packageManagerFromUserAgent(),\n cmd_all_alias_used: commandContent.alias,\n cmd_all_topic: commandContent.topic,\n cmd_all_plugin: pluginName,\n cmd_all_force: flagIncluded('force', commandClass) ? args.includes('--force') : undefined,\n }))\n}\n\ninterface EnvironmentData {\n uname: string\n env_ci: boolean\n env_ci_platform?: string\n env_plugin_installed_any_custom: boolean\n env_plugin_installed_shopify: string\n env_shell: string\n env_web_ide: string | undefined\n env_device_id: string\n env_cloud: string\n env_package_manager: string\n env_is_global: boolean\n env_auth_method: string\n env_is_wsl: boolean\n env_build_repository: string\n}\n\nexport async function getEnvironmentData(config: Interfaces.Config): Promise<EnvironmentData> {\n const ciplatform = ciPlatform()\n\n const pluginNames = getPluginNames(config)\n const shopifyPlugins = pluginNames.filter((plugin) => plugin.startsWith('@shopify/'))\n\n const {platform, arch} = platformAndArch()\n\n return {\n uname: `${platform} ${arch}`,\n env_ci: ciplatform.isCI,\n env_ci_platform: ciplatform.name,\n env_plugin_installed_any_custom: pluginNames.length !== shopifyPlugins.length,\n env_plugin_installed_shopify: JSON.stringify(shopifyPlugins),\n env_shell: config.shell,\n env_web_ide: cloudEnvironment().editor ? cloudEnvironment().platform : undefined,\n env_device_id: hashString(await macAddress()),\n env_cloud: cloudEnvironment().platform,\n env_package_manager: await getPackageManager(cwd()),\n env_is_global: currentProcessIsGlobal(),\n env_auth_method: await getLastSeenAuthMethod(),\n env_is_wsl: await isWsl(),\n env_build_repository: process.env.SHOPIFY_CLI_BUILD_REPO ?? 'unknown',\n }\n}\n\nexport async function getSensitiveEnvironmentData(config: Interfaces.Config) {\n return {\n env_plugin_installed_all: JSON.stringify(getPluginNames(config)),\n env_shopify_variables: JSON.stringify(getShopifyEnvironmentVariables()),\n }\n}\n\nfunction getShopifyEnvironmentVariables() {\n return Object.fromEntries(Object.entries(process.env).filter(([key]) => key.startsWith('SHOPIFY_')))\n}\n\nfunction getPluginNames(config: Interfaces.Config) {\n const pluginNames = [...config.plugins.keys()]\n return pluginNames.sort().filter((plugin) => !plugin.startsWith('@oclif/'))\n}\n\nfunction flagIncluded(flag: string, commandClass?: Command.Class | typeof BaseCommand) {\n if (!commandClass) return false\n\n const commandFlags = commandClass.flags ?? {}\n return Object.keys(commandFlags).includes(flag)\n}\n"],
5
- "mappings": "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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MACZ,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MACpB,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MACd,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAC1B,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MACZ,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAChB,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MACvB,eAAe;AAAA;AAAA,MACf,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MACd,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MACvB,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MACvB,qBAAqB;AAAA;AAAA;AAAA;AAAA,IACvB;AAAA;AAAA;;;ACvBA;AAAA,sFAAAC,UAAA;AAAA;AAAA;AAEA,QAAI,SAAS,KAAK;AAClB,UAAM;AACN,cAAU;AAAA,MACR,MAAM,IAAI,UAAU;AAAA,MACpB,eAAe,IAAI,mBAAmB;AAAA,MACtC,iBAAiB,IAAI,qBAAqB;AAAA,MAC1C,oBAAoB,IAAI,wBAAwB;AAAA,MAChD,cAAc,IAAI,kBAAkB;AAAA,MACpC,kBAAkB,IAAI,sBAAsB;AAAA,MAC5C,UAAU,IAAI,cAAc;AAAA,IAC9B;AAEA,IAAAA,SAAQ,UAAU,SAAU,IAAI;AAC9B,aAAO;AAAA;AAAA;AAAA;AAAA,QAIP,KAAK,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,QAKP,KAAK,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,QAKP,KAAK,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,QAKP,KAAK,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,QAKP,KAAK,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,QAKP,KAAK,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,QAKP,KAAK,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,QAKP,KAAK,EAAE;AAAA,MAAmB;AAAA,IAC5B;AAEA,gBAAY;AAAA,MACV,MAAM;AAAA,QACJ,MAAMA,SAAQ;AAAA,QACd,SAAS,CAAC,cAAc;AAAA,QACxB,oBAAoB;AAAA,QACpB,MAAM,IAAI,UAAU;AAAA,MACtB;AAAA,MACA,aAAa;AAAA,QACX,MAAMA,SAAQ;AAAA,QACd,SAAS,CAAC;AAAA,QACV,oBAAoB;AAAA,QACpB,MAAM,IAAI,iBAAiB;AAAA,MAC7B;AAAA,MACA,iBAAiB;AAAA,QACf,MAAMA,SAAQ;AAAA,QACd,SAAS,CAAC,eAAe;AAAA,QACzB,oBAAoB;AAAA,QACpB,MAAM,IAAI,qBAAqB;AAAA,MACjC;AAAA,MACA,kBAAkB;AAAA,QAChB,MAAMA,SAAQ;AAAA,QACd,SAAS,CAAC,iBAAiB,iBAAiB;AAAA,QAC5C,oBAAoB;AAAA,QACpB,MAAM,IAAI,sBAAsB;AAAA,MAClC;AAAA,MACA,WAAW;AAAA,QACT,MAAMA,SAAQ;AAAA,QACd,SAAS,CAAC,iBAAiB,mBAAmB,cAAc;AAAA,QAC5D,oBAAoB;AAAA,QACpB,MAAM,IAAI,eAAe;AAAA,MAC3B;AAAA,MACA,iBAAiB;AAAA,QACf,MAAMA,SAAQ;AAAA,QACd,SAAS,CAAC,iBAAiB,mBAAmB,cAAc;AAAA,QAC5D,oBAAoB;AAAA,QACpB,MAAM,IAAI,qBAAqB;AAAA,MACjC;AAAA,MACA,SAAS;AAAA,QACP,MAAMA,SAAQ;AAAA,QACd,SAAS,CAAC,iBAAiB,mBAAmB,cAAc;AAAA,QAC5D,oBAAoB;AAAA,QACpB,MAAM,IAAI,aAAa;AAAA,MACzB;AAAA,MACA,QAAQ;AAAA,QACN,MAAMA,SAAQ;AAAA,QACd,SAAS,CAAC,iBAAiB,iBAAiB;AAAA,QAC5C,oBAAoB;AAAA,QACpB,MAAM,IAAI,YAAY;AAAA,MACxB;AAAA,MACA,MAAM;AAAA,QACJ,MAAMA,SAAQ;AAAA,QACd,SAAS,CAAC,iBAAiB,mBAAmB,cAAc;AAAA,QAC5D,oBAAoB;AAAA,QACpB,MAAM,IAAI,UAAU;AAAA,MACtB;AAAA,MACA,OAAO;AAAA,QACL,MAAMA,SAAQ;AAAA,QACd,SAAS,CAAC,iBAAiB,mBAAmB,gBAAgB,kBAAkB;AAAA,QAChF,oBAAoB;AAAA,QACpB,MAAM,IAAI,WAAW;AAAA,MACvB;AAAA,MACA,QAAQ;AAAA,QACN,MAAMA,SAAQ;AAAA,QACd,SAAS,CAAC,iBAAiB,mBAAmB,gBAAgB,kBAAkB;AAAA,QAChF,oBAAoB;AAAA,QACpB,MAAM,IAAI,YAAY;AAAA,MACxB;AAAA,MACA,UAAU;AAAA,QACR,MAAMA,SAAQ;AAAA,QACd,SAAS,CAAC,iBAAiB,mBAAmB,gBAAgB,kBAAkB;AAAA,QAChF,oBAAoB;AAAA,QACpB,MAAM,IAAI,cAAc;AAAA,MAC1B;AAAA,MACA,MAAM;AAAA,QACJ,MAAMA,SAAQ;AAAA,QACd,SAAS,CAAC,iBAAiB,mBAAmB,cAAc;AAAA,QAC5D,oBAAoB;AAAA,QACpB,MAAM,IAAI,UAAU;AAAA,MACtB;AAAA,MACA,mBAAmB;AAAA,QACjB,MAAMA,SAAQ;AAAA,QACd,SAAS,CAAC,iBAAiB,mBAAmB,cAAc;AAAA,QAC5D,oBAAoB;AAAA,QACpB,MAAM,IAAI,uBAAuB;AAAA,MACnC;AAAA,MACA,qBAAqB;AAAA,QACnB,MAAMA,SAAQ;AAAA,QACd,SAAS,CAAC,iBAAiB,mBAAmB,cAAc;AAAA,QAC5D,oBAAoB;AAAA,QACpB,MAAM,IAAI,yBAAyB;AAAA,MACrC;AAAA,IACF;AACA,IAAAA,SAAQ,QAAQ,OAAO,KAAK,SAAS;AAErC,IAAAA,SAAQ,OAAO,SAAU,MAAM,IAAI;AACjC,aAAO,UAAU,IAAI,EAAE,KAAK,EAAE;AAAA,IAChC;AAEA,IAAAA,SAAQ,UAAU,SAAU,MAAM;AAChC,UAAI;AACJ,wBAAW,UAAU,IAAI,GAClB,MAAM,UAAU,OAAO,QAAQ,MAAM,SAAS,QAAQ,IAAI,SAAU,GAAG;AAC5E,eAAO,QAAQ,CAAC;AAAA,MAClB,CAAC,GAAG,SAAS,qBAAqB,QAAQ,qBAAqB,IAAI,SAAS,IAAI,EAAE,KAAK;AAAA,CAAI;AAAA,IAC7F;AAAA;AAAA;;;ACjKA;AAAA;AAAA;AAAA;AAEA,aAAS,mBAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,KAAK,KAAK;AAAE,UAAI;AAAE,YAAI,OAAO,IAAI,GAAG,EAAE,GAAG,GAAO,QAAQ,KAAK;AAAA,MAAO,SAAS,OAAO;AAAE,eAAO,KAAK;AAAG;AAAA,MAAQ;AAAE,MAAI,KAAK,OAAQ,QAAQ,KAAK,IAAY,QAAQ,QAAQ,KAAK,EAAE,KAAK,OAAO,MAAM;AAAA,IAAK;AAExQ,aAAS,kBAAkB,IAAI;AAAE,aAAO,WAAY;AAAE,YAAI,OAAO,MAAM,OAAO;AAAW,eAAO,IAAI,QAAQ,SAAU,SAAS,QAAQ;AAAE,cAAI,MAAM,GAAG,MAAM,MAAM,IAAI;AAAG,mBAAS,MAAM,OAAO;AAAE,+BAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,QAAQ,KAAK;AAAA,UAAG;AAAE,mBAAS,OAAOC,MAAK;AAAE,+BAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,SAASA,IAAG;AAAA,UAAG;AAAE,gBAAM,MAAS;AAAA,QAAG,CAAC;AAAA,MAAG;AAAA,IAAG;AAEpY,QAAI,QAAQ,iBAAiB,SAAS;AACtC,aAAS;AACT,aAAS;AACT,cAAU;AAEV,sBAAkB,WAAY;AAAA,MAC5B,MAAM,gBAAgB;AAAA,QACpB,YAAY,UAAU,CAAC,GAAG;AACxB,iBAAO,KAAK,SAAS,KAAK,UAAU,IAAI,GAEpC,KAAK,SAAS,SAChB,KAAK,QAAQ,KAAK,SAAS,EAAE,OAAO,IAGlC,KAAK,UAAU,SACjB,KAAK,SAAS,IAAI,OAAO,IAAI,IAG/B,KAAK,aAAa,IAEd,KAAK,UAAU,SACjB,KAAK,SAAS,KAAK,MAAM,aAAa,KAAK,aAAa,IAG1D,KAAK,aAAa,KAAK,OAAO,UAAU,GACxC,KAAK,WAAW,CAAC,GACjB,KAAK,OAAO,CAAC,GACb,KAAK,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,OAAO,KAAK,QAAQ,EAAK,GAAG,KAAK,OAAO,KAAK,YAAY,EAAI,CAAC,CAAC,EAAE,KAAK,MACjG,KAAK,aAAa,CAC1B,EAAE,KAAK,OACC;AAAA,YACL,QAAQ,KAAK;AAAA,YACb,YAAY,KAAK;AAAA,UACnB,EACD;AAAA,QACH;AAAA,QAEA,OAAO,QAAQ,KAAK;AAClB,wBAAO,gBAAgB,CAAC,GACjB,IAAI,KAAK,QAAQ,CAAC,SAAS,YAChC,OAAO,GAAG,SAAS,OACV,KAAK,OAAO,QAAQ,SAAS,CAAC,CACtC,GAEG,OACF,OAAO,GAAG,WAAW,CAAC,SAAS,YAAY;AACzC,gBAAI;AACJ,oBAAQ,MAAM,KAAK,SAAS,OAAO,MAAM,OAAO,IAAI,OAAO,UAAU,SAAS,OAAO,IAAI;AAAA,UAC3F,CAAC,GAGC,OAAO,QACF,QAAQ,IAER,OAAO,KAAK,SAAS,OAAO,EAEtC;AAAA,QACH;AAAA,QAEA,YAAY,MAAM;AAChB,iBAAO,IAAI,KAAK,QAAQ,CAAC,SAAS,WAAW;AAC3C,gBAAI;AACJ,6BAAU,QAAQ,QAAQ,IAAI,GACvB,KAAK,OAAO,MAAM,CAAC,CAAC,UAAU,QAAQ,OAAO,CAAC,CAAC,EAAE,KAAK,CAACA,MAAK,YAC7DA,QAAO,OACF,OAAOA,IAAG,KAGnB,KAAK,KAAK,IAAI,IAAI,QAAQ,CAAC,GACpB,QAAQ,QAAQ,CAAC,CAAC,EAC1B;AAAA,UACH,CAAC;AAAA,QACH;AAAA,QAEA,eAAe;AACb,iBAAO,KAAK,QAAQ,IAAI,QAAQ,MAAM,IAAI,OACjC,KAAK,YAAY,CAAC,CAC1B,CAAC;AAAA,QACJ;AAAA,QAEA,eAAe,KAAK;AAClB,cAAI,QAAQ;AAEZ,iBAAO,kBAAkB,aAAa;AACpC,yBAAM,MAAM,OACL,IAAI,MAAM,QAAQ,CAAC,SAAS,WAC1B,MAAM,OAAO,MAAM,CAAC,GAAG,CAAC,EAAE,YAAY,SAAUA,MAAK,SAAS;AACnE,qBAAIA,QAAO,OACF,OAAOA,IAAG,IAEV,QAAQ,QAAQ,CAAC,CAAC;AAAA,YAE7B,CAAC,CACF;AAAA,UACH,CAAC,EAAE;AAAA,QACL;AAAA,QAEA,eAAe,UAAU;AACvB,iBAAO,KAAK,QAAQ,IAAI,CAAC,SAAS,QAAQ,GAAG,SAAS,eAAe,CAAC,EAAE,IAAI,aACnE,IAAI,KAAK,QAAQ,CAAC,SAAS,WAAW;AAC3C,gBAAI;AAEJ,6BAAU,UAAQ;AAChB,kBAAI,SAAS;AACX,4BAAK,WAAW,eAAe,aAAa,OAAO,GACnD,KAAK,SAAS,OAAO,IAAI,UAClB,QAAQ;AAAA,YAEnB,GAEA,KAAK,WAAW,GAAG,aAAa,OAAO,GAChC,KAAK,WAAW,UAAU,OAAO;AAAA,UAC1C,CAAC,CACF,CAAC;AAAA,QACJ;AAAA,QAEA,kBAAkB,UAAU;AAC1B,cAAI,SAAS;AAEb,iBAAO,KAAK,QAAQ,IAAI,CAAC,SAAS,QAAQ,GAAG,SAAS,eAAe,CAAC,EAAE;AAAA,YAExE,4BAAY;AACV,kBAAI,OAAO,kBAAkB,WAAW,SAAS;AAC/C,uBAAK,OAAO,eACV,MAAM,IAAI,OAAO,QAAQ,CAAC,SAAS,WAC1B,OAAO,WAAW,YAAY,SAAS,SAAUA,MAAK,MAAM;AACjE,sBAAIA,QAAO;AACT,2BAAO,OAAOA,IAAG;AAGnB,sBAAI,SAAS;AACX,2BAAO,QAAQ;AAAA,gBAEnB,CAAC,CACF,IAGI,OAAO,OAAO,SAAS,OAAO;AAAA,cACvC,CAAC;AAED,qBAAO,SAAU,IAAI;AACnB,uBAAO,KAAK,MAAM,MAAM,SAAS;AAAA,cACnC;AAAA,YACF,GAAE;AAAA,UAAC,CAAC;AAAA,QACN;AAAA,QAEA,eAAe,MAAM,IAAI,MAAM,IAAI;AACjC,cAAI;AACJ,wBAAO,QAAQ,KAAK,MAAM,EAAE,GACrB,CAAC,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,EAAE,OAAO,MAAM,MAAM,EAAE;AAAA,QAC7D;AAAA,QAEA,aAAa,MAAM;AACjB,iBAAO,KAAK,OAAO,QAAQ,KAAK,KAAK,MAAM;AAAA,QAC7C;AAAA,QAEA,WAAW,QAAQ,IAAM;AACvB,cAAI,GAAG,GAAG,KAAK;AAGf,eAFA,MAAM,OAAO,KAAK,KAAK,QAAQ,GAE1B,IAAI,GAAG,MAAM,IAAI,QAAQ,IAAI,KAAK;AACrC,gBAAI,IAAI,CAAC,GACT,cAAc,KAAK,SAAS,CAAC,EAAE,OAAO,SAAS;AAGjD,sBAAK,WAAW,CAAC,GACjB,KAAK,aAAa,IAClB,KAAK,OAAO,IAAI,KAAK,GACrB,KAAK,WAAW,IAAI,KAAK,GAClB,KAAK,QAAQ,QAAQ;AAAA,QAC9B;AAAA,MAEF;AAGA,6BAAgB,UAAU,YAAY,SACtC,gBAAgB,UAAU,WAAW;AAAA,QACnC,OAAO;AAAA,QACP,eAAe,CAAC;AAAA,QAChB,QAAQ;AAAA,QACR;AAAA,QACA,QAAQ;AAAA,MACV,GACO;AAAA,IACT,EAAE,KAAK,MAAM;AAEb,WAAO,UAAU;AAAA;AAAA;;;AChMjB;AAAA;AAAA;AAAA;AAEA,aAAS,eAAe,KAAK,GAAG;AAAE,aAAO,gBAAgB,GAAG,KAAK,sBAAsB,KAAK,CAAC,KAAK,iBAAiB;AAAA,IAAG;AAEtH,aAAS,mBAAmB;AAAE,YAAM,IAAI,UAAU,sDAAsD;AAAA,IAAG;AAE3G,aAAS,sBAAsB,KAAK,GAAG;AAAE,UAAI,OAAO,CAAC,GAAO,KAAK,IAAU,KAAK,IAAW,KAAK;AAAW,UAAI;AAAE,iBAAS,KAAK,IAAI,OAAO,QAAQ,EAAE,GAAG,IAAI,EAAE,MAAM,KAAK,GAAG,KAAK,GAAG,UAAoB,KAAK,KAAK,GAAG,KAAK,GAAO,OAAK,KAAK,WAAW,KAA3D,KAAK;AAA6B;AAAA,MAAqC,SAASC,MAAK;AAAE,aAAK,IAAM,KAAKA;AAAA,MAAK,UAAE;AAAU,YAAI;AAAE,UAAI,CAAC,MAAM,GAAG,UAAa,QAAM,GAAG,OAAU;AAAA,QAAG,UAAE;AAAU,cAAI,GAAI,OAAM;AAAA,QAAI;AAAA,MAAE;AAAE,aAAO;AAAA,IAAM;AAExZ,aAAS,gBAAgB,KAAK;AAAE,UAAI,MAAM,QAAQ,GAAG,EAAG,QAAO;AAAA,IAAK;AAEpE,aAAS,mBAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,KAAK,KAAK;AAAE,UAAI;AAAE,YAAI,OAAO,IAAI,GAAG,EAAE,GAAG,GAAO,QAAQ,KAAK;AAAA,MAAO,SAAS,OAAO;AAAE,eAAO,KAAK;AAAG;AAAA,MAAQ;AAAE,MAAI,KAAK,OAAQ,QAAQ,KAAK,IAAY,QAAQ,QAAQ,KAAK,EAAE,KAAK,OAAO,MAAM;AAAA,IAAK;AAExQ,aAAS,kBAAkB,IAAI;AAAE,aAAO,WAAY;AAAE,YAAI,OAAO,MAAM,OAAO;AAAW,eAAO,IAAI,QAAQ,SAAU,SAAS,QAAQ;AAAE,cAAI,MAAM,GAAG,MAAM,MAAM,IAAI;AAAG,mBAAS,MAAM,OAAO;AAAE,+BAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,QAAQ,KAAK;AAAA,UAAG;AAAE,mBAAS,OAAOA,MAAK;AAAE,+BAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,SAASA,IAAG;AAAA,UAAG;AAAE,gBAAM,MAAS;AAAA,QAAG,CAAC;AAAA,MAAG;AAAA,IAAG;AAEpY,QAAI,QAAQ,mBAAmB,SAAS;AACxC,aAAS;AACT,aAAS;AACT,cAAU;AAEV,wBAAoB,WAAY;AAAA,MAC9B,MAAM,kBAAkB;AAAA,QACtB,YAAY,UAAU,CAAC,GAAG;AACxB,iBAAO,KAAK,SAAS,KAAK,UAAU,IAAI,GAEpC,KAAK,SAAS,SAChB,KAAK,QAAQ,KAAK,SAAS,EAAE,SAAS,IAGpC,KAAK,UAAU,SACjB,KAAK,SAAS,IAAI,OAAO,IAAI,IAG/B,KAAK,aAAa,IAEd,KAAK,gBAAgB,QACvB,KAAK,SAAS,IAAI,KAAK,MAAM,QAAQ,KAAK,cAAc,KAAK,aAAa,GAC1E,KAAK,aAAa,IAAI,KAAK,MAAM,QAAQ,KAAK,cAAc,KAAK,aAAa,KACrE,KAAK,UAAU,QAAQ,KAAK,OAAO,aAAa,OACzD,KAAK,aAAa,IAAI,KAAK,MAAM,QAAQ,KAAK,OAAO,cAAc,KAAK,OAAO,OAAO,KAElF,KAAK,UAAU,SACjB,KAAK,SAAS,IAAI,KAAK,MAAM,KAAK,aAAa,IAGjD,KAAK,aAAa,KAAK,OAAO,UAAU,IAG1C,KAAK,WAAW,CAAC,GACjB,KAAK,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,OAAO,KAAK,QAAQ,EAAK,GAAG,KAAK,OAAO,KAAK,YAAY,EAAI,CAAC,CAAC,EAAE,KAAK,OACxG,KAAK,aAAa,GAEX;AAAA,YACL,QAAQ,KAAK;AAAA,YACb,YAAY,KAAK;AAAA,UACnB,EACD;AAAA,QACH;AAAA,QAEA,OAAO,QAAQ,KAAK;AAClB,wBAAO,gBAAgB,CAAC,GACjB,IAAI,KAAK,QAAQ,CAAC,SAAS,YAChC,OAAO,GAAG,SAAS,OACV,KAAK,OAAO,QAAQ,SAAS,CAAC,CACtC,GAEG,OACF,OAAO,GAAG,WAAW,CAAC,SAAS,YAAY;AACzC,gBAAI;AACJ,oBAAQ,MAAM,KAAK,SAAS,OAAO,MAAM,OAAO,IAAI,OAAO,UAAU,SAAS,OAAO,IAAI;AAAA,UAC3F,CAAC,GAGC,OAAO,WAAW,UACb,QAAQ,IAER,OAAO,KAAK,SAAS,OAAO,EAEtC;AAAA,QACH;AAAA,QAEA,eAAe;AACb,iBAAO,QAAQ,MAAM,QAAQ,UACpB,KAAK,OAAO,cAAc,MAAM;AAAA,YACrC,KAAK,QAAQ,QAAQ,IAAI;AAAA,UAC3B,CAAC,CACF;AAAA,QACH;AAAA,QAEA,eAAe,KAAK;AAClB,cAAI,QAAQ;AAEZ,iBAAO,kBAAkB,aAAa;AACpC,gBAAI,GAAG;AAEP,kBAAM,MAAM;AAEZ,gBAAI,OAAO,MAAM,MAAM,OAAO,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,GAE/C,QAAQ,eAAe,MAAM,CAAC,GAE9B,SAAS,eAAe,MAAM,CAAC,GAAG,CAAC;AAEvC,uBAAI,OAAO,CAAC,GACZ,UAAU,OAAO,CAAC,GACX;AAAA,UACT,CAAC,EAAE;AAAA,QACL;AAAA,QAEA,eAAe,UAAU;AACvB,iBAAO,KAAK,QAAQ,IAAI,CAAC,SAAS,QAAQ,GAAG,SAAS,eAAe,CAAC,EAAE,IAAI,aACnE,IAAI,KAAK,QAAQ,CAAC,SAAS,WACzB,KAAK,WAAW,UAAU,SAAS,OACxC,KAAK,SAAS,OAAO,IAAI,UAClB,QAAQ,EAChB,CACF,CACF,CAAC;AAAA,QACJ;AAAA,QAEA,kBAAkB,UAAU;AAC1B,cAAI,SAAS;AAEb,iBAAO,CAAC,SAAS,QAAQ,GAAG,SAAS,eAAe,CAAC,EAAE;AAAA,YAEvD,4BAAY;AACV,kBAAI,QAAQ,kBAAkB,WAAW,SAAS;AAChD,uBAAK,OAAO,eACV,MAAM,OAAO,WAAW,YAAY,OAAO,IAGtC,OAAO,OAAO,SAAS,OAAO;AAAA,cACvC,CAAC;AAED,qBAAO,SAAU,IAAI;AACnB,uBAAO,MAAM,MAAM,MAAM,SAAS;AAAA,cACpC;AAAA,YACF,GAAE;AAAA,UAAC;AAAA,QACL;AAAA,QAEA,eAAe,MAAM,IAAI,MAAM,IAAI;AACjC,cAAI;AACJ,wBAAO,QAAQ,KAAK,MAAM,EAAE,GACrB,CAAC,KAAK,MAAM,EAAE,OAAO,MAAM,MAAM,EAAE;AAAA,QAC5C;AAAA,QAEA,aAAa,MAAM;AACjB,iBAAO,KAAK,OAAO,IAAI,EAAE,KAAK,KAAK,MAAM;AAAA,QAC3C;AAAA,QAEA,WAAW,QAAQ,IAAM;AACvB,cAAI,GAAG,GAAG,KAAK;AAGf,eAFA,MAAM,OAAO,KAAK,KAAK,QAAQ,GAE1B,IAAI,GAAG,MAAM,IAAI,QAAQ,IAAI,KAAK;AACrC,gBAAI,IAAI,CAAC,GACT,cAAc,KAAK,SAAS,CAAC,EAAE,OAAO,SAAS;AAMjD,iBAHA,KAAK,WAAW,CAAC,GACjB,KAAK,aAAa,IAEd,QACK,KAAK,QAAQ,IAAI,CAAC,KAAK,OAAO,KAAK,GAAG,KAAK,WAAW,KAAK,CAAC,CAAC,KAEpE,KAAK,OAAO,WAAW,GACvB,KAAK,WAAW,WAAW,GACpB,KAAK,QAAQ,QAAQ;AAAA,QAEhC;AAAA,MAEF;AAGA,+BAAkB,UAAU,YAAY,WACxC,kBAAkB,UAAU,WAAW;AAAA,QACrC,OAAO;AAAA,QACP,eAAe,CAAC;AAAA,QAChB,cAAc;AAAA,QACd,QAAQ;AAAA,QACR;AAAA,QACA,QAAQ;AAAA,MACV,GACO;AAAA,IACT,EAAE,KAAK,MAAM;AAEb,WAAO,UAAU;AAAA;AAAA;;;ACzLjB;AAAA,6FAAAC,UAAAC,SAAA;AAAA;AAAA;AAEA,aAASC,gBAAe,KAAK,GAAG;AAAE,aAAOC,iBAAgB,GAAG,KAAKC,uBAAsB,KAAK,CAAC,KAAKC,kBAAiB;AAAA,IAAG;AAEtH,aAASA,oBAAmB;AAAE,YAAM,IAAI,UAAU,sDAAsD;AAAA,IAAG;AAE3G,aAASD,uBAAsB,KAAK,GAAG;AAAE,UAAI,OAAO,CAAC,GAAO,KAAK,IAAU,KAAK,IAAW,KAAK;AAAW,UAAI;AAAE,iBAAS,KAAK,IAAI,OAAO,QAAQ,EAAE,GAAG,IAAI,EAAE,MAAM,KAAK,GAAG,KAAK,GAAG,UAAoB,KAAK,KAAK,GAAG,KAAK,GAAO,OAAK,KAAK,WAAW,KAA3D,KAAK;AAA6B;AAAA,MAAqC,SAASE,MAAK;AAAE,aAAK,IAAM,KAAKA;AAAA,MAAK,UAAE;AAAU,YAAI;AAAE,UAAI,CAAC,MAAM,GAAG,UAAa,QAAM,GAAG,OAAU;AAAA,QAAG,UAAE;AAAU,cAAI,GAAI,OAAM;AAAA,QAAI;AAAA,MAAE;AAAE,aAAO;AAAA,IAAM;AAExZ,aAASH,iBAAgB,KAAK;AAAE,UAAI,MAAM,QAAQ,GAAG,EAAG,QAAO;AAAA,IAAK;AAEpE,aAASI,oBAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,KAAK,KAAK;AAAE,UAAI;AAAE,YAAI,OAAO,IAAI,GAAG,EAAE,GAAG,GAAO,QAAQ,KAAK;AAAA,MAAO,SAAS,OAAO;AAAE,eAAO,KAAK;AAAG;AAAA,MAAQ;AAAE,MAAI,KAAK,OAAQ,QAAQ,KAAK,IAAY,QAAQ,QAAQ,KAAK,EAAE,KAAK,OAAO,MAAM;AAAA,IAAK;AAExQ,aAASC,mBAAkB,IAAI;AAAE,aAAO,WAAY;AAAE,YAAI,OAAO,MAAM,OAAO;AAAW,eAAO,IAAI,QAAQ,SAAU,SAAS,QAAQ;AAAE,cAAI,MAAM,GAAG,MAAM,MAAM,IAAI;AAAG,mBAAS,MAAM,OAAO;AAAE,YAAAD,oBAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,QAAQ,KAAK;AAAA,UAAG;AAAE,mBAAS,OAAOD,MAAK;AAAE,YAAAC,oBAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,SAASD,IAAG;AAAA,UAAG;AAAE,gBAAM,MAAS;AAAA,QAAG,CAAC;AAAA,MAAG;AAAA,IAAG;AAEpY,QAAI,iBAAiBG,oBAAmBC,kBAAiB,gBAAgBC;AACzE,IAAAA,UAAS;AACT,sBAAkB;AAClB,IAAAD,mBAAkB;AAClB,IAAAD,qBAAoB;AACpB,qBAAiB,MAAqB;AAAA,MACpC,YAAY,UAAU,cAAc,sBAAsB;AACxD,aAAK,WAAW,UAChB,KAAK,eAAe,cACpB,KAAK,aAAa,KAAK,SAAS,IAChC,KAAK,WAAW,KAAK,SAAS,aAAa,GAC3CE,QAAO,KAAK,sBAAsB,sBAAsB,IAAI,GAC5D,KAAK,UAAU,CAAC,GAChB,KAAK,2BAA2B,CAAC,GACjC,KAAK,mBAAmB,KAAK,cAAc,MAEvC,KAAK,cAAc,SACrB,KAAK,aAAa,KAAK,SAAS,cAAc,UAAU,IAAID,iBAAgB;AAAA,UAC1E,OAAO,KAAK;AAAA,UACZ,eAAe,KAAK;AAAA,UACpB,SAAS,KAAK;AAAA,UACd,QAAQ,KAAK,SAAS;AAAA,QACxB,CAAC,IAAI,KAAK,SAAS,cAAc,YAAY,IAAID,mBAAkB;AAAA,UACjE,OAAO,KAAK;AAAA,UACZ,eAAe,KAAK;AAAA,UACpB,cAAc,KAAK;AAAA,UACnB,SAAS,KAAK;AAAA,UACd,QAAQ,KAAK,SAAS;AAAA,QACxB,CAAC,IAAI,SAGP,KAAK,SAAS,aAAa,KAAK,YAChC,KAAK,SAAS,YAAY,KAAK,WAAW,WAC1C,KAAK,QAAQ,KAAK,WAAW,MAAM,KAAK,cACtC,KAAK,UAAU,SACR,KAAK,UAAU,QAAQ,KAAK,oBAAoB,KAAK,cAAc,CAAC,EAC5E,EAAE,KAAK,MACC,KAAK,WAAW,eAAe,KAAK,QAAQ,CACpD,EAAE,KAAK,MACC,KAAK,UAAU,mBAAmB,CAAC,KAAK,SAAS,OAAO,CAAC,CAAC,CAClE,EAAE,KAAK,MAAM;AACZ,cAAI;AAEJ,iBAAI,QAAQ,OAAO,KAAK,YAAY,YAAY,MACvC,KAAK,UAAU,aAAa,CAAC,CAAC,EAAE,MAAM,OACpC,KAAK,SAAS,OAAO,QAAQ,SAAS,CAAC,CAC/C,GACA,KAAK,iBAAiB,GAAG,SAAU,cACpC,KAAK,MAAM,GAGN,KAAK;AAAA,QACd,CAAC;AAAA,MACH;AAAA,MAEA,YAAY,SAAS;AACnB,YAAI,QAAQ;AAEZ,eAAOD,mBAAkB,aAAa;AACpC,cAAI,QAEA,OAAO,MAAM,MAAM;AAEvB,0BAAS,KAAK,QACP,OAAO,QAAQ,MAAM,SAAS,QAAQ,GAAG,WAAW,QAAQ,SAAS,CAAC,EAAE;AAAA,QACjF,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,UAAU,SAAS,SAAS;AAC1B,YAAI,SAAS;AAEb,eAAOA,mBAAkB,aAAa;AACpC,cAAI,UAAU,SAAS,MAAM,SAAS,GAAG,aAAa,KAAK,gBAAgB,aAAa;AAExF,cAAI;AACF,kBAAM,QAAQ,QAAQ,GAAG;AACzB,gBAAI,QAAQ,CAAC,QAAQ,MAAM,GAAG,GAAG,GAAG,QAAQ,MAAM,MAAM,CAAC,CAAC;AAI1D,gBAHA,OAAO,MAAM,CAAC,GACd,OAAO,MAAM,CAAC,GAEV,SAAS;AACX,qBAAO,MAAM,OAAO,SAAS,UAAU,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,MAAM;AACnE,gBAAI,SAAS,qBAAqB;AACvC,kBAAI,cAAc,KAAK,MAAM,GAAG,GAE5B,eAAeN,gBAAe,aAAa,CAAC;AAOhD,qBALA,cAAc,aAAa,CAAC,GAC5B,iBAAiB,aAAa,CAAC,GAC/B,UAAU,aAAa,CAAC,GACxB,WAAW,YAAY,SAAS,IAAI,CAAC,CAAC,cAAc,QAEhD,mBAAmB,OAAO,YAC5B,UAAU,MAAM,OAAO,SAAS,UAAU,QAAQ,GAClD,cAAc,YAAY,OAAO,YAAY,WAAW,KAAK,IACtD,MAAM,OAAO,QAAQ,OAAO,QAAQ,OAAO,SAAS,QAAQ,GAAG,qBAAqB,WAAW,KAAK,OAAO,EAAE,KAC3G,mBAAmB,MAC5B,aAAa,OAAO,yBAAyB,OAAO,CAAC,GACrD,OAAO,OAAO,yBAAyB,OAAO,GACvC,OAAO,SAAS,UAAU,QAAQ,KAElC,OAAO,yBAAyB,OAAO,IAAI;AAAA,gBAElD,gBAAAM,mBAAkB,aAAa;AAC7B,sBAAII;AAEJ,sBAAI;AACF,kCAAO,OAAO,yBAAyB,OAAO,GAC9C,MAAM,OAAO,UAAU,oBAAoB,CAAC,cAAc,CAAC,GACpD,MAAM,OAAO,SAAS,UAAU,QAAQ;AAAA,kBACjD,SAAS,OAAO;AACd,2BAAAA,KAAI,OACG,OAAO,SAAS,OAAO,QAAQ,SAASA,EAAC;AAAA,kBAClD;AAAA,gBACF,CAAC;AAAA,gBAAG;AAAA,cAAI;AAAA,YAEZ,OAAO;AAAA,kBAAI,SAAS;AAClB,uBAAO,OAAO,SAAS,OAAO,QAAQ,WAAW,IAAI;AAChD,kBAAI,SAAS;AAClB,uBAAO,MAAM,OAAO,SAAS,eAAe;AAAA;AAAA,UAEhD,SAAS,OAAO;AACd,uBAAI,OACG,OAAO,SAAS,OAAO,QAAQ,SAAS,CAAC;AAAA,UAClD;AAAA,QACF,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,eAAe,OAAO;AAGpB,eAFA,cAAc,KAAK,SAAS,GAExB,KAAK,mBACA,KAAK,WAAW,kBAAkB,KAAK,QAAQ,IAE/C,KAAK,WAAW,WAAW,KAAK;AAAA,MAE3C;AAAA,MAEA,UAAU,MAAM,MAAM;AACpB,YAAI,SAAS;AAEb,eAAOJ,mBAAkB,aAAa;AACpC,iBAAM,SAAS,UAAU,SAAS,sBAChC,MAAM,OAAO,QAGR,IAAI,OAAO,QAAQ,CAAC,SAAS,WAAW;AAC7C,gBAAI,UAAU;AACd,8BAAW,CAAC,KAAK,IAAI,GAAG,OAAO,QAAQ,EAAE,OAAO,IAAI,GAEpD,OAAO,SAAS,OAAO,QAAQ,SAAS,yBAAyB,IAAI,QAAQ,QAAQ,GAErF,MAAM,OAAO,WAAW,eAAe,MAAM,OAAO,YAAY,UAAU,SAAUF,MAAK,SAAS;AAChG,qBAAIA,QAAO,OACF,OAAOA,IAAG,IAGZ,QAAQ,OAAO;AAAA,YACxB,CAAC,GACM,OAAO,WAAW,aAAa,IAAI,EAAE,GAAG,GAAG;AAAA,UACpD,CAAC,EAAE,MAAM,OACH,EAAE,YAAY,2BACZ,SAAS,cACJ,OAAO,QAAQ,QAAQ,IAEvB,OAAO,UAAU,QAAQ,OAAO,oBAAoB,EAAK,CAAC,EAAE,KAAK,MAC/D,OAAO,UAAU,MAAM,IAAI,CACnC,IAEM,EAAE,YAAY,mBAChB,OAAO,UAAU,mBAAmB,CAAC,OAAO,SAAS,OAAO,CAAC,CAAC,EAAE,KAAK,MACnE,OAAO,UAAU,MAAM,IAAI,CACnC,IAEM,OAAO,QAAQ,OAAO,CAAC,CAEjC;AAAA,QACH,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,aAAa,KAAK;AAChB,YAAI,GAAG,KAAK,SAAS;AAGrB,aAFA,UAAU,CAAC,GAEN,IAAI,GAAG,MAAM,IAAI,QAAQ,IAAI,KAAK;AACrC,cAAI,IAAI,CAAC,GACT,QAAQ,KAAK,KAAK,OAAO,EAAE,SAAS,IAAI,EAAE;AAG5C,eAAO;AAAA,MACT;AAAA,MAEA,cAAc,KAAK;AACjB,YAAI,KAAK,GAAG;AACZ,cAAM,CAAC;AAEP,aAAK,KAAK;AACR,cAAI,IAAI,CAAC,GACT,IAAI,KAAK,GAAG,KAAK,OAAO,EAAE,SAAS,IAAI,EAAE;AAG3C,eAAO;AAAA,MACT;AAAA,MAEA,oBAAoB,OAAO;AACzB,YAAI;AACJ,sBAAO,KAAK,cAAc,OAAO,OAAO,CAAC,GAAG,KAAK,cAAc;AAAA,UAC7D,IAAI,KAAK;AAAA,UACT,SAAS,KAAK,SAAS;AAAA,UACvB,cAAc,KAAK;AAAA,UACnB,eAAe,KAAK;AAAA,QACtB,CAAC,CAAC,GACF,KAAK,QAAQ,QAAQ,IAAI,GAAG,KAAK,SAAS,OAAO,GAC1C;AAAA,MACT;AAAA,MAEA,YAAY,GAAG;AACb,eAAO,CAAC,CAAC;AAAA,MACX;AAAA,MAEA,mBAAmBO,UAAS;AAC1B,YAAI,SAAS;AAEb,eAAOL,mBAAkB,aAAa;AACpC,uBAAM,OAAO,UAAU,mBAAmB,OAAO,cAAcK,QAAO,CAAC,GAChEF,QAAO,UAAUE,UAASA,UAAS,OAAO,YAAY;AAAA,QAC/D,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,cAAc;AACZ,eAAO,KAAK,UAAU,WAAW,CAAC,CAAC;AAAA,MACrC;AAAA,MAEA,aAAa;AACX,eAAO,KAAK,UAAU,UAAU,CAAC,CAAC;AAAA,MACpC;AAAA,MAEA,WAAW;AACT,eAAO,KAAK,UAAU,QAAQ,CAAC,CAAC;AAAA,MAClC;AAAA,MAEA,iBAAiB;AACf,YAAI,SAAS;AAEb,eAAOL,mBAAkB,aAAa;AACpC,iBAAO,OAAO,YAAa,MAAM,OAAO,UAAU,eAAe,CAAC,CAAC,CAAE;AAAA,QACvE,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,uBAAuB,MAAM;AAC3B,eAAO,KAAK,UAAU,uBAAuB,CAAC,IAAI,CAAC;AAAA,MACrD;AAAA,MAEA,uBAAuB;AACrB,eAAO,KAAK,UAAU,qBAAqB,CAAC,CAAC;AAAA,MAC/C;AAAA,MAEA,UAAU,QAAQ;AAChB,YAAI,SAAS;AAEb,eAAOA,mBAAkB,aAAa;AACpC,iBAAO,OAAO,YAAa,MAAM,OAAO,UAAU,SAAS,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,CAAE;AAAA,QAC5F,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,aAAa,OAAO,QAAQ,YAAY;AACtC,YAAI,SAAS;AAEb,eAAOA,mBAAkB,aAAa;AACpC,cAAI,WAAW,SAAS,MAEpB,QAAQ,MAAM,OAAO,UAAU,YAAY,OAAO,aAAa,CAAC,OAAO,QAAQ,UAAU,CAAC,CAAC,GAE3F,QAAQN,gBAAe,OAAO,CAAC;AAEnC,2BAAU,MAAM,CAAC,GACjB,OAAO,MAAM,CAAC,GACd,YAAY,MAAM,CAAC,GACZ;AAAA,YACL,SAAS,OAAO,YAAY,OAAO;AAAA,YACnC;AAAA,YACA;AAAA,UACF;AAAA,QACF,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,WAAW,aAAa,QAAQ;AAC9B,YAAI,SAAS;AAEb,eAAOM,mBAAkB,aAAa;AACpC,cAAI,SAAS,GAAG,eAAe,YAAY,YAAY;AAEvD,cAAI;AACF,gBAAI,QAAQ,MAAM,OAAO,UAAU,UAAU,OAAO,aAAa,CAAC,aAAa,MAAM,CAAC,CAAC,GAEnF,QAAQN,gBAAe,OAAO,CAAC;AAEnC,gCAAa,MAAM,CAAC,GACpB,UAAU,MAAM,CAAC,GACjB,WAAW,MAAM,CAAC,GACX;AAAA,cACL,YAAY,OAAO,YAAY,UAAU;AAAA,cACzC,SAAS,OAAO,YAAY,OAAO;AAAA,cACnC;AAAA,YACF;AAAA,UACF,SAAS,OAAO;AAGd,gBAFA,IAAI,OAEA,EAAE,QAAQ,QAAQ,YAAY,MAAM,GAAG;AACzC,kBAAI,mBAAmB,EAAE,QAAQ,MAAM,GAAG,GAEtC,oBAAoBA,gBAAe,kBAAkB,CAAC;AAE1D,iCAAa,kBAAkB,CAAC,GAChC,SAAS,kBAAkB,CAAC,GAC5B,gBAAgB,kBAAkB,CAAC,GAC7B,IAAI,gBAAgB,8CAA8C,MAAM,mDAAmD,aAAa,EAAE;AAAA,YAClJ;AACE,oBAAM;AAAA,UAEV;AAAA,QACF,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,SAAS,OAAO,QAAQ;AACtB,YAAI,SAAS;AAEb,eAAOM,mBAAkB,aAAa;AACpC,cAAI;AACJ,2BAAU,MAAM,OAAO,UAAU,QAAQ,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,GAC9D;AAAA,YACL;AAAA,UACF;AAAA,QACF,CAAC,EAAE;AAAA,MACL;AAAA,IAEF;AACA,IAAAP,QAAO,UAAU;AAAA;AAAA;;;AC/VjB;AAAA,qFAAAa,UAAAC,SAAA;AAAA;AAAA;AAEA,QAAI,iBAAiB;AACrB,sBAAkB;AAClB,aAAS,MAAa;AAAA,MACpB,YAAY,SAAS;AACnB,aAAK,SAAS,SACd,KAAK,QAAQ,CAAC,GACd,KAAK,SAAS,KAAK,OAAO,IAAI,WAAY;AACxC,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AAAA,MAEA,KAAK,IAAI;AACP,YAAI,SAAS;AAIb,YAHA,UAAU,KAAK,MAAM,EAAE,GACvB,OAAO,UAAU,GAEb,WAAW,QAAQ,OAAO,KAAK,OAAO;AACxC,sBAAK,OAAO,OAAO,KACnB,KAAK,OAAO,IAAI,KACT,KAAK,MAAM,EAAE;AACf,YAAI,WAAW;AACpB,sBAAK,OAAO,OAAO,KACZ,OAAO,KAAK,MAAM,EAAE;AAAA,MAE/B;AAAA,MAEA,MAAM,IAAI;AACR,YAAI;AACJ,yBAAU,GACV,KAAK,MAAM,EAAE,IAAI,SACV,KAAK,OAAO,OAAO;AAAA,MAC5B;AAAA,MAEA,OAAO,IAAI;AACT,YAAI;AACJ,yBAAU,KAAK,MAAM,EAAE,GAEnB,WAAW,SACb,KAAK,OAAO,OAAO,KACnB,OAAO,KAAK,MAAM,EAAE,IAGf,WAAW;AAAA,MACpB;AAAA,MAEA,UAAU,IAAI;AACZ,YAAI;AACJ,gBAAQ,MAAM,KAAK,OAAO,KAAK,MAAM,EAAE,CAAC,MAAM,OAAO,MAAM;AAAA,MAC7D;AAAA,MAEA,WAAW,QAAQ;AACjB,YAAI,GAAG,KAAK,KAAK,SAAS;AAE1B,YAAI,UAAU,MAAM;AAGlB,cAFA,MAAM,KAAK,OAAO,QAAQ,MAAM,GAE5B,MAAM;AACR,kBAAM,IAAI,gBAAgB,yBAAyB,KAAK,OAAO,KAAK,IAAI,CAAC,EAAE;AAG7E,gBAAM,KAAK,OACX,UAAU,CAAC;AAEX,eAAK,KAAK;AACR,gBAAI,IAAI,CAAC,GAEL,MAAM,OACR,QAAQ,KAAK,CAAC;AAIlB,iBAAO;AAAA,QACT;AACE,iBAAO,OAAO,KAAK,KAAK,KAAK;AAAA,MAEjC;AAAA,MAEA,eAAe;AACb,eAAO,KAAK,OAAO,OAAO,CAAC,KAAK,GAAG,OACjC,IAAI,KAAK,OAAO,CAAC,CAAC,IAAI,GACf,MACN,CAAC,CAAC;AAAA,MACP;AAAA,IAEF;AACA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACvFjB;AAAA,mFAAAC,UAAAC,SAAA;AAAA;AAAA;AAEA,aAASC,oBAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,KAAK,KAAK;AAAE,UAAI;AAAE,YAAI,OAAO,IAAI,GAAG,EAAE,GAAG,GAAO,QAAQ,KAAK;AAAA,MAAO,SAAS,OAAO;AAAE,eAAO,KAAK;AAAG;AAAA,MAAQ;AAAE,MAAI,KAAK,OAAQ,QAAQ,KAAK,IAAY,QAAQ,QAAQ,KAAK,EAAE,KAAK,OAAO,MAAM;AAAA,IAAK;AAExQ,aAASC,mBAAkB,IAAI;AAAE,aAAO,WAAY;AAAE,YAAI,OAAO,MAAM,OAAO;AAAW,eAAO,IAAI,QAAQ,SAAU,SAAS,QAAQ;AAAE,cAAI,MAAM,GAAG,MAAM,MAAM,IAAI;AAAG,mBAAS,MAAM,OAAO;AAAE,YAAAD,oBAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,QAAQ,KAAK;AAAA,UAAG;AAAE,mBAAS,OAAOE,MAAK;AAAE,YAAAF,oBAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,SAASE,IAAG;AAAA,UAAG;AAAE,gBAAM,MAAS;AAAA,QAAG,CAAC;AAAA,MAAG;AAAA,IAAG;AAEpY,QAAI,QAAQ;AACZ,aAAS;AACT,WAAO,MAAW;AAAA,MAChB,YAAY,MAAMC,UAAS;AACzB,aAAK,WAAW,KAAK,SAAS,KAAK,IAAI,GACvC,KAAK,OAAO,MACZ,KAAK,UAAUA,UACf,KAAK,WAAW,GAChB,KAAK,SAAS,IAAI,OAAO;AAAA,MAC3B;AAAA,MAEA,UAAU;AACR,eAAO,KAAK,OAAO,WAAW;AAAA,MAChC;AAAA,MAEA,YAAY;AACV,YAAI,QAAQ;AAEZ,eAAOF,mBAAkB,aAAa;AACpC,cAAI,MAAM,IAAI,OAAO,QAAQ,SAAS,UAAU;AAEhD,cAAI,MAAM,WAAW,KAAK,MAAM,OAAO,SAAS,GAAG;AACjD,kBAAM;AAEN,gBAAI,qBAAqB,MAAM,OAAO,MAAM;AAE5C,0BAAO,mBAAmB,MAC1B,OAAO,mBAAmB,MAC1B,UAAU,mBAAmB,SAC7B,SAAS,mBAAmB,QAC5B,KAAK,MAAMA,mBAAkB,aAAa;AACxC,kBAAI;AACF,kCAAW,MAAM,KAAK,GAAG,IAAI,GACtB,WAAY;AACjB,yBAAO,QAAQ,QAAQ;AAAA,gBACzB;AAAA,cACF,SAAS,QAAQ;AACf,+BAAQ,QACD,WAAY;AACjB,yBAAO,OAAO,KAAK;AAAA,gBACrB;AAAA,cACF;AAAA,YACF,CAAC,EAAE,GACH,MAAM,YAEN,MAAM,UAAU,GAET,GAAG;AAAA,UACZ;AAAA,QACF,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,SAAS,SAAS,MAAM;AACtB,YAAI,SAAS,QAAQ;AACrB,yBAAU,SAAS,MACnB,UAAU,IAAI,KAAK,QAAQ,SAAU,UAAU,SAAS;AACtD,2BAAU,UACH,SAAS;AAAA,QAClB,CAAC,GAED,KAAK,OAAO,KAAK;AAAA,UACf;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC,GAED,KAAK,UAAU,GAER;AAAA,MACT;AAAA,IAEF;AACA,IAAAF,QAAO,UAAU;AAAA;AAAA;;;AC/EjB;AAAA,wFAAAK,UAAAC,SAAA;AAAA,IAAAA,QAAA,YAAC,SAAU,SAAQ;AAAA;AAAA;;;ACAnB;AAAA,oFAAAC,UAAAC,SAAA;AAAA;AAAA;AAEA,aAASC,gBAAe,KAAK,GAAG;AAAE,aAAOC,iBAAgB,GAAG,KAAKC,uBAAsB,KAAK,CAAC,KAAKC,kBAAiB;AAAA,IAAG;AAEtH,aAASA,oBAAmB;AAAE,YAAM,IAAI,UAAU,sDAAsD;AAAA,IAAG;AAE3G,aAASD,uBAAsB,KAAK,GAAG;AAAE,UAAI,OAAO,CAAC,GAAO,KAAK,IAAU,KAAK,IAAW,KAAK;AAAW,UAAI;AAAE,iBAAS,KAAK,IAAI,OAAO,QAAQ,EAAE,GAAG,IAAI,EAAE,MAAM,KAAK,GAAG,KAAK,GAAG,UAAoB,KAAK,KAAK,GAAG,KAAK,GAAO,OAAK,KAAK,WAAW,KAA3D,KAAK;AAA6B;AAAA,MAAqC,SAASE,MAAK;AAAE,aAAK,IAAM,KAAKA;AAAA,MAAK,UAAE;AAAU,YAAI;AAAE,UAAI,CAAC,MAAM,GAAG,UAAa,QAAM,GAAG,OAAU;AAAA,QAAG,UAAE;AAAU,cAAI,GAAI,OAAM;AAAA,QAAI;AAAA,MAAE;AAAE,aAAO;AAAA,IAAM;AAExZ,aAASH,iBAAgB,KAAK;AAAE,UAAI,MAAM,QAAQ,GAAG,EAAG,QAAO;AAAA,IAAK;AAEpE,aAASI,oBAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,KAAK,KAAK;AAAE,UAAI;AAAE,YAAI,OAAO,IAAI,GAAG,EAAE,GAAG,GAAO,QAAQ,KAAK;AAAA,MAAO,SAAS,OAAO;AAAE,eAAO,KAAK;AAAG;AAAA,MAAQ;AAAE,MAAI,KAAK,OAAQ,QAAQ,KAAK,IAAY,QAAQ,QAAQ,KAAK,EAAE,KAAK,OAAO,MAAM;AAAA,IAAK;AAExQ,aAASC,mBAAkB,IAAI;AAAE,aAAO,WAAY;AAAE,YAAI,OAAO,MAAM,OAAO;AAAW,eAAO,IAAI,QAAQ,SAAU,SAAS,QAAQ;AAAE,cAAI,MAAM,GAAG,MAAM,MAAM,IAAI;AAAG,mBAAS,MAAM,OAAO;AAAE,YAAAD,oBAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,QAAQ,KAAK;AAAA,UAAG;AAAE,mBAAS,OAAOD,MAAK;AAAE,YAAAC,oBAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,SAASD,IAAG;AAAA,UAAG;AAAE,gBAAM,MAAS;AAAA,QAAG,CAAC;AAAA,MAAG;AAAA,IAAG;AAEpY,QAAIG,SAAQ,OAAOC,oBAAmBC,kBAAiBC,UAASC;AAChE,IAAAA,UAAS;AACT,IAAAJ,UAAS;AACT,IAAAE,mBAAkB;AAClB,IAAAD,qBAAoB;AACpB,IAAAE,WAAU;AAEV,YAAQ,WAAY;AAAA,MAClB,MAAME,OAAM;AAAA,QACV,YAAY,iBAAiB,CAAC,GAAG;AAC/B,eAAK,YAAY,KAAK,UAAU,KAAK,IAAI,GACzC,KAAK,iBAAiB,gBACtBD,QAAO,KAAK,KAAK,gBAAgB,KAAK,UAAU,IAAI,GACpD,KAAK,SAAS,IAAIJ,QAAO,IAAI,GAC7B,KAAK,YAAY,CAAC,GAClB,KAAK,aAAa,sBAElB,KAAK,kBAAkB,GAEvB,KAAK,mBAAmB,KAAK,cAAc,MAEvC,KAAK,cAAc,SACjB,KAAK,eAAe,cAAc,UACpC,KAAK,aAAa,IAAIE,iBAAgB,OAAO,OAAO,CAAC,GAAG,KAAK,gBAAgB;AAAA,YAC3E,QAAQ,KAAK;AAAA,UACf,CAAC,CAAC,IACO,KAAK,eAAe,cAAc,cAC3C,KAAK,aAAa,IAAID,mBAAkB,OAAO,OAAO,CAAC,GAAG,KAAK,gBAAgB;AAAA,YAC7E,QAAQ,KAAK;AAAA,UACf,CAAC,CAAC;AAAA,QAGR;AAAA,QAEA,IAAI,MAAM,IAAI;AACZ,cAAI;AACJ,kBAAQ,MAAM,KAAK,UAAU,GAAG,MAAM,OAAO,OAAO,MAAM;AACxD,gBAAIK;AACJ,mBAAAA,WAAU,KAAK,UAAU,GAAG,IAAI,IAAI,KAAK,WAAW,OAAO,OAAO,KAAK,gBAAgB;AAAA,cACrF,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG;AAAA,cACrB,SAAS,KAAK;AAAA,cACd,YAAY,KAAK;AAAA,YACnB,CAAC,CAAC,GACF,KAAK,OAAO,QAAQ,WAAWA,UAAS,GAAG,GACpCA;AAAA,UACT,GAAG;AAAA,QACL;AAAA,QAEA,UAAU,MAAM,IAAI;AAClB,cAAI,QAAQ;AAEZ,iBAAOP,mBAAkB,aAAa;AACpC,gBAAI,SAAS;AACb,8BAAW,MAAM,UAAU,GAAG,GAE1B,MAAM,eACR,UAAU,MAAM,MAAM,WAAW,eAAe,CAAC,OAAO,GAAGI,SAAQ,QAAQ,GAAG,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,IAG/F,YAAY,SACd,OAAO,MAAM,UAAU,GAAG,GAC1B,MAAM,SAAS,WAAW,IAGrB,YAAY,QAAQ,UAAU;AAAA,UACvC,CAAC,EAAE;AAAA,QACL;AAAA,QAEA,WAAW;AACT,cAAI,GAAG,KAAK,SAAS;AACrB,gBAAM,KAAK,WACX,UAAU,CAAC;AAEX,eAAK,KAAK;AACR,gBAAI,IAAI,CAAC,GACT,QAAQ,KAAK;AAAA,cACX,KAAK;AAAA,cACL,SAAS;AAAA,YACX,CAAC;AAGH,iBAAO;AAAA,QACT;AAAA,QAEA,OAAO;AACL,iBAAO,OAAO,KAAK,KAAK,SAAS;AAAA,QACnC;AAAA,QAEA,cAAc;AACZ,cAAI,SAAS;AAEb,iBAAOJ,mBAAkB,aAAa;AACpC,gBAAI,QAAQ,KAAK,OAAO,GAAG,GAAG,MAAM,KAAK,MAAM;AAE/C,gBAAI,OAAO,cAAc;AACvB,qBAAO,OAAO,QAAQ,QAAQ,OAAO,KAAK,CAAC;AAQ7C,iBALA,OAAO,CAAC,GACR,SAAS,MACT,QAAQ,KAAK,OAAO,EAAE,IAAI,QAC1B,MAAM,GAEC,WAAW,KAAG;AACnB,kBAAI,OAAO,MAAM,OAAO,WAAW,eAAe,CAAC,QAAQ,UAA0B,GAAG,SAAS,KAAK,OAAO,EAAE,eAAe,SAAS,GAAK,CAAC,GAEzI,QAAQN,gBAAe,MAAM,CAAC;AAMlC,mBAJA,OAAO,MAAM,CAAC,GACd,QAAQ,MAAM,CAAC,GACf,SAAS,CAAC,CAAC,MAEN,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK;AACvC,oBAAI,MAAM,CAAC,GACX,KAAK,KAAK,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC;AAAA,YAElC;AAEA,mBAAO;AAAA,UACT,CAAC,EAAE;AAAA,QACL;AAAA,QAEA,oBAAoB;AAClB,cAAI,SAAS,MAET;AACJ,+BAAc,KAAK,QAAQ,GACpB,QAAQ,OAAO,KAAK,WAAW;AAAA,YAEtC,gBAAAM,mBAAkB,aAAa;AAC7B,kBAAI,GAAG,GAAG,KAAK,SAAS,MAAM;AAC9B,qBAAO,KAAK,IAAI,GAChB,MAAM,OAAO,WACb,UAAU,CAAC;AAEX,mBAAK,KAAK,KAAK;AACb,oBAAI,IAAI,CAAC;AAET,oBAAI;AACF,mBAAI,MAAM,EAAE,OAAO,eAAe,IAAI,KACpC,QAAQ,KAAK,OAAO,UAAU,CAAC,CAAC,IAEhC,QAAQ,KAAK,MAAM;AAAA,gBAEvB,SAAS,OAAO;AACd,sBAAI,OACJ,QAAQ,KAAK,EAAE,OAAO,QAAQ,SAAS,CAAC,CAAC;AAAA,gBAC3C;AAAA,cACF;AAEA,qBAAO;AAAA,YACT,CAAC;AAAA,YAAG,KAAK,UAAU;AAAA,UAAC,GAAG,SAAU,aAAa,KAAK,MAAM,IAAI;AAAA,QAC/D;AAAA,QAEA,eAAeQ,WAAU,CAAC,GAAG;AAI3B,cAHAH,QAAO,UAAUG,UAAS,KAAK,UAAU,IAAI,GAC7CH,QAAO,UAAUG,UAASA,UAAS,KAAK,cAAc,GAElDA,SAAQ,WAAW;AACrB,mBAAO,KAAK,kBAAkB;AAAA,QAElC;AAAA,QAEA,WAAW,QAAQ,IAAM;AACvB,cAAI;AAEJ,cAAI,CAAC,KAAK;AACR,oBAAQ,MAAM,KAAK,eAAe,OAAO,IAAI,WAAW,KAAK,IAAI;AAAA,QAErE;AAAA,MAEF;AAGA,aAAAF,OAAM,UAAU,WAAW;AAAA,QACzB,SAAS,MAAO,KAAK;AAAA,QACrB,YAAY;AAAA,QACZ;AAAA,QACA,IAAI;AAAA,MACN,GACOA;AAAA,IACT,EAAE,KAAK,MAAM;AAEb,IAAAb,QAAO,UAAU;AAAA;AAAA;;;ACrMjB;AAAA,sFAAAgB,UAAAC,SAAA;AAAA;AAAA;AAEA,QAAI,SAASC,SAAQC;AACrB,IAAAA,UAAS;AACT,IAAAD,UAAS;AAET,cAAU,WAAY;AAAA,MACpB,MAAME,SAAQ;AAAA,QACZ,YAAYC,WAAU,CAAC,GAAG;AACxB,eAAK,UAAUA,UACfF,QAAO,KAAK,KAAK,SAAS,KAAK,UAAU,IAAI,GAC7C,KAAK,SAAS,IAAID,QAAO,IAAI,GAC7B,KAAK,OAAO,CAAC,GAEb,KAAK,cAAc,GAEnB,KAAK,aAAa,KAAK,IAAI;AAAA,QAC7B;AAAA,QAEA,gBAAgB;AACd,iBAAO,KAAK,WAAW,IAAI,KAAK,QAAQ,CAAC,KAAK,QACrC,KAAK,WAAW,GACxB;AAAA,QACH;AAAA,QAEA,SAAS;AACP,8BAAa,KAAK,QAAQ,GAC1B,KAAK,aAAa,KAAK,IAAI,GAE3B,KAAK,SAAS,GAEd,KAAK,OAAO,QAAQ,SAAS,KAAK,IAAI,GACtC,KAAK,OAAO,CAAC,GACN,KAAK,cAAc;AAAA,QAC5B;AAAA,QAEA,IAAI,MAAM;AACR,cAAI;AAEJ,sBAAK,KAAK,KAAK,IAAI,GAEnB,MAAM,KAAK,UAEP,KAAK,KAAK,WAAW,KAAK,UAC5B,KAAK,OAAO,IACH,KAAK,WAAW,QAAQ,KAAK,KAAK,WAAW,MACtD,KAAK,WAAW,WAAW,MAClB,KAAK,OAAO,GAClB,KAAK,OAAO,IAGV;AAAA,QACT;AAAA,MAEF;AAGA,aAAAE,SAAQ,UAAU,WAAW;AAAA,QAC3B,SAAS;AAAA,QACT,SAAS;AAAA,QACT;AAAA,MACF,GACOA;AAAA,IACT,EAAE,KAAK,MAAM;AAEb,IAAAH,QAAO,UAAU;AAAA;AAAA;;;ACjEjB;AAAA,yFAAAK,UAAAC,SAAA;AAAA;AAAA;AAEA,aAASC,gBAAe,KAAK,GAAG;AAAE,aAAOC,iBAAgB,GAAG,KAAKC,uBAAsB,KAAK,CAAC,KAAKC,kBAAiB;AAAA,IAAG;AAEtH,aAASD,uBAAsB,KAAK,GAAG;AAAE,UAAI,OAAO,CAAC,GAAO,KAAK,IAAU,KAAK,IAAW,KAAK;AAAW,UAAI;AAAE,iBAAS,KAAK,IAAI,OAAO,QAAQ,EAAE,GAAG,IAAI,EAAE,MAAM,KAAK,GAAG,KAAK,GAAG,UAAoB,KAAK,KAAK,GAAG,KAAK,GAAO,OAAK,KAAK,WAAW,KAA3D,KAAK;AAA6B;AAAA,MAAqC,SAASE,MAAK;AAAE,aAAK,IAAM,KAAKA;AAAA,MAAK,UAAE;AAAU,YAAI;AAAE,UAAI,CAAC,MAAM,GAAG,UAAa,QAAM,GAAG,OAAU;AAAA,QAAG,UAAE;AAAU,cAAI,GAAI,OAAM;AAAA,QAAI;AAAA,MAAE;AAAE,aAAO;AAAA,IAAM;AAExZ,aAAS,SAAS,KAAK;AAAE,aAAOH,iBAAgB,GAAG,KAAK,iBAAiB,GAAG,KAAKE,kBAAiB;AAAA,IAAG;AAErG,aAASA,oBAAmB;AAAE,YAAM,IAAI,UAAU,sDAAsD;AAAA,IAAG;AAE3G,aAAS,iBAAiB,MAAM;AAAE,UAAI,OAAO,YAAY,OAAO,IAAI,KAAK,OAAO,UAAU,SAAS,KAAK,IAAI,MAAM,qBAAsB,QAAO,MAAM,KAAK,IAAI;AAAA,IAAG;AAEjK,aAASF,iBAAgB,KAAK;AAAE,UAAI,MAAM,QAAQ,GAAG,EAAG,QAAO;AAAA,IAAK;AAEpE,aAASI,oBAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,KAAK,KAAK;AAAE,UAAI;AAAE,YAAI,OAAO,IAAI,GAAG,EAAE,GAAG,GAAO,QAAQ,KAAK;AAAA,MAAO,SAAS,OAAO;AAAE,eAAO,KAAK;AAAG;AAAA,MAAQ;AAAE,MAAI,KAAK,OAAQ,QAAQ,KAAK,IAAY,QAAQ,QAAQ,KAAK,EAAE,KAAK,OAAO,MAAM;AAAA,IAAK;AAExQ,aAASC,mBAAkB,IAAI;AAAE,aAAO,WAAY;AAAE,YAAI,OAAO,MAAM,OAAO;AAAW,eAAO,IAAI,QAAQ,SAAU,SAAS,QAAQ;AAAE,cAAI,MAAM,GAAG,MAAM,MAAM,IAAI;AAAG,mBAAS,MAAM,OAAO;AAAE,YAAAD,oBAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,QAAQ,KAAK;AAAA,UAAG;AAAE,mBAAS,OAAOD,MAAK;AAAE,YAAAC,oBAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,SAASD,IAAG;AAAA,UAAG;AAAE,gBAAM,MAAS;AAAA,QAAG,CAAC;AAAA,MAAG;AAAA,IAAG;AAEpY,QAAIG,aACA,kBACAC,SACA,KACA,gBACA,gBACA,QACA,gBACA,QACA,MACAC,SACA,SAAS,CAAC,EAAE;AAChB,qBAAiB;AACjB,uBAAmB;AACnB,IAAAA,UAAS;AACT,aAAS;AACT,UAAM;AACN,qBAAiB;AACjB,qBAAiB;AACjB,IAAAD,UAAS;AACT,aAAS;AACT,WAAO;AAEP,IAAAD,cAAa,WAAY;AAAA,MACvB,MAAMA,YAAW;AAAA,QACf,YAAYG,WAAU,CAAC,MAAM,SAAS;AACpC,cAAI,sBAAsB;AAC1B,eAAK,cAAc,KAAK,YAAY,KAAK,IAAI,GAE7C,KAAK,iBAAiBA,UAAS,OAAO,GAEtCD,QAAO,KAAKC,UAAS,KAAK,kBAAkB,IAAI,GAChD,KAAK,UAAU,IAAI,OAAO,cAAc,GACxC,KAAK,aAAa,CAAC,GACnB,KAAK,UAAU,IAAI,OAAO,CAAC,YAAY,UAAU,WAAW,WAAW,EAAE,OAAO,KAAK,kBAAkB,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,GACrH,KAAK,WAAW,MAChB,KAAK,SAAS,IAAIF,QAAO,IAAI,GAC7B,KAAK,cAAc,IAAI,KAAK,UAAU,KAAK,OAAO,GAClD,KAAK,gBAAgB,IAAI,KAAK,YAAY,KAAK,OAAO,GACtD,eAAeC,QAAO,KAAKC,UAAS,KAAK,eAAe,CAAC,CAAC,GAE1D,KAAK,SAAS,WAAY;AACxB,gBAAI,KAAK,cAAc,WAAW,KAAK,cAAc,aAAa,KAAK,cAAc;AACnF,4CAAuBD,QAAO,KAAKC,UAAS,KAAK,oBAAoB,CAAC,CAAC,GAChE,IAAI,eAAe,MAAM,cAAc,oBAAoB;AAC7D,gBAAI,KAAK,cAAc;AAC5B,4CAAuBD,QAAO,KAAKC,UAAS,KAAK,oBAAoB,CAAC,CAAC,GAChE,IAAI,eAAe,MAAM,cAAc,oBAAoB;AAElE,kBAAM,IAAIH,YAAW,UAAU,gBAAgB,2BAA2B,KAAK,SAAS,EAAE;AAAA,UAE9F,EAAE,KAAK,IAAI,GAEX,KAAK,QAAQ,GAAG,YAAY,MAAM;AAChC,gBAAI;AACJ,oBAAQ,MAAM,KAAK,OAAO,cAAc,QAAO,OAAO,IAAI,OAAQ,aAAa,IAAI,IAAI,IAAa;AAAA,UACtG,CAAC,GAED,KAAK,QAAQ,GAAG,QAAQ,MAAM;AAC5B,gBAAI;AACJ,oBAAQ,MAAM,KAAK,OAAO,cAAc,QAAO,OAAO,IAAI,SAAU,aAAa,IAAI,MAAM,IAAa;AAAA,UAC1G,CAAC;AAAA,QACH;AAAA,QAEA,iBAAiBG,UAAS,SAAS;AACjC,cAAI,EAAEA,YAAW,QAAQ,OAAOA,YAAY,YAAY,QAAQ,WAAW;AACzE,kBAAM,IAAIH,YAAW,UAAU,gBAAgB,uJAAuJ;AAAA,QAE1M;AAAA,QAEA,QAAQ;AACN,iBAAO,KAAK,OAAO;AAAA,QACrB;AAAA,QAEA,UAAU;AACR,iBAAO,KAAK,OAAO;AAAA,QACrB;AAAA,QAEA,UAAU;AACR,iBAAO,KAAK,KAAK,EAAE;AAAA,QACrB;AAAA,QAEA,iBAAiB;AACf,iBAAO,KAAK,KAAK,EAAE,IAAI,KAAK,OAAO,QAAQ;AAAA,QAC7C;AAAA,QAEA,QAAQ,SAAS;AACf,iBAAO,KAAK,OAAO,YAAY,OAAO;AAAA,QACxC;AAAA,QAEA,WAAW,QAAQ,IAAM;AACvB,iBAAO,KAAK,OAAO,eAAe,KAAK;AAAA,QACzC;AAAA,QAEA,MAAM,UAAU;AACd,sBAAK,WAAW,UACT;AAAA,QACT;AAAA,QAEA,OAAO,UAAU;AACf,iBAAO,KAAK,QAAQ,OAAO,QAAQ;AAAA,QACrC;AAAA,QAEA,gBAAgB;AACd,iBAAO,KAAK,OAAO,WAAW;AAAA,QAChC;AAAA,QAEA,QAAQ;AACN,iBAAO,KAAK,OAAO,MAAM,KAAK,KAAK,YAAY,QAAQ;AAAA,QACzD;AAAA,QAEA,UAAU;AACR,iBAAO,KAAK,OAAO,YAAY;AAAA,QACjC;AAAA,QAEA,OAAO;AACL,iBAAO,KAAK,OAAO,SAAS;AAAA,QAC9B;AAAA,QAEA,UAAU,IAAI;AACZ,iBAAO,KAAK,QAAQ,UAAU,EAAE;AAAA,QAClC;AAAA,QAEA,KAAK,QAAQ;AACX,iBAAO,KAAK,QAAQ,WAAW,MAAM;AAAA,QACvC;AAAA,QAEA,SAAS;AACP,iBAAO,KAAK,QAAQ,aAAa;AAAA,QACnC;AAAA,QAEA,eAAe;AACb,iBAAO,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC;AAAA,QAC3C;AAAA,QAEA,MAAM,SAAS,GAAG;AAChB,iBAAO,KAAK,OAAO,UAAU,MAAM;AAAA,QACrC;AAAA,QAEA,kBAAkB,OAAO;AACvB,iBAAI,KAAK,WAAW,KAAK,KAAK,QAC5B,aAAa,KAAK,WAAW,KAAK,EAAE,UAAU,GAC9C,OAAO,KAAK,WAAW,KAAK,GACrB,MAEA;AAAA,QAEX;AAAA,QAEA,MAAM,OAAO,KAAKG,UAAS,WAAW;AACpC,cAAI,QAAQ;AAEZ,iBAAOJ,mBAAkB,aAAa;AACpC,gBAAI,GAAG;AAEP,gBAAI;AACF,kBAAI,OAAO,MAAM,MAAM,OAAO,SAAS,OAAOI,SAAQ,MAAM;AAM5D,kBAJA,UAAU,KAAK,SAEf,MAAM,OAAO,QAAQ,SAAS,SAASA,SAAQ,EAAE,IAAI,SAAS,GAE1D,YAAY,KAAK,MAAM,MAAM;AAC/B,uBAAO,MAAM,OAAO,QAAQ,MAAM;AAAA,YAEtC,SAAS,QAAQ;AACf,yBAAI,QACG,MAAM,OAAO,QAAQ,SAAS,CAAC;AAAA,YACxC;AAAA,UACF,CAAC,EAAE;AAAA,QACL;AAAA,QAEA,KAAK,OAAO,KAAK,MAAM;AACrB,cAAI,kBAAkB,MAAM;AAC5B,qBAAI,MAAM,GACV,mBAAmB,KAAK,kBAAkB,KAAK,MAAM,KAAK,GAC1D,MAAM,KAAK,KAAK,KAAK,MAAM,OAAO,GAAG,GACrC,OAAO,KAAK,MAAM,KAAK,MAAM,OAAO,GAAG,GAChC,KAAK,WAAW,KAAK,IAAI;AAAA,YAC9B,SAAS,WAAW,MACX,IAAI,UAAU,KAAK,UAAU,kBAAkB,KAAK,IAAI,GAC9D,IAAI;AAAA,YACP,YAAY,IAAI,QAAQ,cAAc,OAAO,WAAW,WAAY;AAClE,qBAAO,IAAI,SAAS,kBAAkB,KAAK,IAAI;AAAA,YACjD,GAAG,OAAO,IAAI,QAAQ,UAAU,IAAI;AAAA,YACpC;AAAA,UACF;AAAA,QACF;AAAA,QAEA,UAAU,UAAU;AAClB,iBAAO,KAAK,cAAc,SAAS,MAAM;AACvC,gBAAI,MAAM,OAAO,MAAMA,UAAS;AAEhC,gBAAI,KAAK,OAAO,MAAM;AACpB,qBAAO,KAAK,QAAQ,QAAQ,IAAI;AAGlC,oBAAQ,KAAK,QAAQ,SAAS;AAE9B,gBAAI,SAAS,OAAO,MAAM,MAAM;AAKhC,mBAHAA,WAAU,OAAO,SACjB,OAAO,OAAO,MAEV,YAAY,QAAQA,SAAQ,SAAS,WAChC,KAAK,QAAQ,QAAQ,IAAI,KAGlC,KAAK,OAAO,QAAQ,SAAS,YAAYA,SAAQ,EAAE,IAAI;AAAA,cACrD;AAAA,cACA,SAAAA;AAAA,YACF,CAAC,GACD,QAAQ,KAAK,aAAa,GACnB,KAAK,OAAO,aAAa,OAAOA,SAAQ,QAAQA,SAAQ,UAAU,EAAE,KAAK,CAAC;AAAA,cAC/E;AAAA,cACA;AAAA,cACA;AAAA,YACF,MAAM;AACJ,kBAAI;AAOJ,qBANA,KAAK,OAAO,QAAQ,SAAS,WAAWA,SAAQ,EAAE,IAAI;AAAA,gBACpD;AAAA,gBACA;AAAA,gBACA,SAAAA;AAAA,cACF,CAAC,GAEG,WACF,MAAM,MAAM,GACZ,QAAQ,KAAK,MAAM,GAEf,SACF,KAAK,OAAO,QAAQ,OAAO,GAGzB,cAAc,KAChB,KAAK,OAAO,QAAQ,YAAY,KAAK,GAGvC,KAAK,KAAK,OAAO,MAAM,IAAI,GAEpB,KAAK,QAAQ,QAAQA,SAAQ,MAAM,KAEnC,KAAK,QAAQ,QAAQ,IAAI;AAAA,YAEpC,CAAC;AAAA,UACH,CAAC;AAAA,QACH;AAAA,QAEA,UAAU,UAAU,QAAQ,GAAG;AAC7B,iBAAO,KAAK,UAAU,QAAQ,EAAE,KAAK,aAAW;AAC9C,gBAAI;AAEJ,mBAAI,WAAW,QACb,cAAc,YAAY,OAAO,WAAW,UAAU,UAC/C,KAAK,UAAU,aAAa,QAAQ,OAAO,KAE3C,KAAK,QAAQ,QAAQ,KAAK;AAAA,UAErC,CAAC,EAAE,MAAM,OACA,KAAK,OAAO,QAAQ,SAAS,CAAC,CACtC;AAAA,QACH;AAAA,QAEA,eAAe,SAAS;AACtB,iBAAO,KAAK,QAAQ,SAAS,SAAU,KAAK;AAC1C,mBAAO,IAAI,OAAO;AAAA,cAChB;AAAA,YACF,CAAC;AAAA,UACH,CAAC;AAAA,QACH;AAAA,QAEA,KAAKA,WAAU,CAAC,GAAG;AACjB,cAAI,MAAM;AACV,iBAAAA,WAAUD,QAAO,KAAKC,UAAS,KAAK,YAAY,GAEhD,mBAAmB,QAAM;AACvB,gBAAI;AAEJ,8BAAW,MAAM;AACf,kBAAI;AACJ,8BAAS,KAAK,QAAQ,QACf,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM;AAAA,YAC3D,GAEO,IAAI,KAAK,QAAQ,CAAC,SAAS,WAC5B,SAAS,IACJ,QAAQ,IAER,KAAK,GAAG,QAAQ,MAAM;AAC3B,kBAAI,SAAS;AACX,4BAAK,mBAAmB,MAAM,GACvB,QAAQ;AAAA,YAEnB,CAAC,CAEJ;AAAA,UACH,GAEA,OAAOA,SAAQ,mBAAmB,KAAK,OAAO,SAAU,OAAO,MAAM;AACnE,mBAAO,KAAK,OAAO;AAAA,cACjB,SAASA,SAAQ;AAAA,YACnB,CAAC;AAAA,UACH,GAAG,KAAK,YAAY,MACX,KAAK,QAAQ,QAAQ,IAAI,GAC/B,KAAK,cAAc,SAAS,MACtB,KAAK,YAAY,SAAS,MAAM;AACrC,gBAAI,GAAG,KAAK;AACZ,kBAAM,KAAK;AAEX,iBAAK,KAAK;AACR,kBAAI,IAAI,CAAC,GAEL,KAAK,UAAU,EAAE,IAAI,QAAQ,EAAE,MAAM,cACvC,aAAa,EAAE,OAAO,GACtB,aAAa,EAAE,UAAU,GACzB,EAAE,IAAI,OAAO;AAAA,gBACX,SAASA,SAAQ;AAAA,cACnB,CAAC;AAIL,wBAAK,eAAeA,SAAQ,gBAAgB,GAErC,iBAAiB,CAAC;AAAA,UAC3B,CAAC,CACF,KAAK,KAAK,SAAS;AAAA,YAClB,UAAU,iBAAiB;AAAA,YAC3B,QAAQ;AAAA,UACV,GAAG,MACM,iBAAiB,CAAC,CAC1B,GAED,KAAK,WAAW,SAAU,KAAK;AAC7B,mBAAO,IAAI,QAAQ,IAAIH,YAAW,UAAU,gBAAgBG,SAAQ,mBAAmB,CAAC;AAAA,UAC1F,GAEA,KAAK,OAAO,MACH,KAAK,QAAQ,OAAO,IAAIH,YAAW,UAAU,gBAAgB,gCAAgC,CAAC,GAGhG;AAAA,QACT;AAAA,QAEA,YAAY,KAAK;AACf,cAAI,SAAS;AAEb,iBAAOD,mBAAkB,aAAa;AACpC,gBAAI,MAAM,SAAS,OAAOI,UAAS,YAAY,SAAS;AACxD,mBAAO,IAAI,MACXA,WAAU,IAAI;AAEd,gBAAI;AACF,kBAAI,QAAQ,MAAM,OAAO,OAAO,WAAW,OAAO,OAAO,GAAGA,SAAQ,MAAM;AAE1E,2BAAa,MAAM,YACnB,UAAU,MAAM,SAChB,WAAW,MAAM;AAAA,YACnB,SAAS,QAAQ;AACf,6BAAQ,QAER,OAAO,OAAO,QAAQ,SAAS,mBAAmBA,SAAQ,EAAE,IAAI;AAAA,gBAC9D;AAAA,gBACA,SAAAA;AAAA,gBACA;AAAA,cACF,CAAC,GAED,IAAI,OAAO;AAAA,gBACT;AAAA,cACF,CAAC,GACM;AAAA,YACT;AAEA,mBAAI,WACF,IAAI,OAAO,GACJ,MACE,eACT,UAAU,aAAaH,YAAW,UAAU,SAAS,OAAO,OAAO,QAAQ,cAAcG,SAAQ,QAAQ,IAAI,aAAaH,YAAW,UAAU,SAAS,oBAAoB,OAAO,QAAQ,cAAcG,SAAQ,WAAW,CAAC,IAAI,aAAaH,YAAW,UAAU,SAAS,WAAW,MAAM,QAG3R,SAAQ,OAAO,GAGb,WAAW,QAAQ,aAAaA,YAAW,UAAU,SAAS,aAC5D,WAAW,QACb,IAAI,OAAO,GAGN,eAIX,IAAI,QAAQ,YAAY,OAAO,GAE/B,OAAO,QAAQ,KAAK,GAAG,GAEvB,MAAM,OAAO,UAAU,GAChB;AAAA,UACT,CAAC,EAAE;AAAA,QACL;AAAA,QAEA,SAAS,KAAK;AACZ,iBAAI,KAAK,QAAQ,UAAU,IAAI,QAAQ,EAAE,KAAK,QAC5C,IAAI,QAAQ,IAAIA,YAAW,UAAU,gBAAgB,6CAA6C,IAAI,QAAQ,EAAE,GAAG,CAAC,GAE7G,OAEP,IAAI,UAAU,GACP,KAAK,YAAY,SAAS,KAAK,aAAa,GAAG;AAAA,QAE1D;AAAA,QAEA,UAAU,MAAM;AACd,cAAI,IAAI,IAAI,KAAKG,UAAS,KAAK,MAAM;AAErC,cAAI,OAAO,KAAK,CAAC,KAAM,YAAY;AACjC,gBAAI,OAAO,OAAO,cAAc;AAEhC,kBAAM,MAAO,QAAQ,KAAK,QAAQ,SAAS,KAAK,GAAG,KAAK,MAAM,CAAC,GAAG,OAAO,MAAM,MAAM,CAAC,GAAY,eAAe,OAAO,KAAK,MAAM,EAAE,GAAG,gBAAgBV,gBAAe,cAAc,CAAC,GAAG,KAAK,cAAc,CAAC,GAC7MU,WAAUD,QAAO,KAAK,CAAC,GAAG,KAAK,WAAW;AAAA,UAC5C,OAAO;AACL,gBAAI,OAAO,OAAO,eAAe;AAEjC,mBAAO,MAAO,QAAQ,MAAM,QAAQ,SAAS,KAAK,GAAGC,WAAU,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,OAAO,MAAM,MAAM,CAAC,GAAY,gBAAgB,OAAO,KAAK,MAAM,EAAE,GAAG,gBAAgBV,gBAAe,eAAe,CAAC,GAAG,KAAK,cAAc,CAAC,GACrOU,WAAUD,QAAO,KAAKC,UAAS,KAAK,WAAW;AAAA,UACjD;AAEA,wBAAO,IAAIC,UACF,IAAI,KAAK,QAAQ,SAAU,SAAS,QAAQ;AACjD,mBAAO,GAAG,GAAGA,OAAM,YAAaA,OAAM;AACpC,sBAAQA,MAAK,CAAC,KAAK,OAAO,SAAS,SAASA,KAAI;AAAA,YAClD,CAAC;AAAA,UACH,CAAC,GAGH,MAAM,IAAI,IAAI,MAAM,MAAMD,UAAS,KAAK,aAAa,KAAK,cAAc,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,GAC/G,IAAI,QAAQ,KAAK,SAAUC,OAAM;AAC/B,mBAAO,OAAO,MAAO,aAAa,GAAG,GAAGA,KAAI,IAAI;AAAA,UAClD,CAAC,EAAE,MAAM,SAAUA,OAAM;AACvB,mBAAI,MAAM,QAAQA,KAAI,IACb,OAAO,MAAO,aAAa,GAAG,GAAGA,KAAI,IAAI,SAEzC,OAAO,MAAO,aAAa,GAAGA,KAAI,IAAI;AAAA,UAEjD,CAAC,GACM,KAAK,SAAS,GAAG;AAAA,QAC1B;AAAA,QAEA,YAAY,MAAM;AAChB,cAAI,KAAKD,UAAS;AAElB,cAAI,OAAO,KAAK,CAAC,KAAM,YAAY;AACjC,gBAAI,QAAQ,MAER,SAAS,SAAS,KAAK;AAE3B,mBAAO,OAAO,CAAC,GACf,OAAO,OAAO,MAAM,CAAC,GACrBA,WAAU,CAAC;AAAA,UACb,OAAO;AACL,gBAAI,SAAS,MAET,SAAS,SAAS,MAAM;AAE5B,YAAAA,WAAU,OAAO,CAAC,GAClB,OAAO,OAAO,CAAC,GACf,OAAO,OAAO,MAAM,CAAC;AAAA,UACvB;AAEA,uBAAM,IAAI,IAAI,MAAM,MAAMA,UAAS,KAAK,aAAa,KAAK,cAAc,KAAK,QAAQ,KAAK,SAAS,KAAK,OAAO,GAE/G,KAAK,SAAS,GAAG,GAEV,IAAI;AAAA,QACb;AAAA,QAEA,KAAK,IAAI;AACP,cAAI,UAAU;AACd,4BAAW,KAAK,SAAS,KAAK,IAAI,GAElC,UAAU,YAAoB,MAAM;AAClC,mBAAO,SAAS,GAAG,KAAK,IAAI,GAAG,GAAG,IAAI;AAAA,UACxC,GAEA,QAAQ,cAAc,SAAUA,aAAY,MAAM;AAChD,mBAAO,SAASA,UAAS,IAAI,GAAG,IAAI;AAAA,UACtC,GAEO;AAAA,QACT;AAAA,QAEA,eAAeA,WAAU,CAAC,GAAG;AAC3B,cAAI,SAAS;AAEb,iBAAOJ,mBAAkB,aAAa;AACpC,yBAAM,OAAO,OAAO,mBAAmBG,QAAO,UAAUC,UAAS,OAAO,aAAa,CAAC,GACtFD,QAAO,UAAUC,UAAS,OAAO,kBAAkB,MAAM,GAClD;AAAA,UACT,CAAC,EAAE;AAAA,QACL;AAAA,QAEA,mBAAmB;AACjB,iBAAO,KAAK,OAAO,qBAAqB;AAAA,QAC1C;AAAA,QAEA,mBAAmB,OAAO,GAAG;AAC3B,iBAAO,KAAK,OAAO,uBAAuB,IAAI;AAAA,QAChD;AAAA,MAEF;AAGA,aAAAH,YAAW,UAAUA,aACrBA,YAAW,SAASC,SACpBD,YAAW,UAAUA,YAAW,UAAU,UAAU,kBAA0B,SAC9EA,YAAW,WAAWA,YAAW,UAAU,WAAW;AAAA,QACpD,MAAM;AAAA,QACN,UAAU;AAAA,QACV,mBAAmB;AAAA,QACnB,OAAO;AAAA,MACT,GACAA,YAAW,kBAAkBA,YAAW,UAAU,kBAAkB,2BACpEA,YAAW,QAAQA,YAAW,UAAU,QAAQ,iBAChDA,YAAW,kBAAkBA,YAAW,UAAU,kBAAkB,2BACpEA,YAAW,oBAAoBA,YAAW,UAAU,oBAAoB,6BACxEA,YAAW,UAAUA,YAAW,UAAU,UAAU,mBACpDA,YAAW,UAAU,cAAc;AAAA,QACjC,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,IAAI;AAAA,MACN,GACAA,YAAW,UAAU,gBAAgB;AAAA,QACnC,eAAe;AAAA,QACf,SAAS;AAAA,QACT,WAAW;AAAA,QACX,UAAUA,YAAW,UAAU,SAAS;AAAA,QACxC,SAAS;AAAA,QACT,WAAW;AAAA,QACX,0BAA0B;AAAA,QAC1B,wBAAwB;AAAA,QACxB,2BAA2B;AAAA,QAC3B,yBAAyB;AAAA,QACzB,0BAA0B;AAAA,MAC5B,GACAA,YAAW,UAAU,qBAAqB;AAAA,QACxC;AAAA,QACA,SAAS;AAAA,QACT,mBAAmB;AAAA,MACrB,GACAA,YAAW,UAAU,qBAAqB;AAAA,QACxC;AAAA,QACA,SAAS;AAAA,QACT,mBAAmB;AAAA,QACnB,eAAe;AAAA,QACf,OAAO;AAAA,QACP,eAAe,CAAC;AAAA,QAChB,cAAc;AAAA,QACd,gBAAgB;AAAA,QAChB,YAAY;AAAA,MACd,GACAA,YAAW,UAAU,mBAAmB;AAAA,QACtC,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,IAAI;AAAA,QACJ,cAAc;AAAA,QACd,iBAAiB;AAAA,QACjB;AAAA,MACF,GACAA,YAAW,UAAU,eAAe;AAAA,QAClC,qBAAqB;AAAA,QACrB,iBAAiB;AAAA,QACjB,kBAAkB;AAAA,MACpB,GACOA;AAAA,IACT,EAAE,KAAK,MAAM;AAEb,IAAAR,QAAO,UAAUQ;AAAA;AAAA;;;ACjlBjB;AAAA,oFAAAK,UAAAC,SAAA;AAAA;AAAA;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACFjB;AAOA,IAAY;CAAZ,SAAYC,cAAW;AACrB,EAAAA,aAAA,QAAA,SACAA,aAAA,aAAA;AACF,GAHY,gBAAA,cAAW,CAAA,EAAA;AAWjB,SAAU,mBAAmB,MAAM,QAAQ,KAAG;AAElD,SADc,IAAI,qBAAqB,UAAU,MACnC,UACL,YAAY,QAEZ,YAAY;AAEvB;AAQM,SAAU,mBAAmB,MAAM,QAAQ,KAAG;AAClD,SAAO,mBAAmB,GAAG,MAAM,YAAY;AACjD;;;ACnCA;;;ACAA;;;ACAA;AAEA,IAAM,aAAa,EAAI,WAAW,CAAC,QAC7B,OAAO,OAAQ,YAAY,eAAe,OAAa,IAAI,KAAK,GAAG,IAChE,MACN,EAAI,KAAI,CAAE,GAKP,sBAAsB,EAAI,OAAO;EACrC,aAAa,EAAI,OAAM;EACvB,cAAc,EAAI,OAAM;EACxB,WAAW;EACX,QAAQ,EAAI,MAAM,EAAI,OAAM,CAAE;EAC9B,QAAQ,EAAI,OAAM;EAClB,OAAO,EAAI,OAAM,EAAG,SAAQ;CAC7B,GAKK,yBAAyB,EAAI,OAAO;EACxC,aAAa,EAAI,OAAM;EACvB,WAAW;EACX,QAAQ,EAAI,MAAM,EAAI,OAAM,CAAE;EAC9B,WAAW,EAAI,OAAM,EAAG,SAAQ;CACjC,GAEK,gBAAgB,EAAI,OAAO;EAC/B,UAAU;EACV,cAAc,EAAI,OAAO,CAAA,CAAE,EAAE,SAAS,sBAAsB;CAC7D,GA8BY,iBAAiB,EAAI,OAAO,CAAA,CAAE,EAAE,SAAS,EAAI,OAAO,CAAA,CAAE,EAAE,SAAS,aAAa,CAAC;AAYtF,SAAU,qCAAqC,eAAsB;AAEzE,SADe,oBAAoB,UAAU,aAAa,EAC5C;AAChB;;;AC7EA;;;ACAA;;;ACAA;AAAO,IAAM,yBAAyB,QAAQ,IAAI,cAAc;AAE1D,SAAU,8BAA2B;AACzC,MAAI,CAAC;AACH,UAAM,IAAI,MAAM,gDAAgD;AAEpE;;;ACNA;OAAOC,SAAQ;;;ACAf;AAEA,SAAoB;AAFpB,OAAOC,SAAQ;;;ACAf;SAAQ,iBAAgB;;;ACAxB;OAAO,QAAQ;AAGf,IAAM,aAAa,cAEf,gBAAwC,CAAA,GACxC,mBAAmB;AAEvB,SAAS,gBAAa;AACpB,MAAI;AAEF,QAAM,eADQ,GAAG,SAAS,UAAU,EACT;AAE3B,QAAI,iBAAiB;AAAkB;AAGvC,QAAM,QADe,GAAG,aAAa,YAAY,MAAM,EAC5B,MAAM,OAAO;AAExC,oBAAgB,CAAA;AAEhB,aAAW,QAAQ,OAAO;AACxB,UAAI,KAAK,KAAI,EAAG,WAAW,GAAG,KAAK,KAAK,KAAI,MAAO;AACjD;AAGF,UAAM,UAAU,oEAAoE,KAAK,IAAI;AAC7F,UAAI,WAAW,QAAQ,QAAQ;AAC7B,YAAM,EAAC,WAAW,gBAAe,IAAI,QAAQ;AAC7C,QAAI,mBAAmB,cACrB,cAAc,eAAe,IAAI;MAErC;IACF;AAEA,uBAAmB;EACrB,SAAS,OAAO;AACd,YAAQ,IAAI,6BAA6B,KAAK;EAChD;AACF;AAEM,SAAU,eAAe,UAAgB;AAC7C,gBAAa;AAEb,MAAM,YAAY,cAAc,QAAQ;AACxC,MAAI;AACF,WAAO;AAGT,QAAM,IAAI,MAAM,6BAA6B,QAAQ,EAAE;AACzD;;;ADpCA,IAAM,0BAA0B,KAG5B;AAEE,SAAU,kBAAkBC,UAA4B;AAC5D,gBAAA,YAAc,mBAAkB;AAEhC,MAAM,EAAC,MAAM,MAAM,UAAU,wBAAuB,IAAIA;AACxD,MAAI;AAGF,QAAI,CADY,UADO,SAAS,cAAc,cAAc,MAClB,MAAM,OAAO;AAErD,YAAM,IAAI,MACR,kBAAkBA,SAAQ,WAAW,uBAAuB,IAAI,MAAM,IAAI,cAAcA,SAAQ,WAAW,iBAAiB;EAGlI,SAASC,MAAK;AACZ,UAAM,IAAI,MAAM,wBAAwBD,SAAQ,WAAW,QAAQ,IAAI,MAAM,IAAI,YAAYC,IAAG,GAAG;EACrG;AACF;AAOA,SAAS,qBAAkB;AACzB,SAAO;AACT;AAEA,SAAS,kBAAkB,SAAiB,MAAc,SAAe;AAMvE,SALe,UAAU,MAAM,CAAC,MAAM,MAAM,KAAK,SAAS,KAAK,SAAQ,CAAE,GAAG;IAC1E;IACA,OAAO;GACR,EAEa,WAAW;AAC3B;;;AD3CA,IAAM,oBAAoB,CAAC,OAAO,OAAO,SAAS,GAC5C,eAAe;AAEf,SAAU,aAAa,aAAmB;AAC9C,SAAO;IACL,MAAM,CAACC,WAAuB,CAAA,MAAO,KAAK,aAAaA,QAAO;IAC9D,KAAK,CAACA,WAAuB,CAAA,MAAO,IAAI,aAAaA,QAAO;;AAEhE;AAEA,SAAS,KAAK,aAAqBA,WAAuB,CAAA,GAAE;AAC1D,8BAA2B,IACzB,yBAAyB,mBAAmB,WAAW;AAEzD,MAAM,UAAUA,SAAQ,yBAAyB,aAAa,QAAQ,MAAM,GAAG;AAE/E,MAAI,gBAAgB,WAAW;AAC7B,QAAI,OAAO,SAAS,UAAU;AAE5B,aAAO,GADU,OAAO,QAAQ,YAAY,EAAE,CAC5B;AAEpB,QAAI,CAAC,kBAAkB,SAAS,MAAM;AACpC,aAAO,GAAG,MAAM;EAEpB;AACA,SAAO,GAAG,MAAM;AAClB;AAEA,SAAS,IAAI,aAAqBA,WAAuB,CAAA,GAAE;AACzD,SAAO,WAAW,KAAK,aAAaA,QAAO,CAAC;AAC9C;AAEA,SAAS,kBAAkB,aAAmB;AAC5C,oBAAkB;IAChB;IACA,MAAM,aAAa,WAAW;IAC9B,MAAM;GACP;AACH;AAEA,SAAS,aAAa,aAAmB;AACvC,MAAI;AACF,QAAM,YAAY,mBAAmB,WAAW;AAChD,WAAG,UAAO,WAAW,EAAC,UAAU,IAAM,WAAW,EAAC,CAAC,GAE5C;EACT,QAAgB;AACd,UAAM,IAAI,MAAM,kBAAkB,WAAW,8BAA8B,WAAW,iBAAiB;EACzG;AACF;AAEA,SAAS,mBAAmB,MAAY;AACtC,MAAIC;AACJ,MAAI;AACF,IAAAA,QAAOC,IAAG,aAAa,2BAA2B,IAAI,UAAU;EAClE,QAAgB;AACd,IAAAD,QAAO,GAAG,IAAI;EAChB;AAEA,MAAI;AACF,WAAO,eAAeA,KAAI;EAC5B,QAAQ;AACN,WAAOA;EACT;AACF;AAGA,IAAI;;;AG3EJ;OAAOE,SAAQ;AACf,YAAY,QAAQ;AAMd,SAAUC,cAAa,aAAmB;AAC9C,SAAO;IACL,MAAM,CAACC,WAAuB,CAAA,MAAOC,MAAK,aAAaD,QAAO;IAC9D,KAAK,CAACA,WAAuB,CAAA,MAAOE,KAAI,aAAaF,QAAO;;AAEhE;AAEA,SAASC,MAAK,aAAqBD,WAAuB,CAAA,GAAE;AAC1D,qCAA2B,IACzBG,0BAAyB,mBAAmB,WAAW,GAIlD,GAFQH,SAAQ,yBAAyB,WAEhC;AAClB;AAEA,SAASE,KAAI,aAAqBF,WAAuB,CAAA,GAAE;AACzD,SAAO,WAAWC,MAAK,aAAaD,QAAO,CAAC;AAC9C;AAEA,SAAS,kBAAkB,aAAmB;AAC5C,MAAM,CAAC,MAAM,IAAI,IAAI,YAAY,WAAW;AAC5C,oBAAkB,EAAC,aAAa,MAAM,KAAI,CAAC;AAC7C;AAEA,SAAS,YAAY,MAAY;AAC/B,MAAI;AACF,QAAM,cAAcI,IAAG,aAAa,GAAM,WAAO,CAAE,wBAAwB,IAAI,gBAAgB,OAAO;AACtG,WAAO,CAAC,aAAa,SAAS,aAAa,EAAE,CAAC;EAChD,QAAgB;AACd,UAAM,IAAI,MAAM,kBAAkB,IAAI,8BAA8B,IAAI,iBAAiB;EAC3F;AACF;AAGA,IAAID;;;AJlCE,IAAO,YAAP,MAAgB;EAGpB,YAA6B,aAAmB;AAC9C,QAD2B,KAAA,cAAA,aACvB,gBAAgB;AAClB,YAAM,IAAI,MAAM,wDAAwD;AAE1E,SAAK,aAAa,mBAAmB,WAAW;EAClD;EAEA,KAAKE,UAAqB;AACxB,WAAO,KAAK,WAAW,KAAKA,QAAO;EACrC;EAEA,IAAIA,UAAqB;AACvB,WAAO,KAAK,WAAW,IAAIA,QAAO;EACpC;GAGW,gBAAP,MAAoB;EAGxB,cAAA;AACE,SAAK,aAAa,mBAAmB,SAAS;EAChD;EAEA,KAAK,QAAc;AACjB,WAAO,KAAK,WAAW,KAAK,EAAC,uBAAuB,OAAM,CAAC;EAC7D;EAEA,IAAI,QAAc;AAChB,WAAO,KAAK,WAAW,IAAI,EAAC,uBAAuB,OAAM,CAAC;EAC5D;GAGI,0BAA0B;AAEhC,SAAS,mBAAmB,aAAmB;AAC7C,SAAI,qCAAqC,WAAW,IAC3CC,cAAiB,WAAW,IAE5B,aAAiB,WAAW;AAEvC;AAEA,SAAS,qCAAqC,aAAmB;AAC/D,MAAI;AACF,IAAAC,IAAG,WAAW,uBAAuB;AAErC,QAAI;AACF,aAAAA,IAAG,WAAW,2BAA2B,WAAW,uBAAuB,GACpE;IACT,QAAQ;AACN,aAAO;IACT;EACF,QAAQ;AACN,WAAO;EACT;AACF;;;AH7DO,IAAM,4BAA4B,IAAI,WAC3C,2EAA2E;AAQ7E,eAAsB,eAAY;AAChC,MAAI,oBAAmB;AACrB,UAAM,IAAI,SAAS,yFAAyF;AAE9G,MAAM,cAAc,mBAAkB,GAChC,iBAAiB;AACvB,UAAQ,aAAa;IACnB,KAAK;AACH,aAAO,IAAI,UAAU,UAAU,EAAE,KAAI;IACvC;AACE,aAAO;EACX;AACF;AAOA,eAAsB,YAAS;AAC7B,MAAM,cAAc,mBAAkB,GAChC,iBAAiB;AACvB,UAAQ,aAAa;IACnB,KAAK;AACH,aAAO,IAAI,cAAa,EAAG,KAAK,OAAO;IACzC;AACE,aAAO;EACX;AACF;AAOA,eAAsB,oBAAiB;AACrC,MAAM,cAAc,mBAAkB,GAChC,iBAAiB;AACvB,UAAQ,aAAa;IACnB,KAAK;AACH,aAAO,IAAI,cAAa,EAAG,KAAK,KAAK;IACvC;AACE,aAAO;EACX;AACF;AAQA,eAAsB,WAAW,WAAiB;AAEhD,UADoB,mBAAkB,GACjB;IACnB,KAAK;AACH,aAAO,IAAI,cAAa,EAAG,KAAK,KAAK;IACvC;AACE,aAAO;EACX;AACF;AAMA,eAAsB,yBAAsB;AAC1C,MAAM,cAAc,mBAAkB,GAChC,iBAAiB;AACvB,UAAQ,aAAa;IACnB,KAAK;AACH,aAAO,IAAI,cAAa,EAAG,KAAK,KAAK;IACvC;AACE,aAAO;EACX;AACF;AAOA,eAAsB,uBAAoB;AACxC,MAAM,cAAc,mBAAkB,GAChC,iBAAiB;AACvB,UAAQ,aAAa;IACnB,KAAK;AACH,aAAO,IAAI,UAAU,mBAAmB,EAAE,KAAI;IAChD;AACE,aAAO;EACX;AACF;AAOA,eAAsB,eAAY;AAChC,MAAM,cAAc,mBAAkB,GAChC,iBAAiB;AACvB,UAAQ,aAAa;IACnB,KAAK;AACH,aAAO,IAAI,UAAU,UAAU,EAAE,KAAI;IACvC;AACE,aAAO;EACX;AACF;AASM,SAAU,mBAAmBC,QAAa;AAC9C,MAAM,YAAYA,OACf,QAAQ,gBAAgB,EAAE,EAC1B,QAAQ,OAAO,EAAE,EACjB,QAAQ,YAAY,EAAE,GACnB,YAAY,CAACC,eAAqB;AACtC,YAAQ,mBAAkB,GAAI;MAC5B,KAAK;AACH,eAAO,IAAI,cAAa,EAAG,KAAKA,UAAS;MAC3C;AACE,eAAO,GAAGA,UAAS;IACvB;EACF;AAGA,UAFsB,CAACA,eACrBA,WAAU,SAAS,gBAAgB,KAAKA,WAAU,SAAS,YAAY,KAAKA,WAAU,SAAS,WAAW,GACvF,SAAS,IAAI,YAAY,UAAU,SAAS;AACnE;;;AFzIA,eAAsB,MAAM,UAAkB;AAC5C,MAAM,eAAe,KAAK,UAAU,QAAQ;AAC5C,cAAY,YAAY;AAC1B;AAOA,eAAsB,QAAK;AACzB,MAAM,UAAU,YAAW;AAE3B,MAAI,CAAC;AACH;AAEF,MAAM,cAAc,KAAK,MAAM,OAAO,GAChC,iBAAiB,MAAM,eAAe,eAAe,WAAW;AACtE,MAAI,eAAe;AACjB,WAAO,eAAe;AAEtB,QAAM,OAAM;AAGhB;AAKA,eAAsB,SAAM;AAC1B,iBAAc,GACd,uBAAsB;AACxB;AAQA,eAAsB,gBAAgBC,SAAc;AAClD,MAAM,WAAW,MAAM,MAAK;AAC5B,MAAI,CAAC;AAAU;AAEf,MAAM,OAAO,MAAM,aAAY;AAC/B,MAAI,GAAC,SAAS,IAAI,KAAK,CAAC,SAAS,IAAI,EAAEA,OAAM;AAC7C,WAAO,SAAS,IAAI,EAAEA,OAAM,EAAE,SAAS;AACzC;AAQA,eAAsB,mBAAmB,OAAa;AACpD,MAAM,WAAW,MAAM,MAAK;AAC5B,MAAI,CAAC;AAAU;AAEf,MAAM,OAAO,MAAM,aAAY,GACzB,eAAe,SAAS,IAAI;AAClC,MAAK;AAEL,aAAW,CAACA,SAAQ,OAAO,KAAK,OAAO,QAAQ,YAAY;AACzD,UAAI,QAAQ,SAAS,UAAU;AAC7B,eAAOA;;AAKb;;;AU9EA;;;ACAA;AAGM,SAAU,WAAQ;AACtB,MAAM,cAAc,mBAAkB;AACtC,SAAI,gBAAgB,YAAY,QACvB,yCACE,gBAAgB,YAAY,aAC9B,yCAEA;AAEX;AAEM,SAAU,cAAc,KAAQ;AACpC,UAAQ,KAAK;IACX,KAAK,SAAS;AACZ,UAAM,cAAc,mBAAkB;AACtC,aAAI,gBAAgB,YAAY,QACvB,qEACE,gBAAgB,YAAY,aAC9B,qEAEA;IAEX;IACA,KAAK,YAAY;AACf,UAAM,cAAc,mBAAkB;AACtC,aAAI,gBAAgB,YAAY,QACvB,qEACE,gBAAgB,YAAY,aAC9B,qEAEA;IAEX;IACA,KAAK,uBAAuB;AAC1B,UAAM,cAAc,mBAAkB;AACtC,aAAI,gBAAgB,YAAY,QACvB,yCACE,gBAAgB,YAAY,aAC9B,yCAEA;IAEX;IACA,KAAK,qBAAqB;AACxB,UAAM,cAAc,mBAAkB;AACtC,aAAI,gBAAgB,YAAY,QACvB,yCACE,gBAAgB,YAAY,aAC9B,yCAEA;IAEX;IACA,KAAK;AAEH,aADoB,mBAAkB,MAClB,YAAY,aACvB,qEAEA;IAGX;AACE,YAAM,IAAI,SAAS,mCAAmC,GAAG,EAAE;EAC/D;AACF;;;ACpEA;AASM,SAAU,iBAAiB,cAAwB,CAAA,GAAE;AACzD,MAAI,SAAS,QAAQ,IAAI,CAAC,QAAQ,iBAAiB,GAAG,CAAC,EAAE,KAAI;AAC7D,kBAAS,CAAC,UAAU,GAAG,QAAQ,GAAG,WAAW,EAAE,IAAI,cAAc,GAC1D,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC;AACnC;AASM,SAAU,UAAU,KAAU,cAAwB,CAAA,GAAE;AAC5D,MAAM,SAAS,CAAC,GAAG,iBAAiB,GAAG,GAAG,GAAG,YAAY,IAAI,cAAc,CAAC,EAAE,IAAI,cAAc;AAChG,SAAO,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC;AACnC;AAOM,SAAU,oBAAoB,KAAQ;AAC1C,UAAQ,KAAK;IACX,KAAK;AACH,aAAO,CAAC,eAAe,KAAK,CAAC;IAC/B,KAAK;AACH,aAAO,CAAC,eAAe,gBAAgB,CAAC;IAC1C,KAAK;AACH,aAAO,CAAC,eAAe,cAAc,CAAC;IACxC;AACE,YAAM,IAAI,SAAS,yCAAyC,GAAG,EAAE;EACrE;AACF;AAEA,SAAS,iBAAiB,KAAQ;AAChC,UAAQ,KAAK;IACX,KAAK;AACH,aAAO,CAAC,WAAW,UAAU,cAAc;IAC7C,KAAK;AACH,aAAO,CAAC,UAAU;IACpB,KAAK;AACH,aAAO,CAAC,KAAK;IACf,KAAK;AACH,aAAO,CAAC,gBAAgB,oBAAoB,uBAAuB;IACrE,KAAK;AACH,aAAO,CAAC,gBAAgB;IAC1B;AACE,YAAM,IAAI,SAAS,gBAAgB,GAAG,EAAE;EAC5C;AACF;AAEA,SAAS,eAAe,OAAa;AACnC,UAAQ,OAAO;IACb,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;IACT;AACE,aAAO;EACX;AACF;;;ACrFA;AAUO,IAAM,KAAK,CAAyB,UAAsC,IAAI,GAAG,KAAK,GAQhF,MAAM,CAAmCC,SAAqC,IAAI,IAAIA,IAAG,GAEzF,KAAP,MAAS;EACb,YAAqB,OAAa;AAAb,SAAA,QAAA;EAAgB;;;;;;EAOrC,QAAK;AACH,WAAO;EACT;;;;;;;;EASA,OAAO,SAAgC;AACrC,mBAAQ,KAAK,KAAK,GACX,GAAG,KAAK,KAAK;EACtB;;;;EAKA,aAAU;AACR,WAAO,KAAK;EACd;;;;EAKA,eAAY;AACV,WAAO,KAAK;EACd;;;;;;;EAQA,IAAkB,QAAuC;AACvD,WAAO,GAAG,OAAO,KAAK,KAAK,CAAC;EAC9B;;;;;;;EAQA,SAAuB,SAAwC;AAC7D,WAAO,GAAG,KAAK,KAAK;EACtB;GAGW,MAAP,MAAU;;EAEd,YAAqB,OAAa;AAAb,SAAA,QAAA;EAAgB;;;;;;EAOrC,QAAK;AACH,WAAO;EACT;;;;;;;EAQA,OAAO,UAAiC;AACtC,WAAO,IAAI,KAAK,KAAK;EACvB;;;;EAKA,aAAU;AACR,UAAM,KAAK;EACb;;;;EAKA,eAAY;AACV,QAAI,KAAK,iBAAiB;AACxB,YAAM,KAAK;AACN,QAAI,KAAK,iBAAiB,mCAAmB,KAAK,iBAAiB,OAAO;AAC/E,UAAM,QAAQ,IAAI,WAAW,KAAK,MAAM,OAAO;AAC/C,kBAAM,QAAQ,KAAK,MAAM,OACnB;IACR;AACE,YAAM,IAAI,WAAW,GAAG,KAAK,KAAK,EAAE;EAExC;;;;;;;EAQA,IAAkB,SAA6C;AAC7D,WAAO,IAAI,KAAK,KAAK;EACvB;;;;;;;EAQA,SAAuB,QAAuC;AAC5D,WAAO,IAAI,OAAO,KAAK,KAAK,CAAC;EAC/B;;;;AC9IF;;;ACAA;AAaA,SAAS,eAAe,iBAA2B,UAAuB;AACxE,MAAM,gBAAgB,SAAS;AAC/B,SAAI,cAAa,MAAO,cAAc,SAAS,UAAU,IAAU,KAC5D,gBAAgB,MAAM,CAAC,UAAU,cAAc,SAAS,KAAK,CAAC;AACvE;AASA,eAAsB,gBACpB,QACA,cACA,SAA4B;AAI5B,MAFI,CAAC,WAED,CADmB,eAAe,QAAQ,QAAQ,QAAQ;AACzC,WAAO;AAC5B,MAAI,mBAAmB,eAAe,QAAQ,QAAQ;AAEtD,MAAI,aAAa,aAAa;AAC5B,QAAM,QAAQ,cAAc,UAAU,GAChC,QAAQ,QAAQ,aAAa,KAAK;AACxC,uBAAmB,oBAAoB,eAAe,KAAK;EAC7D;AAEA,MAAI,aAAa,kBAAkB;AACjC,QAAM,QAAQ,cAAc,gBAAgB,GACtC,QAAQ,QAAQ,aAAa,KAAK;AACxC,uBAAmB,oBAAoB,eAAe,KAAK;EAC7D;AAEA,MAAI,aAAa,uBAAuB;AACtC,QAAM,QAAQ,cAAc,qBAAqB,GAC3C,QAAQ,QAAQ,aAAa,KAAK;AACxC,uBAAmB,oBAAoB,eAAe,KAAK;EAC7D;AAEA,MAAI,aAAa,UAAU;AACzB,QAAM,QAAQ,cAAc,OAAO,GAC7B,YAAY,GAAG,aAAa,SAAS,SAAS,IAAI,KAAK,IACvD,QAAQ,QAAQ,aAAa,SAAS;AAC5C,uBAAmB,oBAAoB,eAAe,KAAK;EAC7D;AAIA,SAFA,YAAY,uCAAuC,gBAAgB,EAAE,GAEhE,qCAAqC,QAAQ,QAAQ,IAItD,mBAAyB,kBAEtB,OALE;AAMX;AAEA,SAAS,eAAe,OAAuB;AAC7C,SAAK,QACE,MAAM,YAAY,gBAAe,IADrB;AAErB;AAEA,SAAS,kBAAe;AACtB,SAAO,IAAI,KAAK,KAAK,IAAG,IAAK,iBAAiB,gCAAgC,KAAK,GAAI;AACzF;;;AC/EA;AA+BA,eAAsB,2BAA2B,QAAgB;AAC/D,MAAM,OAAO,MAAM,aAAY,GAEzB,cAAc,EAAC,WADI,SAAQ,GACiB,OAAO,OAAO,KAAK,GAAG,EAAC,GACnEC,OAAM,WAAW,IAAI,+BAErB,WAAW,MAAM,aAAaA,MAAK;IACvC,QAAQ;IACR,SAAS,EAAC,gBAAgB,oCAAmC;IAC7D,MAAM,uBAAuB,WAAW;GACzC,GAGG;AACJ,MAAI;AACF,mBAAe,MAAM,SAAS,KAAI;EACpC,QAAgB;AACd,UAAM,IAAI,SACR,4DAA4D,SAAS,MAAM,2CAC3E,8CAA8C;EAElD;AAIA,MAAI;AACJ,MAAI;AACF,iBAAa,KAAK,MAAM,YAAY;EACtC,QAAQ;AAEN,QAAM,eAAe,oCAAoC,UAAU,YAAY;AAC/E,UAAM,IAAI,SAAS,YAAY;EACjC;AAGA,MADA,YAAY,oDAAoD,YAAY,KAAK,UAAU,CAAC,EAAE,GAC1F,CAAC,WAAW,eAAe,CAAC,WAAW;AACzC,UAAM,IAAI,SAAS,uCAAuC;AAK5D,MAFA,WAAW;wCAA2C,GAElD,KAAI;AACN,UAAM,IAAI,WACR,4GACA,yIAAyI;AAI7I,aAAW,wCAAwC,WAAW,SAAS,EAAE;AACzE,MAAM,YAAY,YAAY,KAAK,WAAW,yBAAyB,GAEjE,eAAe,MAAK;AACxB,eAAW,6DAA6D,SAAS,EAAE;EACrF;AAEA,SAAI,mBAAkB,KAAM,CAAC,MAAK,IAChC,aAAY,KAEZ,WAAW,gEAAyD,GACpE,MAAM,SAAQ,GACC,MAAM,QAAQ,WAAW,yBAAyB,IAE/D,WAAW,uDAAuD,SAAS,EAAE,IAE7E,aAAY,IAIT;IACL,YAAY,WAAW;IACvB,UAAU,WAAW;IACrB,iBAAiB,WAAW;IAC5B,WAAW,WAAW;IACtB,yBAAyB,WAAW;IACpC,UAAU,WAAW;;AAEzB;AAaA,eAAsB,2BAA2B,MAAc,WAAW,GAAC;AACzE,MAAI,2BAA2B;AAE/B,SAAO,IAAI,QAAuB,CAAC,SAAS,WAAU;AACpD,QAAM,SAAS,YAAW;AACxB,UAAM,SAAS,MAAM,iCAAiC,IAAI;AAC1D,UAAI,CAAC,OAAO,MAAK,GAAI;AACnB,gBAAQ,OAAO,KAAK;AACpB;MACF;AAEA,UAAM,QAAQ,OAAO,SAAS;AAG9B,cADA,YAAY,4DAA4D,KAAK,EAAE,GACvE,OAAO;QACb,KAAK,yBAAyB;AAC5B,uBAAY;AACZ;QACF;QACA,KAAK;AACH,sCAA4B,GAC5B,aAAY;AACZ;QACF,KAAK;QACL,KAAK;QACL,KAAK;AACH,iBAAO,IAAI,MAAM,gCAAgC,KAAK,EAAE,CAAC;MAE7D;IACF,GAEM,eAAe,MAAK;AAExB,iBAAW,QAAQ,2BAA2B,GAAI;IACpD;AAEA,iBAAY;EACd,CAAC;AACH;AAEA,SAAS,uBAAuB,aAA+C;AAC7E,SAAO,OAAO,QAAQ,WAAW,EAC9B,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,SAAS,GAAG,GAAG,IAAI,KAAK,EAAE,EAChD,OAAO,CAAC,aAAa,EAAQ,QAAS,EACtC,KAAK,GAAG;AACb;AAUA,SAAS,oCAAoC,UAAoB,cAAoB;AAEnF,MAAI,eAAe,8DAA8D,SAAS,MAAM;AAGhG,SAAI,SAAS,UAAU,MACrB,gBAAgB,6CACP,SAAS,UAAU,QAC5B,gBAAgB,mDAId,aAAa,KAAI,EAAG,WAAW,WAAW,KAAK,aAAa,KAAI,EAAG,WAAW,OAAO,IACvF,gBAAgB,4EACP,aAAa,KAAI,MAAO,KACjC,gBAAgB,mCAEhB,gBAAgB,gDAGX,GAAG,YAAY;AACxB;;;ACpMA;AA0CM,SAAU,qBAAqB,SAAqB;AACxD,SAAO,QAAQ,MAAM,WAAW,SAAS;AAC3C;;;ACrCA;AAAO,IAAM,uBAAuB;;;;;;;;;ACPpC;;;ACAA;AAAM,SAAU,mBAAmB,kBAA6B,aAAsB;AACpF,SAAO,MAAM,KAAK,oBAAI,IAAI,CAAC,GAAG,kBAAkB,GAAG,WAAW,CAAC,CAAC;AAClE;;;ADDA,uBAAsB,2BAEtB,gBAAyB,8BACzB,mBAA4B,iCAC5B,iBAA0B,+BAC1B,wBAA2B,sCAC3B,mBAAsB,iCACtB,iBAAoB,+BACpB,aAAgB,2BAChB,aAAgB,2BAChB,eAAkB,6BAClB,iBAA0B;AAWpB,SAAU,iBACd,KACA,KACA,qBAAyF,oBAAkB;AAE3G,aAAO,iBAAAC,SAAU,KAAK,KAAK,EAAC,YAAY,mBAAkB,CAAC;AAC7D;AAUM,SAAU,OAAU,QAA0C,WAA8B;AAChG,aAAO,cAAAC,SAAa,QAAQ,SAAS;AACvC;AAyBM,SAAU,YAAY,KAAa,KAAW;AAClD,aAAO,eAAAC,SAAc,KAAK,GAAG;AAC/B;AASM,SAAU,eAAe,KAAa,KAAW;AACrD,MAAM,cAAU,sBAAAC,aAAe,eAAAC,SAAQ,GAAG,OAAG,eAAAA,SAAQ,GAAG,GAAG,WAAW,GAChE,eAAW,sBAAAD,aAAe,eAAAC,SAAQ,GAAG,OAAG,eAAAA,SAAQ,GAAG,GAAG,WAAW;AACvE,SAAO,KAAC,iBAAAC,SAAU,OAAO,OAAG,iBAAAA,SAAU,QAAQ,CAAC;AACjD;AASM,SAAU,aAAyB,QAAgB,MAAkB;AACzE,aAAO,WAAAC,SAAI,QAAQ,IAAI,MAAM,SAAY,aAAa,WAAAA,SAAI,QAAQ,IAAI;AACxE;AAUM,SAAU,aAAa,QAAgB,MAAoB,OAAe;AAC9E,aAAO,WAAAC,SAAI,QAAQ,MAAM,KAAK;AAChC;AAmBM,SAAU,QAAQ,QAAc;AACpC,aAAO,eAAAC,SAAc,MAAM;AAC7B;AAQM,SAAU,QAAQ,QAAc;AACpC,SAAO,OAAO,YAAY,OAAO,QAAQ,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,KAAK,MAAM,SAAS,IAAI,CAAC;AACxF;;;AEvIA;;;ACAA;;;ACAA;AAMM,SAAU,oBACd,KACA,OACAC,MACA,WACA,UAAmC,CAAA,GAAE;AAErC,cAAY,wBAAwB,YAAY,KAAK,GAAG,CAAC;IACvD,YAAY,IAAI,MAAM,SAAQ,EAAG,KAAI,CAAE,CAAC;EAC1C,YAAY;;EAAsB,kBAAkB,SAAS,CAAC;IAAO,EAAE;;EAEvE,uBAAuB,OAAO,CAAC;KAC5B,YAAYA,IAAG,CAAC,EAAE;AACvB;AAEM,SAAU,kBAAkB,WAAoB;AACpD,MAAM,SAAoB,EAAC,GAAG,UAAS,GAGjC,kBAAkB,sBAAsB,QAFxB,CAAC,UAAU,mBAAmB,CAEe;AAEnE,SAAO,KAAK,UAAU,iBAAiB,MAAM,CAAC;AAChD;AAEA,SAAS,sBAAsB,OAAgB,eAAuB;AAEpE,MAAI,OAAO,SAAU;AACnB,QAAI;AACF,UAAM,SAAS,KAAK,MAAM,KAAK;AAC/B,UAAI,OAAO,UAAW,YAAY,WAAW,MAAM;AACjD,YAAM,YAAY,sBAAsB,QAAQ,aAAa;AAC7D,eAAO,KAAK,UAAU,WAAW,IAAI;MACvC;IAEF,QAAgB;AACd,aAAO;IACT;AAGF,MAAI,OAAO,SAAU,YAAY,UAAU;AACzC,WAAO;AAGT,MAAI,MAAM,QAAQ,KAAK;AACrB,WAAO,MAAM,IAAI,CAAC,SAAS,sBAAsB,MAAM,aAAa,CAAC;AAGvE,MAAM,SAAoB,CAAA;AAE1B,WAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC9C,QAAI,cAAc,SAAS,GAAG,KAAK,OAAO,OAAQ,UAAU;AAC1D,aAAO,GAAG,IAAI;AACd;IACF;AAEA,WAAO,GAAG,IAAI,sBAAsB,KAAK,aAAa;EACxD;AAEA,SAAO;AACT;AAEM,SAAU,aAAa,KAAW;AACtC,SAAO,CAAC,OAAgB,cAAsB;AAC5C,QAAI,iBAAiB,aAAa;AAChC,UAAM,EAAC,OAAM,IAAI,MAAM,UACnB,eAAe,iBAAiB;MACpC,YAAY,IAAI,GAAG,CAAC,6CAClB,WAAW,MAAM,KAAK,oBAAoB,MAAM,MAClD;;EAEJ,YAAY,KAAK,MAAM,SAAS,MAAM,CAAC;OAClC;AACD,MAAI,cACF,gBAAgB;cACV,SAAS;;AAGjB,UAAI;AACJ,aAAI,SAAS,MACX,cAAc,IAAI,mBAAmB,cAAc,QAAQ,MAAM,SAAS,MAAM,IAEhF,cAAc,IAAI,WAAW,YAAY,GAE3C,YAAY,QAAQ,MAAM,OACnB;IACT;AACE,aAAO;EAEX;AACF;;;AC/FA;AAKA,IAAM,sBAAN,MAAM,qBAAmB;EAAzB,cAAA;AAUU,SAAA,aAAuB,CAAA;EAyBjC;EAhCE,OAAO,cAAW;AAChB,WAAK,qBAAoB,aACvB,qBAAoB,WAAW,IAAI,qBAAmB,IAEjD,qBAAoB;EAC7B;;;;;EAQA,aAAa,WAAoC;AAC/C,IAAI,aAAa,KAAK,WAAW,SAAS,OACxC,KAAK,WAAW,KAAK,SAAS;EAElC;;;;EAKA,gBAAa;AACX,WAAO,KAAK;EACd;;;;EAKA,QAAK;AACH,SAAK,aAAa,CAAA;EACpB;GAGW,uBAAuB,oBAAoB,YAAW;;;AF4CnE,eAAe,oBAAoB,EACjC,KAAAC,MACA,cACA,MAAK,GAKN;AACC,MAAM,UAAU;IACd,GAAG;IACH,GAAG,aAAa,KAAK;KAEjB,gBAAgB,EAAC,OAAO,MAAM,WAAU,GAAI,QAAO;AAEzD,SAAO;IACL,QAAQ,IAAI,cAAcA,MAAK,aAAa;IAC5C;;AAEJ;AAOA,eAAe,sBAA+BC,UAA8C;AAC1F,MAAM,EAAC,OAAO,cAAc,eAAe,WAAW,KAAK,KAAAD,MAAK,iBAAiB,qBAAqB,aAAY,IAChHC,UACI,YAAY,YAAYA,SAAQ,sBAAsB,SAAS,GAEjE,EAAC,SAAS,OAAM,IAAI,MAAM,oBAAoB,EAAC,KAAAD,MAAK,cAAc,MAAK,CAAC;AAC5E,sBAAoB,KAAK,eAAeA,MAAK,WAAW,OAAO;AAE/D,MAAM,oBAAoB,YAAW;AACnC,QAAI;AAGJ,QAAI;AAGF,oBAAO,cAAc,SAAS,gCAAgC,SAAS,GACvE,eAAe,MAAM,OAAO,WAAoB,eAAe,SAAS,GACxE,MAAM,6BAA6B,YAAY,GACxC;IACT,SAAS,OAAO;AACd,YAAI,iBAAiB,eAGnB,MAAM,6BAA6B,MAAM,QAAe,GAEpD;IACR;EACF,GAEM,sBAAsB,qBAAqB,SAE3C,0CAA0C,sBAC5C,YAAW;AACT,QAAM,qBAAqB,MAAM,oBAAmB;AACpD,QAAI,mBAAmB,OAAO;AAC5B,UAAM,EAAC,QAAQ,WAAW,SAAS,WAAU,IAAI,MAAM,oBAAoB;QACzE,KAAAA;QACA;QACA,OAAO,mBAAmB;OAC3B;AACD,sBAAS,WACT,UAAU,YACH;IACT;AACE,aAAO;EAEX,IACA,QAEE,UAAU,MACd,kBACE,EAAC,SAAS,mBAAmB,KAAAA,MAAK,GAAG,UAAS,GAC9C,iBAAiB,iBAAiB,KAAQ,SAAY,aAAa,GAAG,CAAC,GAGrE,mBAAmB,MACvB,aAAa,2BAA2B,EAAE,YAAW;AACnD,QAAI;AACJ,QAAI;AACF,iBAAW,MAAM,QAAO;IAC1B,SAAS,OAAO;AACd,UAAI,iBAAiB,eAAe,MAAM,SAAS,WAAW,OAAO;AACnE,YAAI,MAAM,wCAAuC;AAC/C,qBAAW,MAAM,QAAO;;AAExB,gBAAM;;AAGR,cAAM;IAEV;AAEA,WAAI,iBAAiB,cACnB,gBAAgB,WAAW,QAAQ,GAE9B,SAAS;EAClB,CAAC;AAGH,MAAI,iBAAiB;AACnB,WAAO,iBAAgB;AAGzB,MAAM,EAAC,UAAU,eAAe,WAAU,IAAI,cAGxC,YAAY,cAAc,aAAa,GACvC,gBAAgB,cAAc,KAAK,UAAU,aAAa,CAAA,CAAE,CAAC,GAC7D,WAA8B,KAAK,SAAS,IAAI,aAAa,IAAI,eAAe,IAAI,iBAAiB,EAAE,IAEvG,SAAS,MAAM,0BACnB,UACA,YAAW;AACT,QAAME,UAAS,MAAM,iBAAgB;AACrC,WAAO,KAAK,UAAUA,OAAM;EAC9B,GACA,2BAA2B,QAAQ,GACnC,UAAU;AAGZ,SAAO,KAAK,MAAM,MAAM;AAC1B;AAEA,eAAe,6BAA6B,UAAkC;AAC5E,MAAI;AACF,QAAM,YAAY,SAAS,QAAQ,IAAI,cAAc;AACrD,yBAAqB,aAAa,SAAS,GAC3C,MAAM,kBAAkB,OAAO;MAC7B,iCAAiC,aAAa;MAC9C;EAEJ,QAAQ;EAER;AACF;AAQA,eAAsB,eAAkBD,UAAiC;AACvE,SAAO,sBAAyB;IAC9B,GAAGA;IACH,eAAeA,SAAQ;GACxB;AACH;AAQA,eAAsB,kBACpBA,UAAsD;AAEtD,SAAO,sBAA+B;IACpC,GAAGA;IACH,eAAe,uBAAuBA,SAAQ,KAAK,EAAE;GACtD;AACH;;;AG9PA;;;ACAA;AAAO,IAAM,kCAAkC,CAC7C,SACA,QACA,YAIU;AACV,MAAME,OAAM,IAAI,IAAI,OAAO;AAE3B,SAAI,UACFA,KAAI,aAAa,OAAO,UAAU,MAAM,GAGtC,SAAS,UACXA,KAAI,aAAa,OAAO,UAAU,QAAQ,MAAM,GAG9C,SAAS,UACXA,KAAI,aAAa,OAAO,UAAU,QAAQ,MAAM,GAG3CA,KAAI,SAAQ;AACrB;;;ACfA;IAAM,8BAA2D;EAC/D,GAAG;EACH,mBAAmB;IACjB,qBAAqB;;;AASnB,SAAU,yBAAsB;AACpC,SAAO,4BAA4B,kBAAkB;AACvD;AAOM,SAAU,uBAAuB,OAAa;AAClD,MAAI,MAAM,SAAS;AAAG;AAEtB,MAAM,yBAAyB,sBAAsB,KAAK,IAAG,GAAI,KAAK;AACtE,MAAI,CAAC;AAAwB;AAE7B,MAAM,sBAAsB,uBAAsB;AAClD,GAAI,CAAC,uBAAuB,yBAAyB,oBAAoB,QAAO,OAC9E,4BAA4B,kBAAkB,sBAAsB,IAAI,KAAK,sBAAsB;AAEvG;AAEA,SAAS,sBAAsB,WAAmB,OAAa;AAE7D,SADc,MAAM,IAAI,CAAC,SAAS,KAAK,QAAO,CAAE,EACnC,KAAI,EAAG,KAAK,CAAC,SAAS,OAAO,SAAS;AACrD;;;AF5BA,wBAAuB,2BAOjB,UAAU,IAAI,kBAAAC,QAAW;EAC7B,SAAS;EACT,eAAe;CAChB;AAOD,eAAe,aAAa,OAAa;AACvC,MAAM,MAAM,YAENC,OAAM,WADC,MAAM,aAAY,CACJ;AAC3B,SAAO;IACL;IACA;IACA,KAAAA;IACA,iBAAiB,EAAC,YAAY,mBAAkB;;AAEpD;AAaA,eAAsB,gBACpB,OACA,OACA,WACA,cACA,oBACA,qBAAyC;AAEzC,MAAM,OAAO,MAAM,aAAa,KAAK;AAYrC,SAXe,QAAQ,SAAS,MAC9B,eAAkB;IAChB,GAAG;IACH;IACA;IACA;IACA;IACA;GACD,CAAC;AAIN;AAEO,IAAM,yBAAyB,OACpC,QACA,YAImB;AAEnB,MAAMA,OAAM,WADC,MAAM,aAAY,CACJ;AAC3B,SAAO,gCAAgCA,MAAK,QAAQ,OAAO;AAC7D;AAYA,eAAsB,mBACpB,OACA,OACA,WACA,oBACA,qBAAyC;AAEzC,MAAI;AACF,QAAM,OAAO,MAAM,aAAa,KAAK;AAWrC,WAVe,QAAQ,SAAS,MAC9B,kBAAuC;MACrC,GAAG;MACH;MACA;MACA;MACA;KACD,CAAC;EAKN,SAAS,OAAY;AACnB,QAAI,MAAM,SAAS,CAAC,GAAG,YAAY,SAAS,8BAA8B;AACxE,UAAM,iBAAiB,MAAM,kBAAkB,IAAG,CAAE;AAEpD,YAAM,IAAI,WAAW,CAAC,+CAA+C,GAAG,MAAM;QAC5E,CAAC,OAAO,EAAC,SAAS,4BAA4B,gBAAgB,iBAAiB,EAAC,CAAC;OAClF;IACH;AAEA,UAAM;EACR;AACF;AAgBM,SAAU,mBAAsB,UAA4B;AAChE,MAAI,CAAC,SAAS;AAAY;AAE1B,MAAM,mBAA2B,CAAA;AACjC,WAAW,eAAgB,SAAS,WAAgC;AAClE,IAAI,YAAY,sBACd,iBAAiB,KAAK,IAAI,KAAK,YAAY,kBAAkB,CAAC;AAIlE,yBAAuB,gBAAgB;AACzC;;;AJrJA,eAAeC,cAAa,OAAa;AACvC,MAAM,MAAM,oBAENC,OAAM,WADC,MAAM,qBAAoB,CACZ;AAC3B,SAAO;IACL;IACA;IACA,KAAAA;IACA,iBAAiB,EAAC,YAAY,mBAAkB;;AAEpD;AAWA,eAAsB,wBACpB,OACA,OACA,WACA,cAA2B;AAE3B,SAAO,eAAkB;IACvB,GAAI,MAAMD,cAAa,KAAK;IAC5B;IACA;IACA;GACD;AACH;AAsBA,eAAsB,2BACpBE,UAA4D;AAE5D,SAAO,kBAAuC;IAC5C,GAAI,MAAMF,cAAaE,SAAQ,KAAK;IACpC,OAAOA,SAAQ;IACf,WAAWA,SAAQ;IACnB,cAAcA,SAAQ;IACtB,qBAAqBA,SAAQ;GAC9B;AACH;AAQA,eAAe,0BAA0B,OAAe,gBAAsB;AAC5E,MAAM,MAAM,oBAEND,OAAM,WADC,MAAM,qBAAoB,CACZ,4CAA4C,cAAc;AACrF,SAAO;IACL;IACA;IACA,KAAAA;IACA,iBAAiB,EAAC,YAAY,mBAAkB;;AAEpD;AAgBA,eAAsB,qCACpBC,UAA4D;AAE5D,SAAO,eAAkB;IACvB,OAAOA,SAAQ;IACf,GAAI,MAAM,0BAA0BA,SAAQ,OAAOA,SAAQ,cAAc;IACzE,WAAWA,SAAQ;IACnB,qBAAqBA,SAAQ;GAC9B;AACH;AAaA,eAAsB,wCACpBA,UAAyE;AAEzE,SAAO,kBAAuC;IAC5C,OAAOA,SAAQ;IACf,GAAI,MAAM,0BAA0BA,SAAQ,OAAOA,SAAQ,cAAc;IACzE,WAAWA,SAAQ;IACnB,qBAAqBA,SAAQ;GAC9B;AACH;;;AP7GA,eAAe,WAAW,uBAAyC;AACjE,MAAK;AAEL,QAAI;AAEF,cADwB,MAAM,wBAAwC,sBAAsB,qBAAqB,GAC1F,oBAAoB;IAE7C,SAAS,OAAO;AACd,kBAAY,4CAA6C,MAAgB,WAAW,OAAO,KAAK,CAAC,EAAE;AACnG;IACF;AACF;AA2EA,IAAI,QACA,aAAyB;AAc7B,eAAsB,6BAA0B;AAC9C,MAAI;AAAQ,WAAO;AAEnB,MAAM,mBAAmB,oBAAmB;AAC5C,MAAI;AAAkB,WAAO;AAE7B,MAAM,cAAc,iBAAgB,KAAM,WAAU;AACpD,SAAO,cAAc,cAAc,WAAW,IAAI;AACpD;AAEM,SAAU,2BAA2B,IAAU;AACnD,WAAS;AACX;AAcA,eAAsB,wBAAqB;AACzC,MAAI,eAAe;AAAQ,WAAO;AAElC,MAAI,oBAAmB;AAAI,WAAO;AAGlC,MADsB,iBAAgB;AACnB,WAAO;AAE1B,MAAM,gBAAgB,WAAU;AAChC,SAAI,gBACK,qBAAqB,EAAC,OAAO,eAAe,WAAW,GAAE,CAAC,IAAI,uBAAuB,qBAGvF;AACT;AAEM,SAAU,sBAAsB,QAAkB;AACtD,eAAa;AACf;AAgBA,eAAsB,oBACpB,cACA,MACA,EAAC,eAAe,IAAO,WAAW,IAAO,kBAAkB,GAAK,IAA0C,CAAA,GAAE;AAE5G,MAAM,OAAO,MAAM,aAAY,GAEzB,oBAAoB,aAAa,UAAU;AACjD,MAAI,mBAAmB;AACrB,QAAM,sBAAsB,mBAAmB,iBAAiB;AAChE,IAAI,sBAAsB,aAAa,UAAU,cAC/C,aAAa,SAAS,YAAY;EAEtC;AAEA,MAAM,WAAY,MAAmB,MAAK,KAAO,CAAA,GAE7C,mBAAmB,oBAAmB;AAC1C,MAAI,CAAC,kBAAkB;AACrB,QAAM,UAAU,OAAO,KAAK,SAAS,IAAI,KAAK,CAAA,CAAE;AAChD,IAAI,QAAQ,SAAS,MAAG,mBAAmB,QAAQ,CAAC;EACtD;AACA,MAAM,iBACJ,oBAAoB,CAAC,kBAAkB,SAAS,IAAI,IAAI,gBAAgB,IAAI,QACxE,SAAS,iBAAiB,YAAY;AAE5C,cAAY;EACZ,YAAY,KAAK,MAAM,CAAC;;EAExB,YAAY,KAAK,YAAY,CAAC;CAC/B;AAEC,MAAM,mBAAmB,MAAM,gBAAgB,QAAQ,cAAc,cAAc,GAE/E,aAAa,CAAA;AAEjB,MAAI,qBAAqB;AACvB,UAAM,gBAAgB,QAAQ,GAC9B,YAAY,yDAAyD,GACrE,aAAa,MAAM,oBAAoB,YAAY;WAC1C,qBAAqB,mBAAmB,cAAc;AAC/D,gBAAY,4EAA4E;AACxF,QAAI;AAEF,mBAAa,MAAM,cAAc,gBAAiB,YAAY;IAChE,SAAS,OAAO;AACd,UAAI,iBAAiB;AACnB,cAAM,gBAAgB,QAAQ,GAC9B,aAAa,MAAM,oBAAoB,YAAY;UAC9C,OAAI,iBAAiB,uBAC1B,MAAmB,OAAM,GACnB,IAAI,WAAW;gCAAmC,qDAAqD,KAEvG;IAEV;EACF;AAEA,MAAM,kBAAkB,EAAC,GAAG,gBAAgB,GAAG,WAAU,GACnD,eAAe,gBAAgB,SAAS,QACxC,kBAA4B;IAChC,GAAG;IACH,CAAC,IAAI,GAAG,EAAC,GAAG,SAAS,IAAI,GAAG,CAAC,YAAY,GAAG,gBAAe;;AAI7D,EAAK,QAAQ,UAAU,MACrB,MAAmB,MAAM,eAAe,GACxC,oBAAoB,YAAY;AAGlC,MAAM,SAAS,MAAM,UAAU,cAAc,eAAe,GAGtD,WAAW,iBAAgB;AACjC,SAAI,YAAY,aAAa,gBAC3B,OAAO,YAAY,MAAM,2BAA2B,QAAQ,GAAG,cAGjE,sBAAsB,WAAW,mBAAmB,aAAa,GACjE,2BAA2B,OAAO,MAAM,GACjC;AACT;AAEA,eAAe,gBAAgB,UAAiB;AAC9C,MAAK;AACL,gBAAM,OAAM,GACN,IAAI,WACR;;8DAGA,6NAA6N;AAEjO;AAQA,eAAe,oBAAoB,cAA+B;AAChE,MAAM,SAAS,iBAAiB,YAAY,GACtC,iBAAiB,kBAAkB,YAAY,GAC/CC,SAAQ,aAAa,UAAU;AACrC,EAAI,cAAa,MACf,YAAY,oDAAoD,GAChE,OAAO,KAAK,UAAU;AAGxB,MAAI,eACE,2BAA2B,4BAA2B;AAC5D,MAAI;AACF,oBAAgB,0BAA0B,QAAQ,wBAAwB;OACrE;AAEL,gBAAY,sDAAsD;AAClE,QAAM,aAAa,MAAM,2BAA2B,MAAM;AAG1D,gBAAY,yDAAyD,GACrE,gBAAgB,MAAM,2BAA2B,WAAW,YAAY,WAAW,QAAQ;EAC7F;AAGA,cAAY,0EAA0E;AACtF,MAAM,SAAS,MAAM,mCAAmC,eAAe,gBAAgBA,MAAK,GAGtF,wBAAwB,OAAO,cAAc,mBAAmB,CAAC,GAAG,aACpE,QAAS,MAAM,WAAW,qBAAqB,KAAM,cAAc,QAEnE,UAAmB;IACvB,UAAU;MACR,GAAG;MACH;;IAEF,cAAc;;AAGhB,yBAAgB,YAAY,GAErB;AACT;AAOA,eAAe,cAAc,SAAkB,cAA+B;AAE5E,MAAM,gBAAgB,MAAM,mBAAmB,QAAQ,QAAQ,GAEzD,iBAAiB,kBAAkB,YAAY,GAC/C,oBAAoB,MAAM,mCAC9B,eACA,gBACA,aAAa,UAAU,SAAS;AAGlC,SAAO;IACL,UAAU;IACV,cAAc;;AAElB;AASA,eAAe,UAAU,cAAiC,SAAgB;AACxE,MAAM,SAAuB;IAC3B,QAAQ,QAAQ,SAAS;;AAG3B,MAAI,aAAa,UAAU;AACzB,QAAM,QAAQ,cAAc,OAAO,GAC7B,YAAY,GAAG,aAAa,SAAS,SAAS,IAAI,KAAK,IACvD,QAAQ,QAAQ,aAAa,SAAS,GAAG;AAC/C,IAAI,UACF,OAAO,QAAQ,EAAC,OAAO,WAAW,aAAa,SAAS,UAAS;EAErE;AAEA,MAAI,aAAa,aAAa;AAC5B,QAAM,QAAQ,cAAc,UAAU;AACtC,WAAO,WAAW,QAAQ,aAAa,KAAK,GAAG;EACjD;AAEA,MAAI,aAAa,uBAAuB;AACtC,QAAM,QAAQ,cAAc,qBAAqB;AACjD,WAAO,aAAa,QAAQ,aAAa,KAAK,GAAG;EACnD;AAEA,MAAI,aAAa,qBAAqB;AACpC,QAAM,QAAQ,cAAc,mBAAmB;AAC/C,WAAO,mBAAmB,QAAQ,aAAa,KAAK,GAAG;EACzD;AAEA,MAAI,aAAa,kBAAkB;AACjC,QAAM,QAAQ,cAAc,gBAAgB;AAC5C,WAAO,gBAAgB,QAAQ,aAAa,KAAK,GAAG;EACtD;AAEA,SAAO;AACT;AASA,SAAS,iBAAiB,MAAuB;AAC/C,MAAM,QAAQ,KAAK,UAAU,UAAU,CAAA,GACjC,UAAU,KAAK,aAAa,UAAU,CAAA,GACtC,aAAa,KAAK,uBAAuB,UAAU,CAAA,GACnD,mBAAmB,KAAK,qBAAqB,UAAU,CAAA,GACvD,gBAAgB,KAAK,kBAAkB,UAAU,CAAA,GACjD,kBAAkB,CAAC,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,GAAG,kBAAkB,GAAG,aAAa;AACnG,SAAO,iBAAiB,eAAe;AACzC;AAQA,SAAS,kBAAkB,MAAuB;AAChD,MAAM,aAAa,KAAK,UAAU,UAAU,CAAA,GACtC,eAAe,KAAK,aAAa,UAAU,CAAA,GAC3C,mBAAmB,KAAK,uBAAuB,UAAU,CAAA,GACzD,yBAAyB,KAAK,qBAAqB,UAAU,CAAA,GAC7D,sBAAsB,KAAK,kBAAkB,UAAU,CAAA;AAC7D,SAAO;IACL,OAAO,UAAU,SAAS,UAAU;IACpC,UAAU,UAAU,YAAY,YAAY;IAC5C,YAAY,UAAU,uBAAuB,gBAAgB;IAC7D,kBAAkB,UAAU,qBAAqB,sBAAsB;IACvE,eAAe,UAAU,kBAAkB,mBAAmB;;AAElE;AAEA,SAAS,0BACP,QACA,0BAAqF;AAErF,SAAO;IACL,GAAG;IACH,WAAW,IAAI,KAAK,KAAK,IAAG,IAAK,MAAU,KAAK,KAAK,GAAI;IACzD;IACA,OAAO,yBAAyB;;AAEpC;;;AcpcA;;;ACAA;AAAA,SAAS,cAAc;;;ACAvB;AACO,IAAM,UAAU,IAAI,YAAY,GAC1B,UAAU,IAAI,YAAY,GACjC,YAAY,KAAK;;;ADDvB,SAAS,UAAU,OAAO;AACtB,MAAI,UAAU;AACd,SAAI,mBAAmB,eACnB,UAAU,QAAQ,OAAO,OAAO,IAE7B;AACX;AAKO,IAAM,SAAS,CAAC,UAAU,IAAI,WAAW,OAAO,KAAK,UAAU,KAAK,GAAG,WAAW,CAAC;;;AEb1F;AAAO,IAAM,YAAN,cAAwB,MAAM;AAAA,EACjC,OAAO,OAAO;AAAA,EACd,OAAO;AAAA,EACP,YAAY,SAASC,UAAS;AAC1B,UAAM,SAASA,QAAO,GACtB,KAAK,OAAO,KAAK,YAAY,MAC7B,MAAM,oBAAoB,MAAM,KAAK,WAAW;AAAA,EACpD;AACJ;AAkDO,IAAM,aAAN,cAAyB,UAAU;AAAA,EACtC,OAAO,OAAO;AAAA,EACd,OAAO;AACX;;;AC7DA;AAAA,SAAS,aAAa,OAAO;AACzB,SAAO,OAAO,SAAU,YAAY,UAAU;AAClD;AACe,SAAR,SAA0B,OAAO;AACpC,MAAI,CAAC,aAAa,KAAK,KAAK,OAAO,UAAU,SAAS,KAAK,KAAK,MAAM;AAClE,WAAO;AAEX,MAAI,OAAO,eAAe,KAAK,MAAM;AACjC,WAAO;AAEX,MAAI,QAAQ;AACZ,SAAO,OAAO,eAAe,KAAK,MAAM;AACpC,YAAQ,OAAO,eAAe,KAAK;AAEvC,SAAO,OAAO,eAAe,KAAK,MAAM;AAC5C;;;ACfA;AAEO,IAAMC,UAAmB;;;ACFhC;AAIO,SAAS,UAAU,KAAK;AAC3B,MAAI,OAAO,OAAQ;AACf,UAAM,IAAI,WAAW,+DAA+D;AACxF,MAAM,EAAE,GAAG,SAAS,OAAO,IAAI,IAAI,MAAM,GAAG;AAC5C,MAAI,WAAW;AACX,UAAM,IAAI,WAAW,0DAA0D;AACnF,MAAI,WAAW;AACX,UAAM,IAAI,WAAW,aAAa;AACtC,MAAI,CAAC;AACD,UAAM,IAAI,WAAW,6BAA6B;AACtD,MAAI;AACJ,MAAI;AACA,cAAUC,QAAU,OAAO;AAAA,EAC/B,QACM;AACF,UAAM,IAAI,WAAW,wCAAwC;AAAA,EACjE;AACA,MAAI;AACJ,MAAI;AACA,aAAS,KAAK,MAAM,QAAQ,OAAO,OAAO,CAAC;AAAA,EAC/C,QACM;AACF,UAAM,IAAI,WAAW,6CAA6C;AAAA,EACtE;AACA,MAAI,CAAC,SAAS,MAAM;AAChB,UAAM,IAAI,WAAW,wBAAwB;AACjD,SAAO;AACX;;;AxBnBM,IAAO,oBAAP,cAAiC,gCAAe;GACzC,sBAAP,cAAmC,gCAAe;GAClD,qBAAN,cAAiC,WAAU;;AAgB3C,eAAsB,mCACpB,eACA,QACAC,QAAc;AAEd,MAAM,QAAQ,cAAc,aAEtB,CAAC,UAAU,YAAY,kBAAkB,OAAO,aAAa,IAAI,MAAM,QAAQ,IAAI;IACvF,gBAAgB,YAAY,OAAO,OAAO,QAAQ;IAClD,gBAAgB,uBAAuB,OAAO,OAAO,UAAU;IAC/D,gBAAgB,qBAAqB,OAAO,OAAO,gBAAgB;IACnEA,SAAQ,gBAAgB,SAAS,OAAO,OAAO,OAAOA,MAAK,IAAI,CAAA;IAC/D,gBAAgB,kBAAkB,OAAO,OAAO,aAAa;GAC9D;AAED,SAAO;IACL,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;;AAEP;AAKA,eAAsB,mBAAmB,cAA2B;AAClE,MAAMC,YAAW,SAAmB,GAC9B,SAAS;IACb,YAAY;IACZ,cAAc,aAAa;IAC3B,eAAe,aAAa;IAC5B,WAAWA;KAGP,SADc,MAAM,aAAa,MAAM,GACnB,SAAS,wBAAwB,EAAE,WAAU;AACvE,SAAO,mBAAmB,OAAO,aAAa,QAAQ,aAAa,KAAK;AAC1E;AASA,eAAe,+BACb,SACA,OACA,QAAgB;AAEhB,MAAM,QAAQ,cAAc,OAAO;AACnC,MAAI;AAGF,QAAM,eAFW,MAAM,gBAAgB,SAAS,OAAO,MAAM,GAEhC,KAAK,EAAG,aAC/BC,UAAS,cAAc,KAAK;AAClC,sCAA2BA,OAAM,GACjC,sBAAsB,gBAAgB,GAC/B,EAAC,aAAa,QAAAA,QAAM;EAC7B,QAAgB;AACd,QAAM,aAAa,QAAQ,QAAQ,MAAM,GAAG,EAAE,QAAQ,SAAS,CAAC,SAAS,KAAK,YAAW,CAAE;AAC3F,UAAM,IAAI,WACR,mDAAmD,UAAU,SAC7D,8CAA8C;EAElD;AACF;AAQA,eAAsB,2BAA2B,OAAa;AAC5D,SAAO,+BAA+B,YAAY,OAAO,oBAAoB,UAAU,CAAC;AAC1F;AAOA,eAAsB,4CACpB,OAAa;AAEb,SAAO,+BAA+B,kBAAkB,OAAO,oBAAoB,gBAAgB,CAAC;AACtG;AAOA,eAAsB,+CACpB,OAAa;AAEb,SAAO,+BAA+B,qBAAqB,OAAO,oBAAoB,mBAAmB,CAAC;AAC5G;AAUA,eAAsB,iCACpB,YAAkB;AAElB,MAAMD,YAAW,MAAM,SAAmB,GAQpC,cAAc,MAAM,aANX;IACb,YAAY;IACZ,aAAa;IACb,WAAWA;GAGgC;AAC7C,MAAI,YAAY,MAAK;AACnB,WAAO,IAAI,YAAY,MAAM,KAA4B;AAE3D,MAAM,gBAAgB,mBAAmB,YAAY,KAAK;AAC1D,SAAO,GAAG,aAAa;AACzB;AAEA,eAAsB,gBACpB,KACA,OACA,SAAmB,CAAA,GACnBD,QAAc;AAEd,MAAM,QAAQ,cAAc,GAAG,GAGzB,SAAS;IACb,YAAY;IACZ,sBAAsB;IACtB,oBAAoB;IACpB,WANe,MAAM,SAAmB;IAOxC,UAAU;IACV,OAAO,OAAO,KAAK,GAAG;IACtB,eAAe;IACf,GAAI,QAAQ,WAAW,EAAC,aAAa,WAAWA,MAAK,UAAU,OAAAA,OAAK;KAGlE,aAAa;AACjB,EAAI,QAAQ,WAAWA,WACrB,aAAa,GAAGA,MAAK,IAAI,KAAK;AAGhC,MAAM,SADc,MAAM,aAAa,MAAM,GACnB,SAAS,wBAAwB,EAAE,WAAU,GACjE,WAAW,sBAAsB,KAAK;AAC5C,SAAO,EAAC,CAAC,UAAU,GAAG,SAAQ;AAChC;AAUA,SAAS,yBAAyB,EAAC,OAAO,OAAAA,OAAK,GAAkC;AAC/E,MAAM,4BAA4B,yEAChCA,SAAQ,KAAKA,MAAK,KAAK,GACzB;AAEA,SAAI,UAAU,kBAGL,IAAI,kBAAiB,IAE1B,UAAU,oBAGL,IAAI,oBAAmB,IAE5B,UAAU,mBACL,IAAI,mBAAmB,2BAA2B,IAAI;IAC3D;IACA;IACA;GACD,IAGI,IAAI,WAAW,KAAK;AAC7B;AAEA,eAAe,aAAa,QAE3B;AACC,MAAM,OAAO,MAAM,aAAY,GACzBG,OAAM,IAAI,IAAI,WAAW,IAAI,cAAc;AACjD,EAAAA,KAAI,SAAS,IAAI,gBAAgB,OAAO,QAAQ,MAAM,CAAC,EAAE,SAAQ;AAEjE,MAAM,MAAM,MAAM,aAAaA,KAAI,MAAM,EAAC,QAAQ,OAAM,CAAC,GAEnD,UAAe,MAAM,IAAI,KAAI;AAEnC,SAAI,IAAI,KAAW,GAAG,OAAO,IAEtB,IAAI,EAAC,OAAO,QAAQ,OAAO,OAAO,OAAO,MAAK,CAAC;AACxD;AAEA,SAAS,mBACP,QACA,gBACA,eAAsB;AAGtB,MAAMD,UAAS,mBAAmB,OAAO,WAAgB,UAAU,OAAO,QAAQ,EAAE,MAAO;AAE3F,MAAI,CAACA;AACH,UAAM,IAAI,SAAS,iFAAiF;AAGtG,SAAO;IACL,aAAa,OAAO;IACpB,cAAc,OAAO;IACrB,WAAW,IAAI,KAAK,KAAK,IAAG,IAAK,OAAO,aAAa,GAAI;IACzD,QAAQ,OAAO,MAAM,MAAM,GAAG;IAC9B,QAAAA;IACA,OAAO;;AAEX;AAEA,SAAS,sBAAsB,QAA0B;AACvD,SAAO;IACL,aAAa,OAAO;IACpB,WAAW,IAAI,KAAK,KAAK,IAAG,IAAK,OAAO,aAAa,GAAI;IACzD,QAAQ,OAAO,MAAM,MAAM,GAAG;;AAElC;;;AX5MM,SAAU,cAAc,SAAoB;AAChD,SAAO,QAAQ,SAAS;AAC1B;AAQM,SAAU,iBAAiB,SAAoB;AACnD,SAAO,QAAQ,SAAS;AAC1B;AASA,eAAsB,wBACpB,MAAM,QAAQ,KACdE,WAAgD,CAAA,GAAE;AAElD,qBAAY,gFAAgF,GAErF,EAAC,SADO,MAAM,oBAAoB,CAAA,GAAI,KAAKA,QAAO,GAClC,OAAM;AAC/B;AAYA,eAAsB,4BACpB,SAA6B,CAAA,GAC7B,MAAM,QAAQ,KACdA,WAAgD,CAAA,GAAE;AAElD,cAAY;EACZ,YAAY,KAAK,MAAM,CAAC;CACzB;AACC,MAAM,WAAW,iBAAgB;AACjC,MAAI,UAAU;AACZ,QAAM,SAAS,MAAM,2BAA2B,QAAQ;AACxD,WAAO,EAAC,OAAO,OAAO,aAAa,QAAQ,OAAO,OAAM;EAC1D;AACA,MAAM,SAAS,MAAM,oBAAoB,EAAC,aAAa,EAAC,OAAM,EAAC,GAAG,KAAKA,QAAO;AAC9E,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,SAAS,sDAAsD;AAE3E,SAAO,EAAC,OAAO,OAAO,UAAU,QAAQ,OAAO,OAAM;AACvD;AAWA,eAAsB,oDACpBA,WAAgD,CAAA,GAChD,sBAA+C,CAAA,GAC/C,yBAAkD,CAAA,GAClD,MAAM,QAAQ,KAAG;AAEjB,cAAY;EACZ,YAAY,KAAK,mBAAmB,CAAC;CACtC;AAEC,MAAM,WAAW,iBAAgB;AACjC,MAAI,UAAU;AACZ,QAAM,oBAAoB,MAAM,4CAA4C,QAAQ,GAC9E,wBAAwB,MAAM,+CAA+C,QAAQ;AAE3F,WAAO;MACL,oBAAoB,kBAAkB;MACtC,QAAQ,kBAAkB;MAC1B,uBAAuB,sBAAsB;;EAEjD;AAEA,MAAM,SAAS,MAAM,oBACnB,EAAC,kBAAkB,EAAC,QAAQ,oBAAmB,GAAG,qBAAqB,EAAC,QAAQ,uBAAsB,EAAC,GACvG,KACAA,QAAO;AAET,MAAI,CAAC,OAAO,iBAAiB,CAAC,OAAO;AACnC,UAAM,IAAI,SAAS,iFAAiF;AAGtG,SAAO;IACL,oBAAoB,OAAO;IAC3B,QAAQ,OAAO;IACf,uBAAuB,OAAO;;AAElC;AAUA,eAAsB,8BACpB,SAAoC,CAAA,GACpC,WAA+B,QAC/BA,WAAgD,CAAA,GAAE;AAElD,MAAI,UAAU;AAEZ,QAAMC,cAAa,qBADH,EAAC,OAAO,UAAU,WAAW,GAAE,CACA,IAAI,uBAAuB;AAC1E,iCAAsBA,WAAU,GAChC,2BAA2B,cAAc,QAAQ,CAAC,GAC3C;EACT;AAEA,cAAY;EACZ,YAAY,KAAK,MAAM,CAAC;CACzB;AACC,MAAM,SAAS,MAAM,oBAAoB,EAAC,uBAAuB,EAAC,OAAM,EAAC,GAAG,QAAQ,KAAKD,QAAO;AAChG,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,SAAS,wDAAwD;AAE7E,SAAO,OAAO;AAChB;AAUA,eAAsB,yBACpBE,QACA,SAA0B,CAAA,GAC1BF,WAAgD,CAAA,GAAE;AAElD,cAAY,mHAAmH,YAAY,IACzIE,MAAK,CACN;EACD,YAAY,KAAK,MAAM,CAAC;CACzB;AACC,MAAM,SAAS,MAAM,oBAAoB,EAAC,UAAU,EAAC,QAAQ,WAAWA,OAAK,EAAC,GAAG,QAAQ,KAAK;IAC5F,GAAGF;GACJ;AACD,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,SAAS,mDAAmD;AAExE,SAAO,OAAO;AAChB;AAaA,eAAsB,0BACpBE,QACA,UACA,SAA0B,CAAA,GAC1BF,WAAgD,CAAA,GAAE;AAKlD,MAHA,YAAY;EACZ,YAAY,KAAK,MAAM,CAAC;CACzB,GACK,UAAU;AACZ,QAAM,UAAU,EAAC,OAAO,UAAU,WAAWE,OAAK,GAC5CD,cAAa,qBAAqB,OAAO,IAAI,uBAAuB;AAC1E,iCAAsBA,WAAU,GAChC,2BAA2B,cAAc,QAAQ,CAAC,GAC3C;EACT;AACA,SAAO,yBAAyBC,QAAO,QAAQF,QAAO;AACxD;AAQA,eAAsB,oCAAoC,SAAkC,CAAA,GAAE;AAC5F,cAAY;EACZ,YAAY,KAAK,MAAM,CAAC;CACzB;AACC,MAAM,SAAS,MAAM,oBAAoB,EAAC,qBAAqB,EAAC,OAAM,EAAC,GAAG,QAAQ,GAAG;AACrF,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,SAAS,+DAA+D;AAEpF,SAAO,OAAO;AAChB;AAOM,SAAU,SAAM;AACpB,SAAoB,OAAM;AAC5B;;;AoC1RA;AAoBA,eAAsB,eAAe,EACnC,gBACA,MACA,eAAc,oBAAI,KAAI,GAAG,QAAO,GAChC,aAAY,GACC;AACb,MAAI,eAAuB,eAAe;AAC1C,EAAI,gBAAgB,OAAO,UAAU,eAAe,KAAK,cAAc,uBAAuB,MAC5F,eAAgB,aAAoC,sBAAqB,KAAM,eAAe;AAGhG,MAAI,aAAa,cAAc,QAAQ;AACvC,EAAI,gBAAgB,sBAAsB,iBACxC,aAAa,aAAa,mBAG5B,MAAe,qBAAqB,OAAO;IACzC,qBAAqB;MACnB,WAAW;MACX;MACA,WAAW;;IAEb,GAEF,MAAe,kBAAkB,OAAO;IACtC,kBAAkB,4BAA2B;IAC7C,oBAAoB,eAAe;IACnC,eAAe,eAAe;IAC9B,gBAAgB;IAChB,eAAe,aAAa,SAAS,YAAY,IAAI,KAAK,SAAS,SAAS,IAAI;IAChF;AACJ;AAmBA,eAAsB,mBAAmB,QAAyB;AAChE,MAAM,aAAa,WAAU,GAEvB,cAAc,eAAe,MAAM,GACnC,iBAAiB,YAAY,OAAO,CAAC,WAAW,OAAO,WAAW,WAAW,CAAC,GAE9E,EAAC,UAAU,KAAI,IAAI,gBAAe;AAExC,SAAO;IACL,OAAO,GAAG,QAAQ,IAAI,IAAI;IAC1B,QAAQ,WAAW;IACnB,iBAAiB,WAAW;IAC5B,iCAAiC,YAAY,WAAW,eAAe;IACvE,8BAA8B,KAAK,UAAU,cAAc;IAC3D,WAAW,OAAO;IAClB,aAAa,iBAAgB,EAAG,SAAS,iBAAgB,EAAG,WAAW;IACvE,eAAe,WAAW,MAAM,WAAU,CAAE;IAC5C,WAAW,iBAAgB,EAAG;IAC9B,qBAAqB,MAAM,kBAAkB,IAAG,CAAE;IAClD,eAAe,uBAAsB;IACrC,iBAAiB,MAAM,sBAAqB;IAC5C,YAAY,MAAM,MAAK;IACvB,sBAAsB;;AAE1B;AAEA,eAAsB,4BAA4B,QAAyB;AACzE,SAAO;IACL,0BAA0B,KAAK,UAAU,eAAe,MAAM,CAAC;IAC/D,uBAAuB,KAAK,UAAU,+BAA8B,CAAE;;AAE1E;AAEA,SAAS,iCAA8B;AACrC,SAAO,OAAO,YAAY,OAAO,QAAQ,QAAQ,GAAG,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,IAAI,WAAW,UAAU,CAAC,CAAC;AACrG;AAEA,SAAS,eAAe,QAAyB;AAE/C,SADoB,CAAC,GAAG,OAAO,QAAQ,KAAI,CAAE,EAC1B,KAAI,EAAG,OAAO,CAAC,WAAW,CAAC,OAAO,WAAW,SAAS,CAAC;AAC5E;AAEA,SAAS,aAAa,MAAc,cAAiD;AACnF,MAAI,CAAC;AAAc,WAAO;AAE1B,MAAM,eAAe,aAAa,SAAS,CAAA;AAC3C,SAAO,OAAO,KAAK,YAAY,EAAE,SAAS,IAAI;AAChD;",
4
+ "sourcesContent": ["'use strict';\n\nconst os = require('os');\n\n\nfunction isValid(address, options) {\n\tif (typeof options.internal === 'boolean' && address.internal !== options.internal) {\n\t\treturn false;\n\t}\n\n\tif (options.ipVersion === 4 && address.family !== 'IPv4') {\n\t\treturn false;\n\t}\n\n\tif (options.ipVersion === 6 && address.family !== 'IPv6') {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\n\nfunction findAddresses(interfaceName, options = {}) {\n\tconst addresses = os.networkInterfaces()[interfaceName];\n\tif (!addresses) {\n\t\tthrow new Error(`Network interface \"${interfaceName}\" does not exist`);\n\t}\n\n\tconst result = [];\n\n\n\tfor (const address of addresses) {\n\t\tif (isValid(address, options)) {\n\t\t\tresult.push(address);\n\t\t}\n\t}\n\n\treturn result;\n}\n\n\n/**\n * Returns an IP address on the given interface name, filtered by the given options\n *\n * @param {string} interfaceName\n * @param {Object} [options]\n * @param {boolean} [options.internal] If given, returns only internal addresses if true, or only external if false\n * @param {integer} [options.ipVersion] If given, returns only addresses who match this IP version (4 or 6)\n * @returns {string} The first IP address found\n */\nexports.toIp = function (interfaceName, options) {\n\tconst addresses = findAddresses(interfaceName, options);\n\n\tif (addresses.length === 0) {\n\t\tthrow new Error(`No suitable IP address found on interface \"${interfaceName}\"`);\n\t}\n\n\treturn addresses[0].address;\n};\n\n\n/**\n * Returns all IP addresses on the given interface name, filtered by the given options\n *\n * @param {string} interfaceName\n * @param {Object} [options]\n * @param {boolean} [options.internal] If given, returns only internal addresses if true, or only external if false\n * @param {integer} [options.ipVersion] If given, returns only addresses who match this IP version (4 or 6)\n * @returns {string[]} All matching IP addresses\n */\nexports.toIps = function (interfaceName, options) {\n\treturn findAddresses(interfaceName, options).map((address) => address.address);\n};\n\n\n/**\n * Returns a network interface name for the given IP address, filtered by the given options\n *\n * @param {string} ip\n * @param {Object} [options]\n * @param {boolean} [options.internal] If given, only evaluates internal addresses if true, or only external if false\n * @param {integer} [options.ipVersion] If given, only evaluates addresses who match this IP version (4 or 6)\n * @returns {string} The interface name that the given IP is bound to\n */\nexports.fromIp = function (ip, options) {\n\tconst interfaces = os.networkInterfaces();\n\tconst interfaceNames = Object.keys(interfaces);\n\n\tfor (const interfaceName of interfaceNames) {\n\t\tfor (const address of interfaces[interfaceName]) {\n\t\t\tif (address.address === ip && isValid(address, options)) {\n\t\t\t\treturn interfaceName;\n\t\t\t}\n\t\t}\n\t}\n\n\tthrow new Error(`No suitable interfaces were found with IP address \"${ip}\"`);\n};\n\n\n/**\n * Returns the first network interface name that contains at least one IP address that matches the given options\n *\n * @param {Object} [options]\n * @param {boolean} [options.internal] If given, only evaluates internal addresses if true, or only external if false\n * @param {integer} [options.ipVersion] If given, only evaluates addresses who match this IP version (4 or 6)\n * @returns {string} The matching interface name\n */\nexports.getInterface = function (options) {\n\tconst interfaces = os.networkInterfaces();\n\tconst interfaceNames = Object.keys(interfaces);\n\n\tfor (const interfaceName of interfaceNames) {\n\t\tif (findAddresses(interfaceName, options).length > 0) {\n\t\t\treturn interfaceName;\n\t\t}\n\t}\n\n\tthrow new Error(`No suitable interfaces were found`);\n};\n\n\n/**\n * Returns all network interface names that contain at least one IP address that matches the given options\n *\n * @param {Object} [options]\n * @param {boolean} [options.internal] If given, only evaluates internal addresses if true, or only external if false\n * @param {integer} [options.ipVersion] If given, only evaluates addresses who match this IP version (4 or 6)\n * @returns {string[]} The matching interface names\n */\nexports.getInterfaces = function (options) {\n\tconst interfaces = os.networkInterfaces();\n\tconst interfaceNames = Object.keys(interfaces);\n\n\tconst result = [];\n\n\tfor (const interfaceName of interfaceNames) {\n\t\tif (findAddresses(interfaceName, options).length > 0) {\n\t\t\tresult.push(interfaceName);\n\t\t}\n\t}\n\n\treturn result;\n};\n", "'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn Object.propertyIsEnumerable.call(target, symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n", "var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n", "var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n", "var assignValue = require('./_assignValue'),\n castPath = require('./_castPath'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nmodule.exports = baseSet;\n", "var baseGet = require('./_baseGet'),\n baseSet = require('./_baseSet'),\n castPath = require('./_castPath');\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n}\n\nmodule.exports = basePickBy;\n", "var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n", "var arrayPush = require('./_arrayPush'),\n getPrototype = require('./_getPrototype'),\n getSymbols = require('./_getSymbols'),\n stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nmodule.exports = getSymbolsIn;\n", "/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = nativeKeysIn;\n", "var isObject = require('./isObject'),\n isPrototype = require('./_isPrototype'),\n nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeysIn;\n", "var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeysIn = require('./_baseKeysIn'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n", "var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbolsIn = require('./_getSymbolsIn'),\n keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n", "var arrayMap = require('./_arrayMap'),\n baseIteratee = require('./_baseIteratee'),\n basePickBy = require('./_basePickBy'),\n getAllKeysIn = require('./_getAllKeysIn');\n\n/**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\nfunction pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = baseIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n}\n\nmodule.exports = pickBy;\n", "var baseAssignValue = require('./_baseAssignValue'),\n baseForOwn = require('./_baseForOwn'),\n baseIteratee = require('./_baseIteratee');\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n var result = {};\n iteratee = baseIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n}\n\nmodule.exports = mapValues;\n", "var baseIsEqual = require('./_baseIsEqual');\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nmodule.exports = isEqual;\n", "/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nmodule.exports = last;\n", "var baseDifference = require('./_baseDifference'),\n baseFlatten = require('./_baseFlatten'),\n baseRest = require('./_baseRest'),\n isArrayLikeObject = require('./isArrayLikeObject'),\n last = require('./last');\n\n/**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\nvar differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n});\n\nmodule.exports = differenceWith;\n", "/**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\nfunction fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n}\n\nmodule.exports = fromPairs;\n", "var arrayMap = require('./_arrayMap');\n\n/**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\nfunction baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n}\n\nmodule.exports = baseToPairs;\n", "/**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\nfunction setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n}\n\nmodule.exports = setToPairs;\n", "var baseToPairs = require('./_baseToPairs'),\n getTag = require('./_getTag'),\n mapToArray = require('./_mapToArray'),\n setToPairs = require('./_setToPairs');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\nfunction createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n}\n\nmodule.exports = createToPairs;\n", "var createToPairs = require('./_createToPairs'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\nvar toPairs = createToPairs(keys);\n\nmodule.exports = toPairs;\n", "var baseSet = require('./_baseSet');\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n}\n\nmodule.exports = set;\n", "/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nmodule.exports = baseSlice;\n", "var baseGet = require('./_baseGet'),\n baseSlice = require('./_baseSlice');\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nmodule.exports = parent;\n", "var castPath = require('./_castPath'),\n last = require('./last'),\n parent = require('./_parent'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\nfunction baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n}\n\nmodule.exports = baseUnset;\n", "var baseUnset = require('./_baseUnset');\n\n/**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\nfunction unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n}\n\nmodule.exports = unset;\n", "var baseKeys = require('./_baseKeys'),\n getTag = require('./_getTag'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isArrayLike = require('./isArrayLike'),\n isBuffer = require('./isBuffer'),\n isPrototype = require('./_isPrototype'),\n isTypedArray = require('./isTypedArray');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nmodule.exports = isEmpty;\n", "\"use strict\";\n\nexports.load = function (received, defaults, onto = {}) {\n var k, ref, v;\n\n for (k in defaults) {\n v = defaults[k];\n onto[k] = (ref = received[k]) != null ? ref : v;\n }\n\n return onto;\n};\n\nexports.overwrite = function (received, defaults, onto = {}) {\n var k, v;\n\n for (k in received) {\n v = received[k];\n\n if (defaults[k] !== void 0) {\n onto[k] = v;\n }\n }\n\n return onto;\n};", "\"use strict\";\n\nvar DLList;\nDLList = class DLList {\n constructor(incr, decr) {\n this.incr = incr;\n this.decr = decr;\n this._first = null;\n this._last = null;\n this.length = 0;\n }\n\n push(value) {\n var node;\n this.length++;\n\n if (typeof this.incr === \"function\") {\n this.incr();\n }\n\n node = {\n value,\n prev: this._last,\n next: null\n };\n\n if (this._last != null) {\n this._last.next = node;\n this._last = node;\n } else {\n this._first = this._last = node;\n }\n\n return void 0;\n }\n\n shift() {\n var value;\n\n if (this._first == null) {\n return;\n } else {\n this.length--;\n\n if (typeof this.decr === \"function\") {\n this.decr();\n }\n }\n\n value = this._first.value;\n\n if ((this._first = this._first.next) != null) {\n this._first.prev = null;\n } else {\n this._last = null;\n }\n\n return value;\n }\n\n first() {\n if (this._first != null) {\n return this._first.value;\n }\n }\n\n getArray() {\n var node, ref, results;\n node = this._first;\n results = [];\n\n while (node != null) {\n results.push((ref = node, node = node.next, ref.value));\n }\n\n return results;\n }\n\n forEachShift(cb) {\n var node;\n node = this.shift();\n\n while (node != null) {\n cb(node), node = this.shift();\n }\n\n return void 0;\n }\n\n debug() {\n var node, ref, ref1, ref2, results;\n node = this._first;\n results = [];\n\n while (node != null) {\n results.push((ref = node, node = node.next, {\n value: ref.value,\n prev: (ref1 = ref.prev) != null ? ref1.value : void 0,\n next: (ref2 = ref.next) != null ? ref2.value : void 0\n }));\n }\n\n return results;\n }\n\n};\nmodule.exports = DLList;", "\"use strict\";\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar Events;\nEvents = class Events {\n constructor(instance) {\n this.instance = instance;\n this._events = {};\n\n if (this.instance.on != null || this.instance.once != null || this.instance.removeAllListeners != null) {\n throw new Error(\"An Emitter already exists for this object\");\n }\n\n this.instance.on = (name, cb) => {\n return this._addListener(name, \"many\", cb);\n };\n\n this.instance.once = (name, cb) => {\n return this._addListener(name, \"once\", cb);\n };\n\n this.instance.removeAllListeners = (name = null) => {\n if (name != null) {\n return delete this._events[name];\n } else {\n return this._events = {};\n }\n };\n }\n\n _addListener(name, status, cb) {\n var base;\n\n if ((base = this._events)[name] == null) {\n base[name] = [];\n }\n\n this._events[name].push({\n cb,\n status\n });\n\n return this.instance;\n }\n\n listenerCount(name) {\n if (this._events[name] != null) {\n return this._events[name].length;\n } else {\n return 0;\n }\n }\n\n trigger(name, ...args) {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n var e, promises;\n\n try {\n if (name !== \"debug\") {\n _this.trigger(\"debug\", `Event triggered: ${name}`, args);\n }\n\n if (_this._events[name] == null) {\n return;\n }\n\n _this._events[name] = _this._events[name].filter(function (listener) {\n return listener.status !== \"none\";\n });\n promises = _this._events[name].map(\n /*#__PURE__*/\n function () {\n var _ref = _asyncToGenerator(function* (listener) {\n var e, returned;\n\n if (listener.status === \"none\") {\n return;\n }\n\n if (listener.status === \"once\") {\n listener.status = \"none\";\n }\n\n try {\n returned = typeof listener.cb === \"function\" ? listener.cb(...args) : void 0;\n\n if (typeof (returned != null ? returned.then : void 0) === \"function\") {\n return yield returned;\n } else {\n return returned;\n }\n } catch (error) {\n e = error;\n\n if (\"name\" !== \"error\") {\n _this.trigger(\"error\", e);\n }\n\n return null;\n }\n });\n\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }());\n return (yield Promise.all(promises)).find(function (x) {\n return x != null;\n });\n } catch (error) {\n e = error;\n\n if (\"name\" !== \"error\") {\n _this.trigger(\"error\", e);\n }\n\n return null;\n }\n })();\n }\n\n};\nmodule.exports = Events;", "\"use strict\";\n\nvar DLList, Events, Queues;\nDLList = require(\"./DLList\");\nEvents = require(\"./Events\");\nQueues = class Queues {\n constructor(num_priorities) {\n var i;\n this.Events = new Events(this);\n this._length = 0;\n\n this._lists = function () {\n var j, ref, results;\n results = [];\n\n for (i = j = 1, ref = num_priorities; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {\n results.push(new DLList(() => {\n return this.incr();\n }, () => {\n return this.decr();\n }));\n }\n\n return results;\n }.call(this);\n }\n\n incr() {\n if (this._length++ === 0) {\n return this.Events.trigger(\"leftzero\");\n }\n }\n\n decr() {\n if (--this._length === 0) {\n return this.Events.trigger(\"zero\");\n }\n }\n\n push(job) {\n return this._lists[job.options.priority].push(job);\n }\n\n queued(priority) {\n if (priority != null) {\n return this._lists[priority].length;\n } else {\n return this._length;\n }\n }\n\n shiftAll(fn) {\n return this._lists.forEach(function (list) {\n return list.forEachShift(fn);\n });\n }\n\n getFirst(arr = this._lists) {\n var j, len, list;\n\n for (j = 0, len = arr.length; j < len; j++) {\n list = arr[j];\n\n if (list.length > 0) {\n return list;\n }\n }\n\n return [];\n }\n\n shiftLastFrom(priority) {\n return this.getFirst(this._lists.slice(priority).reverse()).shift();\n }\n\n};\nmodule.exports = Queues;", "\"use strict\";\n\nvar BottleneckError;\nBottleneckError = class BottleneckError extends Error {};\nmodule.exports = BottleneckError;", "\"use strict\";\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar BottleneckError, DEFAULT_PRIORITY, Job, NUM_PRIORITIES, parser;\nNUM_PRIORITIES = 10;\nDEFAULT_PRIORITY = 5;\nparser = require(\"./parser\");\nBottleneckError = require(\"./BottleneckError\");\nJob = class Job {\n constructor(task, args, options, jobDefaults, rejectOnDrop, Events, _states, Promise) {\n this.task = task;\n this.args = args;\n this.rejectOnDrop = rejectOnDrop;\n this.Events = Events;\n this._states = _states;\n this.Promise = Promise;\n this.options = parser.load(options, jobDefaults);\n this.options.priority = this._sanitizePriority(this.options.priority);\n\n if (this.options.id === jobDefaults.id) {\n this.options.id = `${this.options.id}-${this._randomIndex()}`;\n }\n\n this.promise = new this.Promise((_resolve, _reject) => {\n this._resolve = _resolve;\n this._reject = _reject;\n });\n this.retryCount = 0;\n }\n\n _sanitizePriority(priority) {\n var sProperty;\n sProperty = ~~priority !== priority ? DEFAULT_PRIORITY : priority;\n\n if (sProperty < 0) {\n return 0;\n } else if (sProperty > NUM_PRIORITIES - 1) {\n return NUM_PRIORITIES - 1;\n } else {\n return sProperty;\n }\n }\n\n _randomIndex() {\n return Math.random().toString(36).slice(2);\n }\n\n doDrop({\n error,\n message = \"This job has been dropped by Bottleneck\"\n } = {}) {\n if (this._states.remove(this.options.id)) {\n if (this.rejectOnDrop) {\n this._reject(error != null ? error : new BottleneckError(message));\n }\n\n this.Events.trigger(\"dropped\", {\n args: this.args,\n options: this.options,\n task: this.task,\n promise: this.promise\n });\n return true;\n } else {\n return false;\n }\n }\n\n _assertStatus(expected) {\n var status;\n status = this._states.jobStatus(this.options.id);\n\n if (!(status === expected || expected === \"DONE\" && status === null)) {\n throw new BottleneckError(`Invalid job status ${status}, expected ${expected}. Please open an issue at https://github.com/SGrondin/bottleneck/issues`);\n }\n }\n\n doReceive() {\n this._states.start(this.options.id);\n\n return this.Events.trigger(\"received\", {\n args: this.args,\n options: this.options\n });\n }\n\n doQueue(reachedHWM, blocked) {\n this._assertStatus(\"RECEIVED\");\n\n this._states.next(this.options.id);\n\n return this.Events.trigger(\"queued\", {\n args: this.args,\n options: this.options,\n reachedHWM,\n blocked\n });\n }\n\n doRun() {\n if (this.retryCount === 0) {\n this._assertStatus(\"QUEUED\");\n\n this._states.next(this.options.id);\n } else {\n this._assertStatus(\"EXECUTING\");\n }\n\n return this.Events.trigger(\"scheduled\", {\n args: this.args,\n options: this.options\n });\n }\n\n doExecute(chained, clearGlobalState, run, free) {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n var error, eventInfo, passed;\n\n if (_this.retryCount === 0) {\n _this._assertStatus(\"RUNNING\");\n\n _this._states.next(_this.options.id);\n } else {\n _this._assertStatus(\"EXECUTING\");\n }\n\n eventInfo = {\n args: _this.args,\n options: _this.options,\n retryCount: _this.retryCount\n };\n\n _this.Events.trigger(\"executing\", eventInfo);\n\n try {\n passed = yield chained != null ? chained.schedule(_this.options, _this.task, ..._this.args) : _this.task(..._this.args);\n\n if (clearGlobalState()) {\n _this.doDone(eventInfo);\n\n yield free(_this.options, eventInfo);\n\n _this._assertStatus(\"DONE\");\n\n return _this._resolve(passed);\n }\n } catch (error1) {\n error = error1;\n return _this._onFailure(error, eventInfo, clearGlobalState, run, free);\n }\n })();\n }\n\n doExpire(clearGlobalState, run, free) {\n var error, eventInfo;\n\n if (this._states.jobStatus(this.options.id === \"RUNNING\")) {\n this._states.next(this.options.id);\n }\n\n this._assertStatus(\"EXECUTING\");\n\n eventInfo = {\n args: this.args,\n options: this.options,\n retryCount: this.retryCount\n };\n error = new BottleneckError(`This job timed out after ${this.options.expiration} ms.`);\n return this._onFailure(error, eventInfo, clearGlobalState, run, free);\n }\n\n _onFailure(error, eventInfo, clearGlobalState, run, free) {\n var _this2 = this;\n\n return _asyncToGenerator(function* () {\n var retry, retryAfter;\n\n if (clearGlobalState()) {\n retry = yield _this2.Events.trigger(\"failed\", error, eventInfo);\n\n if (retry != null) {\n retryAfter = ~~retry;\n\n _this2.Events.trigger(\"retry\", `Retrying ${_this2.options.id} after ${retryAfter} ms`, eventInfo);\n\n _this2.retryCount++;\n return run(retryAfter);\n } else {\n _this2.doDone(eventInfo);\n\n yield free(_this2.options, eventInfo);\n\n _this2._assertStatus(\"DONE\");\n\n return _this2._reject(error);\n }\n }\n })();\n }\n\n doDone(eventInfo) {\n this._assertStatus(\"EXECUTING\");\n\n this._states.next(this.options.id);\n\n return this.Events.trigger(\"done\", eventInfo);\n }\n\n};\nmodule.exports = Job;", "\"use strict\";\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar BottleneckError, LocalDatastore, parser;\nparser = require(\"./parser\");\nBottleneckError = require(\"./BottleneckError\");\nLocalDatastore = class LocalDatastore {\n constructor(instance, storeOptions, storeInstanceOptions) {\n this.instance = instance;\n this.storeOptions = storeOptions;\n this.clientId = this.instance._randomIndex();\n parser.load(storeInstanceOptions, storeInstanceOptions, this);\n this._nextRequest = this._lastReservoirRefresh = this._lastReservoirIncrease = Date.now();\n this._running = 0;\n this._done = 0;\n this._unblockTime = 0;\n this.ready = this.Promise.resolve();\n this.clients = {};\n\n this._startHeartbeat();\n }\n\n _startHeartbeat() {\n var base;\n\n if (this.heartbeat == null && (this.storeOptions.reservoirRefreshInterval != null && this.storeOptions.reservoirRefreshAmount != null || this.storeOptions.reservoirIncreaseInterval != null && this.storeOptions.reservoirIncreaseAmount != null)) {\n return typeof (base = this.heartbeat = setInterval(() => {\n var amount, incr, maximum, now, reservoir;\n now = Date.now();\n\n if (this.storeOptions.reservoirRefreshInterval != null && now >= this._lastReservoirRefresh + this.storeOptions.reservoirRefreshInterval) {\n this._lastReservoirRefresh = now;\n this.storeOptions.reservoir = this.storeOptions.reservoirRefreshAmount;\n\n this.instance._drainAll(this.computeCapacity());\n }\n\n if (this.storeOptions.reservoirIncreaseInterval != null && now >= this._lastReservoirIncrease + this.storeOptions.reservoirIncreaseInterval) {\n var _this$storeOptions = this.storeOptions;\n amount = _this$storeOptions.reservoirIncreaseAmount;\n maximum = _this$storeOptions.reservoirIncreaseMaximum;\n reservoir = _this$storeOptions.reservoir;\n this._lastReservoirIncrease = now;\n incr = maximum != null ? Math.min(amount, maximum - reservoir) : amount;\n\n if (incr > 0) {\n this.storeOptions.reservoir += incr;\n return this.instance._drainAll(this.computeCapacity());\n }\n }\n }, this.heartbeatInterval)).unref === \"function\" ? base.unref() : void 0;\n } else {\n return clearInterval(this.heartbeat);\n }\n }\n\n __publish__(message) {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n yield _this.yieldLoop();\n return _this.instance.Events.trigger(\"message\", message.toString());\n })();\n }\n\n __disconnect__(flush) {\n var _this2 = this;\n\n return _asyncToGenerator(function* () {\n yield _this2.yieldLoop();\n clearInterval(_this2.heartbeat);\n return _this2.Promise.resolve();\n })();\n }\n\n yieldLoop(t = 0) {\n return new this.Promise(function (resolve, reject) {\n return setTimeout(resolve, t);\n });\n }\n\n computePenalty() {\n var ref;\n return (ref = this.storeOptions.penalty) != null ? ref : 15 * this.storeOptions.minTime || 5000;\n }\n\n __updateSettings__(options) {\n var _this3 = this;\n\n return _asyncToGenerator(function* () {\n yield _this3.yieldLoop();\n parser.overwrite(options, options, _this3.storeOptions);\n\n _this3._startHeartbeat();\n\n _this3.instance._drainAll(_this3.computeCapacity());\n\n return true;\n })();\n }\n\n __running__() {\n var _this4 = this;\n\n return _asyncToGenerator(function* () {\n yield _this4.yieldLoop();\n return _this4._running;\n })();\n }\n\n __queued__() {\n var _this5 = this;\n\n return _asyncToGenerator(function* () {\n yield _this5.yieldLoop();\n return _this5.instance.queued();\n })();\n }\n\n __done__() {\n var _this6 = this;\n\n return _asyncToGenerator(function* () {\n yield _this6.yieldLoop();\n return _this6._done;\n })();\n }\n\n __groupCheck__(time) {\n var _this7 = this;\n\n return _asyncToGenerator(function* () {\n yield _this7.yieldLoop();\n return _this7._nextRequest + _this7.timeout < time;\n })();\n }\n\n computeCapacity() {\n var maxConcurrent, reservoir;\n var _this$storeOptions2 = this.storeOptions;\n maxConcurrent = _this$storeOptions2.maxConcurrent;\n reservoir = _this$storeOptions2.reservoir;\n\n if (maxConcurrent != null && reservoir != null) {\n return Math.min(maxConcurrent - this._running, reservoir);\n } else if (maxConcurrent != null) {\n return maxConcurrent - this._running;\n } else if (reservoir != null) {\n return reservoir;\n } else {\n return null;\n }\n }\n\n conditionsCheck(weight) {\n var capacity;\n capacity = this.computeCapacity();\n return capacity == null || weight <= capacity;\n }\n\n __incrementReservoir__(incr) {\n var _this8 = this;\n\n return _asyncToGenerator(function* () {\n var reservoir;\n yield _this8.yieldLoop();\n reservoir = _this8.storeOptions.reservoir += incr;\n\n _this8.instance._drainAll(_this8.computeCapacity());\n\n return reservoir;\n })();\n }\n\n __currentReservoir__() {\n var _this9 = this;\n\n return _asyncToGenerator(function* () {\n yield _this9.yieldLoop();\n return _this9.storeOptions.reservoir;\n })();\n }\n\n isBlocked(now) {\n return this._unblockTime >= now;\n }\n\n check(weight, now) {\n return this.conditionsCheck(weight) && this._nextRequest - now <= 0;\n }\n\n __check__(weight) {\n var _this10 = this;\n\n return _asyncToGenerator(function* () {\n var now;\n yield _this10.yieldLoop();\n now = Date.now();\n return _this10.check(weight, now);\n })();\n }\n\n __register__(index, weight, expiration) {\n var _this11 = this;\n\n return _asyncToGenerator(function* () {\n var now, wait;\n yield _this11.yieldLoop();\n now = Date.now();\n\n if (_this11.conditionsCheck(weight)) {\n _this11._running += weight;\n\n if (_this11.storeOptions.reservoir != null) {\n _this11.storeOptions.reservoir -= weight;\n }\n\n wait = Math.max(_this11._nextRequest - now, 0);\n _this11._nextRequest = now + wait + _this11.storeOptions.minTime;\n return {\n success: true,\n wait,\n reservoir: _this11.storeOptions.reservoir\n };\n } else {\n return {\n success: false\n };\n }\n })();\n }\n\n strategyIsBlock() {\n return this.storeOptions.strategy === 3;\n }\n\n __submit__(queueLength, weight) {\n var _this12 = this;\n\n return _asyncToGenerator(function* () {\n var blocked, now, reachedHWM;\n yield _this12.yieldLoop();\n\n if (_this12.storeOptions.maxConcurrent != null && weight > _this12.storeOptions.maxConcurrent) {\n throw new BottleneckError(`Impossible to add a job having a weight of ${weight} to a limiter having a maxConcurrent setting of ${_this12.storeOptions.maxConcurrent}`);\n }\n\n now = Date.now();\n reachedHWM = _this12.storeOptions.highWater != null && queueLength === _this12.storeOptions.highWater && !_this12.check(weight, now);\n blocked = _this12.strategyIsBlock() && (reachedHWM || _this12.isBlocked(now));\n\n if (blocked) {\n _this12._unblockTime = now + _this12.computePenalty();\n _this12._nextRequest = _this12._unblockTime + _this12.storeOptions.minTime;\n\n _this12.instance._dropAllQueued();\n }\n\n return {\n reachedHWM,\n blocked,\n strategy: _this12.storeOptions.strategy\n };\n })();\n }\n\n __free__(index, weight) {\n var _this13 = this;\n\n return _asyncToGenerator(function* () {\n yield _this13.yieldLoop();\n _this13._running -= weight;\n _this13._done += weight;\n\n _this13.instance._drainAll(_this13.computeCapacity());\n\n return {\n running: _this13._running\n };\n })();\n }\n\n};\nmodule.exports = LocalDatastore;", "{\n \"blacklist_client.lua\": \"local blacklist = ARGV[num_static_argv + 1]\\n\\nif redis.call('zscore', client_last_seen_key, blacklist) then\\n redis.call('zadd', client_last_seen_key, 0, blacklist)\\nend\\n\\n\\nreturn {}\\n\",\n \"check.lua\": \"local weight = tonumber(ARGV[num_static_argv + 1])\\n\\nlocal capacity = process_tick(now, false)['capacity']\\nlocal nextRequest = tonumber(redis.call('hget', settings_key, 'nextRequest'))\\n\\nreturn conditions_check(capacity, weight) and nextRequest - now <= 0\\n\",\n \"conditions_check.lua\": \"local conditions_check = function (capacity, weight)\\n return capacity == nil or weight <= capacity\\nend\\n\",\n \"current_reservoir.lua\": \"return process_tick(now, false)['reservoir']\\n\",\n \"done.lua\": \"process_tick(now, false)\\n\\nreturn tonumber(redis.call('hget', settings_key, 'done'))\\n\",\n \"free.lua\": \"local index = ARGV[num_static_argv + 1]\\n\\nredis.call('zadd', job_expirations_key, 0, index)\\n\\nreturn process_tick(now, false)['running']\\n\",\n \"get_time.lua\": \"redis.replicate_commands()\\n\\nlocal get_time = function ()\\n local time = redis.call('time')\\n\\n return tonumber(time[1]..string.sub(time[2], 1, 3))\\nend\\n\",\n \"group_check.lua\": \"return not (redis.call('exists', settings_key) == 1)\\n\",\n \"heartbeat.lua\": \"process_tick(now, true)\\n\",\n \"increment_reservoir.lua\": \"local incr = tonumber(ARGV[num_static_argv + 1])\\n\\nredis.call('hincrby', settings_key, 'reservoir', incr)\\n\\nlocal reservoir = process_tick(now, true)['reservoir']\\n\\nlocal groupTimeout = tonumber(redis.call('hget', settings_key, 'groupTimeout'))\\nrefresh_expiration(0, 0, groupTimeout)\\n\\nreturn reservoir\\n\",\n \"init.lua\": \"local clear = tonumber(ARGV[num_static_argv + 1])\\nlocal limiter_version = ARGV[num_static_argv + 2]\\nlocal num_local_argv = num_static_argv + 2\\n\\nif clear == 1 then\\n redis.call('del', unpack(KEYS))\\nend\\n\\nif redis.call('exists', settings_key) == 0 then\\n -- Create\\n local args = {'hmset', settings_key}\\n\\n for i = num_local_argv + 1, #ARGV do\\n table.insert(args, ARGV[i])\\n end\\n\\n redis.call(unpack(args))\\n redis.call('hmset', settings_key,\\n 'nextRequest', now,\\n 'lastReservoirRefresh', now,\\n 'lastReservoirIncrease', now,\\n 'running', 0,\\n 'done', 0,\\n 'unblockTime', 0,\\n 'capacityPriorityCounter', 0\\n )\\n\\nelse\\n -- Apply migrations\\n local settings = redis.call('hmget', settings_key,\\n 'id',\\n 'version'\\n )\\n local id = settings[1]\\n local current_version = settings[2]\\n\\n if current_version ~= limiter_version then\\n local version_digits = {}\\n for k, v in string.gmatch(current_version, \\\"([^.]+)\\\") do\\n table.insert(version_digits, tonumber(k))\\n end\\n\\n -- 2.10.0\\n if version_digits[2] < 10 then\\n redis.call('hsetnx', settings_key, 'reservoirRefreshInterval', '')\\n redis.call('hsetnx', settings_key, 'reservoirRefreshAmount', '')\\n redis.call('hsetnx', settings_key, 'lastReservoirRefresh', '')\\n redis.call('hsetnx', settings_key, 'done', 0)\\n redis.call('hset', settings_key, 'version', '2.10.0')\\n end\\n\\n -- 2.11.1\\n if version_digits[2] < 11 or (version_digits[2] == 11 and version_digits[3] < 1) then\\n if redis.call('hstrlen', settings_key, 'lastReservoirRefresh') == 0 then\\n redis.call('hmset', settings_key,\\n 'lastReservoirRefresh', now,\\n 'version', '2.11.1'\\n )\\n end\\n end\\n\\n -- 2.14.0\\n if version_digits[2] < 14 then\\n local old_running_key = 'b_'..id..'_running'\\n local old_executing_key = 'b_'..id..'_executing'\\n\\n if redis.call('exists', old_running_key) == 1 then\\n redis.call('rename', old_running_key, job_weights_key)\\n end\\n if redis.call('exists', old_executing_key) == 1 then\\n redis.call('rename', old_executing_key, job_expirations_key)\\n end\\n redis.call('hset', settings_key, 'version', '2.14.0')\\n end\\n\\n -- 2.15.2\\n if version_digits[2] < 15 or (version_digits[2] == 15 and version_digits[3] < 2) then\\n redis.call('hsetnx', settings_key, 'capacityPriorityCounter', 0)\\n redis.call('hset', settings_key, 'version', '2.15.2')\\n end\\n\\n -- 2.17.0\\n if version_digits[2] < 17 then\\n redis.call('hsetnx', settings_key, 'clientTimeout', 10000)\\n redis.call('hset', settings_key, 'version', '2.17.0')\\n end\\n\\n -- 2.18.0\\n if version_digits[2] < 18 then\\n redis.call('hsetnx', settings_key, 'reservoirIncreaseInterval', '')\\n redis.call('hsetnx', settings_key, 'reservoirIncreaseAmount', '')\\n redis.call('hsetnx', settings_key, 'reservoirIncreaseMaximum', '')\\n redis.call('hsetnx', settings_key, 'lastReservoirIncrease', now)\\n redis.call('hset', settings_key, 'version', '2.18.0')\\n end\\n\\n end\\n\\n process_tick(now, false)\\nend\\n\\nlocal groupTimeout = tonumber(redis.call('hget', settings_key, 'groupTimeout'))\\nrefresh_expiration(0, 0, groupTimeout)\\n\\nreturn {}\\n\",\n \"process_tick.lua\": \"local process_tick = function (now, always_publish)\\n\\n local compute_capacity = function (maxConcurrent, running, reservoir)\\n if maxConcurrent ~= nil and reservoir ~= nil then\\n return math.min((maxConcurrent - running), reservoir)\\n elseif maxConcurrent ~= nil then\\n return maxConcurrent - running\\n elseif reservoir ~= nil then\\n return reservoir\\n else\\n return nil\\n end\\n end\\n\\n local settings = redis.call('hmget', settings_key,\\n 'id',\\n 'maxConcurrent',\\n 'running',\\n 'reservoir',\\n 'reservoirRefreshInterval',\\n 'reservoirRefreshAmount',\\n 'lastReservoirRefresh',\\n 'reservoirIncreaseInterval',\\n 'reservoirIncreaseAmount',\\n 'reservoirIncreaseMaximum',\\n 'lastReservoirIncrease',\\n 'capacityPriorityCounter',\\n 'clientTimeout'\\n )\\n local id = settings[1]\\n local maxConcurrent = tonumber(settings[2])\\n local running = tonumber(settings[3])\\n local reservoir = tonumber(settings[4])\\n local reservoirRefreshInterval = tonumber(settings[5])\\n local reservoirRefreshAmount = tonumber(settings[6])\\n local lastReservoirRefresh = tonumber(settings[7])\\n local reservoirIncreaseInterval = tonumber(settings[8])\\n local reservoirIncreaseAmount = tonumber(settings[9])\\n local reservoirIncreaseMaximum = tonumber(settings[10])\\n local lastReservoirIncrease = tonumber(settings[11])\\n local capacityPriorityCounter = tonumber(settings[12])\\n local clientTimeout = tonumber(settings[13])\\n\\n local initial_capacity = compute_capacity(maxConcurrent, running, reservoir)\\n\\n --\\n -- Process 'running' changes\\n --\\n local expired = redis.call('zrangebyscore', job_expirations_key, '-inf', '('..now)\\n\\n if #expired > 0 then\\n redis.call('zremrangebyscore', job_expirations_key, '-inf', '('..now)\\n\\n local flush_batch = function (batch, acc)\\n local weights = redis.call('hmget', job_weights_key, unpack(batch))\\n redis.call('hdel', job_weights_key, unpack(batch))\\n local clients = redis.call('hmget', job_clients_key, unpack(batch))\\n redis.call('hdel', job_clients_key, unpack(batch))\\n\\n -- Calculate sum of removed weights\\n for i = 1, #weights do\\n acc['total'] = acc['total'] + (tonumber(weights[i]) or 0)\\n end\\n\\n -- Calculate sum of removed weights by client\\n local client_weights = {}\\n for i = 1, #clients do\\n local removed = tonumber(weights[i]) or 0\\n if removed > 0 then\\n acc['client_weights'][clients[i]] = (acc['client_weights'][clients[i]] or 0) + removed\\n end\\n end\\n end\\n\\n local acc = {\\n ['total'] = 0,\\n ['client_weights'] = {}\\n }\\n local batch_size = 1000\\n\\n -- Compute changes to Zsets and apply changes to Hashes\\n for i = 1, #expired, batch_size do\\n local batch = {}\\n for j = i, math.min(i + batch_size - 1, #expired) do\\n table.insert(batch, expired[j])\\n end\\n\\n flush_batch(batch, acc)\\n end\\n\\n -- Apply changes to Zsets\\n if acc['total'] > 0 then\\n redis.call('hincrby', settings_key, 'done', acc['total'])\\n running = tonumber(redis.call('hincrby', settings_key, 'running', -acc['total']))\\n end\\n\\n for client, weight in pairs(acc['client_weights']) do\\n redis.call('zincrby', client_running_key, -weight, client)\\n end\\n end\\n\\n --\\n -- Process 'reservoir' changes\\n --\\n local reservoirRefreshActive = reservoirRefreshInterval ~= nil and reservoirRefreshAmount ~= nil\\n if reservoirRefreshActive and now >= lastReservoirRefresh + reservoirRefreshInterval then\\n reservoir = reservoirRefreshAmount\\n redis.call('hmset', settings_key,\\n 'reservoir', reservoir,\\n 'lastReservoirRefresh', now\\n )\\n end\\n\\n local reservoirIncreaseActive = reservoirIncreaseInterval ~= nil and reservoirIncreaseAmount ~= nil\\n if reservoirIncreaseActive and now >= lastReservoirIncrease + reservoirIncreaseInterval then\\n local num_intervals = math.floor((now - lastReservoirIncrease) / reservoirIncreaseInterval)\\n local incr = reservoirIncreaseAmount * num_intervals\\n if reservoirIncreaseMaximum ~= nil then\\n incr = math.min(incr, reservoirIncreaseMaximum - (reservoir or 0))\\n end\\n if incr > 0 then\\n reservoir = (reservoir or 0) + incr\\n end\\n redis.call('hmset', settings_key,\\n 'reservoir', reservoir,\\n 'lastReservoirIncrease', lastReservoirIncrease + (num_intervals * reservoirIncreaseInterval)\\n )\\n end\\n\\n --\\n -- Clear unresponsive clients\\n --\\n local unresponsive = redis.call('zrangebyscore', client_last_seen_key, '-inf', (now - clientTimeout))\\n local unresponsive_lookup = {}\\n local terminated_clients = {}\\n for i = 1, #unresponsive do\\n unresponsive_lookup[unresponsive[i]] = true\\n if tonumber(redis.call('zscore', client_running_key, unresponsive[i])) == 0 then\\n table.insert(terminated_clients, unresponsive[i])\\n end\\n end\\n if #terminated_clients > 0 then\\n redis.call('zrem', client_running_key, unpack(terminated_clients))\\n redis.call('hdel', client_num_queued_key, unpack(terminated_clients))\\n redis.call('zrem', client_last_registered_key, unpack(terminated_clients))\\n redis.call('zrem', client_last_seen_key, unpack(terminated_clients))\\n end\\n\\n --\\n -- Broadcast capacity changes\\n --\\n local final_capacity = compute_capacity(maxConcurrent, running, reservoir)\\n\\n if always_publish or (initial_capacity ~= nil and final_capacity == nil) then\\n -- always_publish or was not unlimited, now unlimited\\n redis.call('publish', 'b_'..id, 'capacity:'..(final_capacity or ''))\\n\\n elseif initial_capacity ~= nil and final_capacity ~= nil and final_capacity > initial_capacity then\\n -- capacity was increased\\n -- send the capacity message to the limiter having the lowest number of running jobs\\n -- the tiebreaker is the limiter having not registered a job in the longest time\\n\\n local lowest_concurrency_value = nil\\n local lowest_concurrency_clients = {}\\n local lowest_concurrency_last_registered = {}\\n local client_concurrencies = redis.call('zrange', client_running_key, 0, -1, 'withscores')\\n\\n for i = 1, #client_concurrencies, 2 do\\n local client = client_concurrencies[i]\\n local concurrency = tonumber(client_concurrencies[i+1])\\n\\n if (\\n lowest_concurrency_value == nil or lowest_concurrency_value == concurrency\\n ) and (\\n not unresponsive_lookup[client]\\n ) and (\\n tonumber(redis.call('hget', client_num_queued_key, client)) > 0\\n ) then\\n lowest_concurrency_value = concurrency\\n table.insert(lowest_concurrency_clients, client)\\n local last_registered = tonumber(redis.call('zscore', client_last_registered_key, client))\\n table.insert(lowest_concurrency_last_registered, last_registered)\\n end\\n end\\n\\n if #lowest_concurrency_clients > 0 then\\n local position = 1\\n local earliest = lowest_concurrency_last_registered[1]\\n\\n for i,v in ipairs(lowest_concurrency_last_registered) do\\n if v < earliest then\\n position = i\\n earliest = v\\n end\\n end\\n\\n local next_client = lowest_concurrency_clients[position]\\n redis.call('publish', 'b_'..id,\\n 'capacity-priority:'..(final_capacity or '')..\\n ':'..next_client..\\n ':'..capacityPriorityCounter\\n )\\n redis.call('hincrby', settings_key, 'capacityPriorityCounter', '1')\\n else\\n redis.call('publish', 'b_'..id, 'capacity:'..(final_capacity or ''))\\n end\\n end\\n\\n return {\\n ['capacity'] = final_capacity,\\n ['running'] = running,\\n ['reservoir'] = reservoir\\n }\\nend\\n\",\n \"queued.lua\": \"local clientTimeout = tonumber(redis.call('hget', settings_key, 'clientTimeout'))\\nlocal valid_clients = redis.call('zrangebyscore', client_last_seen_key, (now - clientTimeout), 'inf')\\nlocal client_queued = redis.call('hmget', client_num_queued_key, unpack(valid_clients))\\n\\nlocal sum = 0\\nfor i = 1, #client_queued do\\n sum = sum + tonumber(client_queued[i])\\nend\\n\\nreturn sum\\n\",\n \"refresh_expiration.lua\": \"local refresh_expiration = function (now, nextRequest, groupTimeout)\\n\\n if groupTimeout ~= nil then\\n local ttl = (nextRequest + groupTimeout) - now\\n\\n for i = 1, #KEYS do\\n redis.call('pexpire', KEYS[i], ttl)\\n end\\n end\\n\\nend\\n\",\n \"refs.lua\": \"local settings_key = KEYS[1]\\nlocal job_weights_key = KEYS[2]\\nlocal job_expirations_key = KEYS[3]\\nlocal job_clients_key = KEYS[4]\\nlocal client_running_key = KEYS[5]\\nlocal client_num_queued_key = KEYS[6]\\nlocal client_last_registered_key = KEYS[7]\\nlocal client_last_seen_key = KEYS[8]\\n\\nlocal now = tonumber(ARGV[1])\\nlocal client = ARGV[2]\\n\\nlocal num_static_argv = 2\\n\",\n \"register.lua\": \"local index = ARGV[num_static_argv + 1]\\nlocal weight = tonumber(ARGV[num_static_argv + 2])\\nlocal expiration = tonumber(ARGV[num_static_argv + 3])\\n\\nlocal state = process_tick(now, false)\\nlocal capacity = state['capacity']\\nlocal reservoir = state['reservoir']\\n\\nlocal settings = redis.call('hmget', settings_key,\\n 'nextRequest',\\n 'minTime',\\n 'groupTimeout'\\n)\\nlocal nextRequest = tonumber(settings[1])\\nlocal minTime = tonumber(settings[2])\\nlocal groupTimeout = tonumber(settings[3])\\n\\nif conditions_check(capacity, weight) then\\n\\n redis.call('hincrby', settings_key, 'running', weight)\\n redis.call('hset', job_weights_key, index, weight)\\n if expiration ~= nil then\\n redis.call('zadd', job_expirations_key, now + expiration, index)\\n end\\n redis.call('hset', job_clients_key, index, client)\\n redis.call('zincrby', client_running_key, weight, client)\\n redis.call('hincrby', client_num_queued_key, client, -1)\\n redis.call('zadd', client_last_registered_key, now, client)\\n\\n local wait = math.max(nextRequest - now, 0)\\n local newNextRequest = now + wait + minTime\\n\\n if reservoir == nil then\\n redis.call('hset', settings_key,\\n 'nextRequest', newNextRequest\\n )\\n else\\n reservoir = reservoir - weight\\n redis.call('hmset', settings_key,\\n 'reservoir', reservoir,\\n 'nextRequest', newNextRequest\\n )\\n end\\n\\n refresh_expiration(now, newNextRequest, groupTimeout)\\n\\n return {true, wait, reservoir}\\n\\nelse\\n return {false}\\nend\\n\",\n \"register_client.lua\": \"local queued = tonumber(ARGV[num_static_argv + 1])\\n\\n-- Could have been re-registered concurrently\\nif not redis.call('zscore', client_last_seen_key, client) then\\n redis.call('zadd', client_running_key, 0, client)\\n redis.call('hset', client_num_queued_key, client, queued)\\n redis.call('zadd', client_last_registered_key, 0, client)\\nend\\n\\nredis.call('zadd', client_last_seen_key, now, client)\\n\\nreturn {}\\n\",\n \"running.lua\": \"return process_tick(now, false)['running']\\n\",\n \"submit.lua\": \"local queueLength = tonumber(ARGV[num_static_argv + 1])\\nlocal weight = tonumber(ARGV[num_static_argv + 2])\\n\\nlocal capacity = process_tick(now, false)['capacity']\\n\\nlocal settings = redis.call('hmget', settings_key,\\n 'id',\\n 'maxConcurrent',\\n 'highWater',\\n 'nextRequest',\\n 'strategy',\\n 'unblockTime',\\n 'penalty',\\n 'minTime',\\n 'groupTimeout'\\n)\\nlocal id = settings[1]\\nlocal maxConcurrent = tonumber(settings[2])\\nlocal highWater = tonumber(settings[3])\\nlocal nextRequest = tonumber(settings[4])\\nlocal strategy = tonumber(settings[5])\\nlocal unblockTime = tonumber(settings[6])\\nlocal penalty = tonumber(settings[7])\\nlocal minTime = tonumber(settings[8])\\nlocal groupTimeout = tonumber(settings[9])\\n\\nif maxConcurrent ~= nil and weight > maxConcurrent then\\n return redis.error_reply('OVERWEIGHT:'..weight..':'..maxConcurrent)\\nend\\n\\nlocal reachedHWM = (highWater ~= nil and queueLength == highWater\\n and not (\\n conditions_check(capacity, weight)\\n and nextRequest - now <= 0\\n )\\n)\\n\\nlocal blocked = strategy == 3 and (reachedHWM or unblockTime >= now)\\n\\nif blocked then\\n local computedPenalty = penalty\\n if computedPenalty == nil then\\n if minTime == 0 then\\n computedPenalty = 5000\\n else\\n computedPenalty = 15 * minTime\\n end\\n end\\n\\n local newNextRequest = now + computedPenalty + minTime\\n\\n redis.call('hmset', settings_key,\\n 'unblockTime', now + computedPenalty,\\n 'nextRequest', newNextRequest\\n )\\n\\n local clients_queued_reset = redis.call('hkeys', client_num_queued_key)\\n local queued_reset = {}\\n for i = 1, #clients_queued_reset do\\n table.insert(queued_reset, clients_queued_reset[i])\\n table.insert(queued_reset, 0)\\n end\\n redis.call('hmset', client_num_queued_key, unpack(queued_reset))\\n\\n redis.call('publish', 'b_'..id, 'blocked:')\\n\\n refresh_expiration(now, newNextRequest, groupTimeout)\\nend\\n\\nif not blocked and not reachedHWM then\\n redis.call('hincrby', client_num_queued_key, client, 1)\\nend\\n\\nreturn {reachedHWM, blocked, strategy}\\n\",\n \"update_settings.lua\": \"local args = {'hmset', settings_key}\\n\\nfor i = num_static_argv + 1, #ARGV do\\n table.insert(args, ARGV[i])\\nend\\n\\nredis.call(unpack(args))\\n\\nprocess_tick(now, true)\\n\\nlocal groupTimeout = tonumber(redis.call('hget', settings_key, 'groupTimeout'))\\nrefresh_expiration(0, 0, groupTimeout)\\n\\nreturn {}\\n\",\n \"validate_client.lua\": \"if not redis.call('zscore', client_last_seen_key, client) then\\n return redis.error_reply('UNKNOWN_CLIENT')\\nend\\n\\nredis.call('zadd', client_last_seen_key, now, client)\\n\",\n \"validate_keys.lua\": \"if not (redis.call('exists', settings_key) == 1) then\\n return redis.error_reply('SETTINGS_KEY_NOT_FOUND')\\nend\\n\"\n}\n", "\"use strict\";\n\nvar headers, lua, templates;\nlua = require(\"./lua.json\");\nheaders = {\n refs: lua[\"refs.lua\"],\n validate_keys: lua[\"validate_keys.lua\"],\n validate_client: lua[\"validate_client.lua\"],\n refresh_expiration: lua[\"refresh_expiration.lua\"],\n process_tick: lua[\"process_tick.lua\"],\n conditions_check: lua[\"conditions_check.lua\"],\n get_time: lua[\"get_time.lua\"]\n};\n\nexports.allKeys = function (id) {\n return [\n /*\n HASH\n */\n `b_${id}_settings`,\n /*\n HASH\n job index -> weight\n */\n `b_${id}_job_weights`,\n /*\n ZSET\n job index -> expiration\n */\n `b_${id}_job_expirations`,\n /*\n HASH\n job index -> client\n */\n `b_${id}_job_clients`,\n /*\n ZSET\n client -> sum running\n */\n `b_${id}_client_running`,\n /*\n HASH\n client -> num queued\n */\n `b_${id}_client_num_queued`,\n /*\n ZSET\n client -> last job registered\n */\n `b_${id}_client_last_registered`,\n /*\n ZSET\n client -> last seen\n */\n `b_${id}_client_last_seen`];\n};\n\ntemplates = {\n init: {\n keys: exports.allKeys,\n headers: [\"process_tick\"],\n refresh_expiration: true,\n code: lua[\"init.lua\"]\n },\n group_check: {\n keys: exports.allKeys,\n headers: [],\n refresh_expiration: false,\n code: lua[\"group_check.lua\"]\n },\n register_client: {\n keys: exports.allKeys,\n headers: [\"validate_keys\"],\n refresh_expiration: false,\n code: lua[\"register_client.lua\"]\n },\n blacklist_client: {\n keys: exports.allKeys,\n headers: [\"validate_keys\", \"validate_client\"],\n refresh_expiration: false,\n code: lua[\"blacklist_client.lua\"]\n },\n heartbeat: {\n keys: exports.allKeys,\n headers: [\"validate_keys\", \"validate_client\", \"process_tick\"],\n refresh_expiration: false,\n code: lua[\"heartbeat.lua\"]\n },\n update_settings: {\n keys: exports.allKeys,\n headers: [\"validate_keys\", \"validate_client\", \"process_tick\"],\n refresh_expiration: true,\n code: lua[\"update_settings.lua\"]\n },\n running: {\n keys: exports.allKeys,\n headers: [\"validate_keys\", \"validate_client\", \"process_tick\"],\n refresh_expiration: false,\n code: lua[\"running.lua\"]\n },\n queued: {\n keys: exports.allKeys,\n headers: [\"validate_keys\", \"validate_client\"],\n refresh_expiration: false,\n code: lua[\"queued.lua\"]\n },\n done: {\n keys: exports.allKeys,\n headers: [\"validate_keys\", \"validate_client\", \"process_tick\"],\n refresh_expiration: false,\n code: lua[\"done.lua\"]\n },\n check: {\n keys: exports.allKeys,\n headers: [\"validate_keys\", \"validate_client\", \"process_tick\", \"conditions_check\"],\n refresh_expiration: false,\n code: lua[\"check.lua\"]\n },\n submit: {\n keys: exports.allKeys,\n headers: [\"validate_keys\", \"validate_client\", \"process_tick\", \"conditions_check\"],\n refresh_expiration: true,\n code: lua[\"submit.lua\"]\n },\n register: {\n keys: exports.allKeys,\n headers: [\"validate_keys\", \"validate_client\", \"process_tick\", \"conditions_check\"],\n refresh_expiration: true,\n code: lua[\"register.lua\"]\n },\n free: {\n keys: exports.allKeys,\n headers: [\"validate_keys\", \"validate_client\", \"process_tick\"],\n refresh_expiration: true,\n code: lua[\"free.lua\"]\n },\n current_reservoir: {\n keys: exports.allKeys,\n headers: [\"validate_keys\", \"validate_client\", \"process_tick\"],\n refresh_expiration: false,\n code: lua[\"current_reservoir.lua\"]\n },\n increment_reservoir: {\n keys: exports.allKeys,\n headers: [\"validate_keys\", \"validate_client\", \"process_tick\"],\n refresh_expiration: true,\n code: lua[\"increment_reservoir.lua\"]\n }\n};\nexports.names = Object.keys(templates);\n\nexports.keys = function (name, id) {\n return templates[name].keys(id);\n};\n\nexports.payload = function (name) {\n var template;\n template = templates[name];\n return Array.prototype.concat(headers.refs, template.headers.map(function (h) {\n return headers[h];\n }), template.refresh_expiration ? headers.refresh_expiration : \"\", template.code).join(\"\\n\");\n};", "\"use strict\";\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar Events, RedisConnection, Scripts, parser;\nparser = require(\"./parser\");\nEvents = require(\"./Events\");\nScripts = require(\"./Scripts\");\n\nRedisConnection = function () {\n class RedisConnection {\n constructor(options = {}) {\n parser.load(options, this.defaults, this);\n\n if (this.Redis == null) {\n this.Redis = eval(\"require\")(\"redis\"); // Obfuscated or else Webpack/Angular will try to inline the optional redis module. To override this behavior: pass the redis module to Bottleneck as the 'Redis' option.\n }\n\n if (this.Events == null) {\n this.Events = new Events(this);\n }\n\n this.terminated = false;\n\n if (this.client == null) {\n this.client = this.Redis.createClient(this.clientOptions);\n }\n\n this.subscriber = this.client.duplicate();\n this.limiters = {};\n this.shas = {};\n this.ready = this.Promise.all([this._setup(this.client, false), this._setup(this.subscriber, true)]).then(() => {\n return this._loadScripts();\n }).then(() => {\n return {\n client: this.client,\n subscriber: this.subscriber\n };\n });\n }\n\n _setup(client, sub) {\n client.setMaxListeners(0);\n return new this.Promise((resolve, reject) => {\n client.on(\"error\", e => {\n return this.Events.trigger(\"error\", e);\n });\n\n if (sub) {\n client.on(\"message\", (channel, message) => {\n var ref;\n return (ref = this.limiters[channel]) != null ? ref._store.onMessage(channel, message) : void 0;\n });\n }\n\n if (client.ready) {\n return resolve();\n } else {\n return client.once(\"ready\", resolve);\n }\n });\n }\n\n _loadScript(name) {\n return new this.Promise((resolve, reject) => {\n var payload;\n payload = Scripts.payload(name);\n return this.client.multi([[\"script\", \"load\", payload]]).exec((err, replies) => {\n if (err != null) {\n return reject(err);\n }\n\n this.shas[name] = replies[0];\n return resolve(replies[0]);\n });\n });\n }\n\n _loadScripts() {\n return this.Promise.all(Scripts.names.map(k => {\n return this._loadScript(k);\n }));\n }\n\n __runCommand__(cmd) {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n yield _this.ready;\n return new _this.Promise((resolve, reject) => {\n return _this.client.multi([cmd]).exec_atomic(function (err, replies) {\n if (err != null) {\n return reject(err);\n } else {\n return resolve(replies[0]);\n }\n });\n });\n })();\n }\n\n __addLimiter__(instance) {\n return this.Promise.all([instance.channel(), instance.channel_client()].map(channel => {\n return new this.Promise((resolve, reject) => {\n var handler;\n\n handler = chan => {\n if (chan === channel) {\n this.subscriber.removeListener(\"subscribe\", handler);\n this.limiters[channel] = instance;\n return resolve();\n }\n };\n\n this.subscriber.on(\"subscribe\", handler);\n return this.subscriber.subscribe(channel);\n });\n }));\n }\n\n __removeLimiter__(instance) {\n var _this2 = this;\n\n return this.Promise.all([instance.channel(), instance.channel_client()].map(\n /*#__PURE__*/\n function () {\n var _ref = _asyncToGenerator(function* (channel) {\n if (!_this2.terminated) {\n yield new _this2.Promise((resolve, reject) => {\n return _this2.subscriber.unsubscribe(channel, function (err, chan) {\n if (err != null) {\n return reject(err);\n }\n\n if (chan === channel) {\n return resolve();\n }\n });\n });\n }\n\n return delete _this2.limiters[channel];\n });\n\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }()));\n }\n\n __scriptArgs__(name, id, args, cb) {\n var keys;\n keys = Scripts.keys(name, id);\n return [this.shas[name], keys.length].concat(keys, args, cb);\n }\n\n __scriptFn__(name) {\n return this.client.evalsha.bind(this.client);\n }\n\n disconnect(flush = true) {\n var i, k, len, ref;\n ref = Object.keys(this.limiters);\n\n for (i = 0, len = ref.length; i < len; i++) {\n k = ref[i];\n clearInterval(this.limiters[k]._store.heartbeat);\n }\n\n this.limiters = {};\n this.terminated = true;\n this.client.end(flush);\n this.subscriber.end(flush);\n return this.Promise.resolve();\n }\n\n }\n\n ;\n RedisConnection.prototype.datastore = \"redis\";\n RedisConnection.prototype.defaults = {\n Redis: null,\n clientOptions: {},\n client: null,\n Promise: Promise,\n Events: null\n };\n return RedisConnection;\n}.call(void 0);\n\nmodule.exports = RedisConnection;", "\"use strict\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar Events, IORedisConnection, Scripts, parser;\nparser = require(\"./parser\");\nEvents = require(\"./Events\");\nScripts = require(\"./Scripts\");\n\nIORedisConnection = function () {\n class IORedisConnection {\n constructor(options = {}) {\n parser.load(options, this.defaults, this);\n\n if (this.Redis == null) {\n this.Redis = eval(\"require\")(\"ioredis\"); // Obfuscated or else Webpack/Angular will try to inline the optional ioredis module. To override this behavior: pass the ioredis module to Bottleneck as the 'Redis' option.\n }\n\n if (this.Events == null) {\n this.Events = new Events(this);\n }\n\n this.terminated = false;\n\n if (this.clusterNodes != null) {\n this.client = new this.Redis.Cluster(this.clusterNodes, this.clientOptions);\n this.subscriber = new this.Redis.Cluster(this.clusterNodes, this.clientOptions);\n } else if (this.client != null && this.client.duplicate == null) {\n this.subscriber = new this.Redis.Cluster(this.client.startupNodes, this.client.options);\n } else {\n if (this.client == null) {\n this.client = new this.Redis(this.clientOptions);\n }\n\n this.subscriber = this.client.duplicate();\n }\n\n this.limiters = {};\n this.ready = this.Promise.all([this._setup(this.client, false), this._setup(this.subscriber, true)]).then(() => {\n this._loadScripts();\n\n return {\n client: this.client,\n subscriber: this.subscriber\n };\n });\n }\n\n _setup(client, sub) {\n client.setMaxListeners(0);\n return new this.Promise((resolve, reject) => {\n client.on(\"error\", e => {\n return this.Events.trigger(\"error\", e);\n });\n\n if (sub) {\n client.on(\"message\", (channel, message) => {\n var ref;\n return (ref = this.limiters[channel]) != null ? ref._store.onMessage(channel, message) : void 0;\n });\n }\n\n if (client.status === \"ready\") {\n return resolve();\n } else {\n return client.once(\"ready\", resolve);\n }\n });\n }\n\n _loadScripts() {\n return Scripts.names.forEach(name => {\n return this.client.defineCommand(name, {\n lua: Scripts.payload(name)\n });\n });\n }\n\n __runCommand__(cmd) {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n var _, deleted;\n\n yield _this.ready;\n\n var _ref = yield _this.client.pipeline([cmd]).exec();\n\n var _ref2 = _slicedToArray(_ref, 1);\n\n var _ref2$ = _slicedToArray(_ref2[0], 2);\n\n _ = _ref2$[0];\n deleted = _ref2$[1];\n return deleted;\n })();\n }\n\n __addLimiter__(instance) {\n return this.Promise.all([instance.channel(), instance.channel_client()].map(channel => {\n return new this.Promise((resolve, reject) => {\n return this.subscriber.subscribe(channel, () => {\n this.limiters[channel] = instance;\n return resolve();\n });\n });\n }));\n }\n\n __removeLimiter__(instance) {\n var _this2 = this;\n\n return [instance.channel(), instance.channel_client()].forEach(\n /*#__PURE__*/\n function () {\n var _ref3 = _asyncToGenerator(function* (channel) {\n if (!_this2.terminated) {\n yield _this2.subscriber.unsubscribe(channel);\n }\n\n return delete _this2.limiters[channel];\n });\n\n return function (_x) {\n return _ref3.apply(this, arguments);\n };\n }());\n }\n\n __scriptArgs__(name, id, args, cb) {\n var keys;\n keys = Scripts.keys(name, id);\n return [keys.length].concat(keys, args, cb);\n }\n\n __scriptFn__(name) {\n return this.client[name].bind(this.client);\n }\n\n disconnect(flush = true) {\n var i, k, len, ref;\n ref = Object.keys(this.limiters);\n\n for (i = 0, len = ref.length; i < len; i++) {\n k = ref[i];\n clearInterval(this.limiters[k]._store.heartbeat);\n }\n\n this.limiters = {};\n this.terminated = true;\n\n if (flush) {\n return this.Promise.all([this.client.quit(), this.subscriber.quit()]);\n } else {\n this.client.disconnect();\n this.subscriber.disconnect();\n return this.Promise.resolve();\n }\n }\n\n }\n\n ;\n IORedisConnection.prototype.datastore = \"ioredis\";\n IORedisConnection.prototype.defaults = {\n Redis: null,\n clientOptions: {},\n clusterNodes: null,\n client: null,\n Promise: Promise,\n Events: null\n };\n return IORedisConnection;\n}.call(void 0);\n\nmodule.exports = IORedisConnection;", "\"use strict\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar BottleneckError, IORedisConnection, RedisConnection, RedisDatastore, parser;\nparser = require(\"./parser\");\nBottleneckError = require(\"./BottleneckError\");\nRedisConnection = require(\"./RedisConnection\");\nIORedisConnection = require(\"./IORedisConnection\");\nRedisDatastore = class RedisDatastore {\n constructor(instance, storeOptions, storeInstanceOptions) {\n this.instance = instance;\n this.storeOptions = storeOptions;\n this.originalId = this.instance.id;\n this.clientId = this.instance._randomIndex();\n parser.load(storeInstanceOptions, storeInstanceOptions, this);\n this.clients = {};\n this.capacityPriorityCounters = {};\n this.sharedConnection = this.connection != null;\n\n if (this.connection == null) {\n this.connection = this.instance.datastore === \"redis\" ? new RedisConnection({\n Redis: this.Redis,\n clientOptions: this.clientOptions,\n Promise: this.Promise,\n Events: this.instance.Events\n }) : this.instance.datastore === \"ioredis\" ? new IORedisConnection({\n Redis: this.Redis,\n clientOptions: this.clientOptions,\n clusterNodes: this.clusterNodes,\n Promise: this.Promise,\n Events: this.instance.Events\n }) : void 0;\n }\n\n this.instance.connection = this.connection;\n this.instance.datastore = this.connection.datastore;\n this.ready = this.connection.ready.then(clients => {\n this.clients = clients;\n return this.runScript(\"init\", this.prepareInitSettings(this.clearDatastore));\n }).then(() => {\n return this.connection.__addLimiter__(this.instance);\n }).then(() => {\n return this.runScript(\"register_client\", [this.instance.queued()]);\n }).then(() => {\n var base;\n\n if (typeof (base = this.heartbeat = setInterval(() => {\n return this.runScript(\"heartbeat\", []).catch(e => {\n return this.instance.Events.trigger(\"error\", e);\n });\n }, this.heartbeatInterval)).unref === \"function\") {\n base.unref();\n }\n\n return this.clients;\n });\n }\n\n __publish__(message) {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n var client;\n\n var _ref = yield _this.ready;\n\n client = _ref.client;\n return client.publish(_this.instance.channel(), `message:${message.toString()}`);\n })();\n }\n\n onMessage(channel, message) {\n var _this2 = this;\n\n return _asyncToGenerator(function* () {\n var capacity, counter, data, drained, e, newCapacity, pos, priorityClient, rawCapacity, type;\n\n try {\n pos = message.indexOf(\":\");\n var _ref2 = [message.slice(0, pos), message.slice(pos + 1)];\n type = _ref2[0];\n data = _ref2[1];\n\n if (type === \"capacity\") {\n return yield _this2.instance._drainAll(data.length > 0 ? ~~data : void 0);\n } else if (type === \"capacity-priority\") {\n var _data$split = data.split(\":\");\n\n var _data$split2 = _slicedToArray(_data$split, 3);\n\n rawCapacity = _data$split2[0];\n priorityClient = _data$split2[1];\n counter = _data$split2[2];\n capacity = rawCapacity.length > 0 ? ~~rawCapacity : void 0;\n\n if (priorityClient === _this2.clientId) {\n drained = yield _this2.instance._drainAll(capacity);\n newCapacity = capacity != null ? capacity - (drained || 0) : \"\";\n return yield _this2.clients.client.publish(_this2.instance.channel(), `capacity-priority:${newCapacity}::${counter}`);\n } else if (priorityClient === \"\") {\n clearTimeout(_this2.capacityPriorityCounters[counter]);\n delete _this2.capacityPriorityCounters[counter];\n return _this2.instance._drainAll(capacity);\n } else {\n return _this2.capacityPriorityCounters[counter] = setTimeout(\n /*#__PURE__*/\n _asyncToGenerator(function* () {\n var e;\n\n try {\n delete _this2.capacityPriorityCounters[counter];\n yield _this2.runScript(\"blacklist_client\", [priorityClient]);\n return yield _this2.instance._drainAll(capacity);\n } catch (error) {\n e = error;\n return _this2.instance.Events.trigger(\"error\", e);\n }\n }), 1000);\n }\n } else if (type === \"message\") {\n return _this2.instance.Events.trigger(\"message\", data);\n } else if (type === \"blocked\") {\n return yield _this2.instance._dropAllQueued();\n }\n } catch (error) {\n e = error;\n return _this2.instance.Events.trigger(\"error\", e);\n }\n })();\n }\n\n __disconnect__(flush) {\n clearInterval(this.heartbeat);\n\n if (this.sharedConnection) {\n return this.connection.__removeLimiter__(this.instance);\n } else {\n return this.connection.disconnect(flush);\n }\n }\n\n runScript(name, args) {\n var _this3 = this;\n\n return _asyncToGenerator(function* () {\n if (!(name === \"init\" || name === \"register_client\")) {\n yield _this3.ready;\n }\n\n return new _this3.Promise((resolve, reject) => {\n var all_args, arr;\n all_args = [Date.now(), _this3.clientId].concat(args);\n\n _this3.instance.Events.trigger(\"debug\", `Calling Redis script: ${name}.lua`, all_args);\n\n arr = _this3.connection.__scriptArgs__(name, _this3.originalId, all_args, function (err, replies) {\n if (err != null) {\n return reject(err);\n }\n\n return resolve(replies);\n });\n return _this3.connection.__scriptFn__(name)(...arr);\n }).catch(e => {\n if (e.message === \"SETTINGS_KEY_NOT_FOUND\") {\n if (name === \"heartbeat\") {\n return _this3.Promise.resolve();\n } else {\n return _this3.runScript(\"init\", _this3.prepareInitSettings(false)).then(() => {\n return _this3.runScript(name, args);\n });\n }\n } else if (e.message === \"UNKNOWN_CLIENT\") {\n return _this3.runScript(\"register_client\", [_this3.instance.queued()]).then(() => {\n return _this3.runScript(name, args);\n });\n } else {\n return _this3.Promise.reject(e);\n }\n });\n })();\n }\n\n prepareArray(arr) {\n var i, len, results, x;\n results = [];\n\n for (i = 0, len = arr.length; i < len; i++) {\n x = arr[i];\n results.push(x != null ? x.toString() : \"\");\n }\n\n return results;\n }\n\n prepareObject(obj) {\n var arr, k, v;\n arr = [];\n\n for (k in obj) {\n v = obj[k];\n arr.push(k, v != null ? v.toString() : \"\");\n }\n\n return arr;\n }\n\n prepareInitSettings(clear) {\n var args;\n args = this.prepareObject(Object.assign({}, this.storeOptions, {\n id: this.originalId,\n version: this.instance.version,\n groupTimeout: this.timeout,\n clientTimeout: this.clientTimeout\n }));\n args.unshift(clear ? 1 : 0, this.instance.version);\n return args;\n }\n\n convertBool(b) {\n return !!b;\n }\n\n __updateSettings__(options) {\n var _this4 = this;\n\n return _asyncToGenerator(function* () {\n yield _this4.runScript(\"update_settings\", _this4.prepareObject(options));\n return parser.overwrite(options, options, _this4.storeOptions);\n })();\n }\n\n __running__() {\n return this.runScript(\"running\", []);\n }\n\n __queued__() {\n return this.runScript(\"queued\", []);\n }\n\n __done__() {\n return this.runScript(\"done\", []);\n }\n\n __groupCheck__() {\n var _this5 = this;\n\n return _asyncToGenerator(function* () {\n return _this5.convertBool((yield _this5.runScript(\"group_check\", [])));\n })();\n }\n\n __incrementReservoir__(incr) {\n return this.runScript(\"increment_reservoir\", [incr]);\n }\n\n __currentReservoir__() {\n return this.runScript(\"current_reservoir\", []);\n }\n\n __check__(weight) {\n var _this6 = this;\n\n return _asyncToGenerator(function* () {\n return _this6.convertBool((yield _this6.runScript(\"check\", _this6.prepareArray([weight]))));\n })();\n }\n\n __register__(index, weight, expiration) {\n var _this7 = this;\n\n return _asyncToGenerator(function* () {\n var reservoir, success, wait;\n\n var _ref4 = yield _this7.runScript(\"register\", _this7.prepareArray([index, weight, expiration]));\n\n var _ref5 = _slicedToArray(_ref4, 3);\n\n success = _ref5[0];\n wait = _ref5[1];\n reservoir = _ref5[2];\n return {\n success: _this7.convertBool(success),\n wait,\n reservoir\n };\n })();\n }\n\n __submit__(queueLength, weight) {\n var _this8 = this;\n\n return _asyncToGenerator(function* () {\n var blocked, e, maxConcurrent, overweight, reachedHWM, strategy;\n\n try {\n var _ref6 = yield _this8.runScript(\"submit\", _this8.prepareArray([queueLength, weight]));\n\n var _ref7 = _slicedToArray(_ref6, 3);\n\n reachedHWM = _ref7[0];\n blocked = _ref7[1];\n strategy = _ref7[2];\n return {\n reachedHWM: _this8.convertBool(reachedHWM),\n blocked: _this8.convertBool(blocked),\n strategy\n };\n } catch (error) {\n e = error;\n\n if (e.message.indexOf(\"OVERWEIGHT\") === 0) {\n var _e$message$split = e.message.split(\":\");\n\n var _e$message$split2 = _slicedToArray(_e$message$split, 3);\n\n overweight = _e$message$split2[0];\n weight = _e$message$split2[1];\n maxConcurrent = _e$message$split2[2];\n throw new BottleneckError(`Impossible to add a job having a weight of ${weight} to a limiter having a maxConcurrent setting of ${maxConcurrent}`);\n } else {\n throw e;\n }\n }\n })();\n }\n\n __free__(index, weight) {\n var _this9 = this;\n\n return _asyncToGenerator(function* () {\n var running;\n running = yield _this9.runScript(\"free\", _this9.prepareArray([index]));\n return {\n running\n };\n })();\n }\n\n};\nmodule.exports = RedisDatastore;", "\"use strict\";\n\nvar BottleneckError, States;\nBottleneckError = require(\"./BottleneckError\");\nStates = class States {\n constructor(status1) {\n this.status = status1;\n this._jobs = {};\n this.counts = this.status.map(function () {\n return 0;\n });\n }\n\n next(id) {\n var current, next;\n current = this._jobs[id];\n next = current + 1;\n\n if (current != null && next < this.status.length) {\n this.counts[current]--;\n this.counts[next]++;\n return this._jobs[id]++;\n } else if (current != null) {\n this.counts[current]--;\n return delete this._jobs[id];\n }\n }\n\n start(id) {\n var initial;\n initial = 0;\n this._jobs[id] = initial;\n return this.counts[initial]++;\n }\n\n remove(id) {\n var current;\n current = this._jobs[id];\n\n if (current != null) {\n this.counts[current]--;\n delete this._jobs[id];\n }\n\n return current != null;\n }\n\n jobStatus(id) {\n var ref;\n return (ref = this.status[this._jobs[id]]) != null ? ref : null;\n }\n\n statusJobs(status) {\n var k, pos, ref, results, v;\n\n if (status != null) {\n pos = this.status.indexOf(status);\n\n if (pos < 0) {\n throw new BottleneckError(`status must be one of ${this.status.join(', ')}`);\n }\n\n ref = this._jobs;\n results = [];\n\n for (k in ref) {\n v = ref[k];\n\n if (v === pos) {\n results.push(k);\n }\n }\n\n return results;\n } else {\n return Object.keys(this._jobs);\n }\n }\n\n statusCounts() {\n return this.counts.reduce((acc, v, i) => {\n acc[this.status[i]] = v;\n return acc;\n }, {});\n }\n\n};\nmodule.exports = States;", "\"use strict\";\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar DLList, Sync;\nDLList = require(\"./DLList\");\nSync = class Sync {\n constructor(name, Promise) {\n this.schedule = this.schedule.bind(this);\n this.name = name;\n this.Promise = Promise;\n this._running = 0;\n this._queue = new DLList();\n }\n\n isEmpty() {\n return this._queue.length === 0;\n }\n\n _tryToRun() {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n var args, cb, error, reject, resolve, returned, task;\n\n if (_this._running < 1 && _this._queue.length > 0) {\n _this._running++;\n\n var _this$_queue$shift = _this._queue.shift();\n\n task = _this$_queue$shift.task;\n args = _this$_queue$shift.args;\n resolve = _this$_queue$shift.resolve;\n reject = _this$_queue$shift.reject;\n cb = yield _asyncToGenerator(function* () {\n try {\n returned = yield task(...args);\n return function () {\n return resolve(returned);\n };\n } catch (error1) {\n error = error1;\n return function () {\n return reject(error);\n };\n }\n })();\n _this._running--;\n\n _this._tryToRun();\n\n return cb();\n }\n })();\n }\n\n schedule(task, ...args) {\n var promise, reject, resolve;\n resolve = reject = null;\n promise = new this.Promise(function (_resolve, _reject) {\n resolve = _resolve;\n return reject = _reject;\n });\n\n this._queue.push({\n task,\n args,\n resolve,\n reject\n });\n\n this._tryToRun();\n\n return promise;\n }\n\n};\nmodule.exports = Sync;", "{\"version\":\"2.19.5\"}\n", "\"use strict\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar Events, Group, IORedisConnection, RedisConnection, Scripts, parser;\nparser = require(\"./parser\");\nEvents = require(\"./Events\");\nRedisConnection = require(\"./RedisConnection\");\nIORedisConnection = require(\"./IORedisConnection\");\nScripts = require(\"./Scripts\");\n\nGroup = function () {\n class Group {\n constructor(limiterOptions = {}) {\n this.deleteKey = this.deleteKey.bind(this);\n this.limiterOptions = limiterOptions;\n parser.load(this.limiterOptions, this.defaults, this);\n this.Events = new Events(this);\n this.instances = {};\n this.Bottleneck = require(\"./Bottleneck\");\n\n this._startAutoCleanup();\n\n this.sharedConnection = this.connection != null;\n\n if (this.connection == null) {\n if (this.limiterOptions.datastore === \"redis\") {\n this.connection = new RedisConnection(Object.assign({}, this.limiterOptions, {\n Events: this.Events\n }));\n } else if (this.limiterOptions.datastore === \"ioredis\") {\n this.connection = new IORedisConnection(Object.assign({}, this.limiterOptions, {\n Events: this.Events\n }));\n }\n }\n }\n\n key(key = \"\") {\n var ref;\n return (ref = this.instances[key]) != null ? ref : (() => {\n var limiter;\n limiter = this.instances[key] = new this.Bottleneck(Object.assign(this.limiterOptions, {\n id: `${this.id}-${key}`,\n timeout: this.timeout,\n connection: this.connection\n }));\n this.Events.trigger(\"created\", limiter, key);\n return limiter;\n })();\n }\n\n deleteKey(key = \"\") {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n var deleted, instance;\n instance = _this.instances[key];\n\n if (_this.connection) {\n deleted = yield _this.connection.__runCommand__(['del', ...Scripts.allKeys(`${_this.id}-${key}`)]);\n }\n\n if (instance != null) {\n delete _this.instances[key];\n yield instance.disconnect();\n }\n\n return instance != null || deleted > 0;\n })();\n }\n\n limiters() {\n var k, ref, results, v;\n ref = this.instances;\n results = [];\n\n for (k in ref) {\n v = ref[k];\n results.push({\n key: k,\n limiter: v\n });\n }\n\n return results;\n }\n\n keys() {\n return Object.keys(this.instances);\n }\n\n clusterKeys() {\n var _this2 = this;\n\n return _asyncToGenerator(function* () {\n var cursor, end, found, i, k, keys, len, next, start;\n\n if (_this2.connection == null) {\n return _this2.Promise.resolve(_this2.keys());\n }\n\n keys = [];\n cursor = null;\n start = `b_${_this2.id}-`.length;\n end = \"_settings\".length;\n\n while (cursor !== 0) {\n var _ref = yield _this2.connection.__runCommand__([\"scan\", cursor != null ? cursor : 0, \"match\", `b_${_this2.id}-*_settings`, \"count\", 10000]);\n\n var _ref2 = _slicedToArray(_ref, 2);\n\n next = _ref2[0];\n found = _ref2[1];\n cursor = ~~next;\n\n for (i = 0, len = found.length; i < len; i++) {\n k = found[i];\n keys.push(k.slice(start, -end));\n }\n }\n\n return keys;\n })();\n }\n\n _startAutoCleanup() {\n var _this3 = this;\n\n var base;\n clearInterval(this.interval);\n return typeof (base = this.interval = setInterval(\n /*#__PURE__*/\n _asyncToGenerator(function* () {\n var e, k, ref, results, time, v;\n time = Date.now();\n ref = _this3.instances;\n results = [];\n\n for (k in ref) {\n v = ref[k];\n\n try {\n if (yield v._store.__groupCheck__(time)) {\n results.push(_this3.deleteKey(k));\n } else {\n results.push(void 0);\n }\n } catch (error) {\n e = error;\n results.push(v.Events.trigger(\"error\", e));\n }\n }\n\n return results;\n }), this.timeout / 2)).unref === \"function\" ? base.unref() : void 0;\n }\n\n updateSettings(options = {}) {\n parser.overwrite(options, this.defaults, this);\n parser.overwrite(options, options, this.limiterOptions);\n\n if (options.timeout != null) {\n return this._startAutoCleanup();\n }\n }\n\n disconnect(flush = true) {\n var ref;\n\n if (!this.sharedConnection) {\n return (ref = this.connection) != null ? ref.disconnect(flush) : void 0;\n }\n }\n\n }\n\n ;\n Group.prototype.defaults = {\n timeout: 1000 * 60 * 5,\n connection: null,\n Promise: Promise,\n id: \"group-key\"\n };\n return Group;\n}.call(void 0);\n\nmodule.exports = Group;", "\"use strict\";\n\nvar Batcher, Events, parser;\nparser = require(\"./parser\");\nEvents = require(\"./Events\");\n\nBatcher = function () {\n class Batcher {\n constructor(options = {}) {\n this.options = options;\n parser.load(this.options, this.defaults, this);\n this.Events = new Events(this);\n this._arr = [];\n\n this._resetPromise();\n\n this._lastFlush = Date.now();\n }\n\n _resetPromise() {\n return this._promise = new this.Promise((res, rej) => {\n return this._resolve = res;\n });\n }\n\n _flush() {\n clearTimeout(this._timeout);\n this._lastFlush = Date.now();\n\n this._resolve();\n\n this.Events.trigger(\"batch\", this._arr);\n this._arr = [];\n return this._resetPromise();\n }\n\n add(data) {\n var ret;\n\n this._arr.push(data);\n\n ret = this._promise;\n\n if (this._arr.length === this.maxSize) {\n this._flush();\n } else if (this.maxTime != null && this._arr.length === 1) {\n this._timeout = setTimeout(() => {\n return this._flush();\n }, this.maxTime);\n }\n\n return ret;\n }\n\n }\n\n ;\n Batcher.prototype.defaults = {\n maxTime: null,\n maxSize: null,\n Promise: Promise\n };\n return Batcher;\n}.call(void 0);\n\nmodule.exports = Batcher;", "\"use strict\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nvar Bottleneck,\n DEFAULT_PRIORITY,\n Events,\n Job,\n LocalDatastore,\n NUM_PRIORITIES,\n Queues,\n RedisDatastore,\n States,\n Sync,\n parser,\n splice = [].splice;\nNUM_PRIORITIES = 10;\nDEFAULT_PRIORITY = 5;\nparser = require(\"./parser\");\nQueues = require(\"./Queues\");\nJob = require(\"./Job\");\nLocalDatastore = require(\"./LocalDatastore\");\nRedisDatastore = require(\"./RedisDatastore\");\nEvents = require(\"./Events\");\nStates = require(\"./States\");\nSync = require(\"./Sync\");\n\nBottleneck = function () {\n class Bottleneck {\n constructor(options = {}, ...invalid) {\n var storeInstanceOptions, storeOptions;\n this._addToQueue = this._addToQueue.bind(this);\n\n this._validateOptions(options, invalid);\n\n parser.load(options, this.instanceDefaults, this);\n this._queues = new Queues(NUM_PRIORITIES);\n this._scheduled = {};\n this._states = new States([\"RECEIVED\", \"QUEUED\", \"RUNNING\", \"EXECUTING\"].concat(this.trackDoneStatus ? [\"DONE\"] : []));\n this._limiter = null;\n this.Events = new Events(this);\n this._submitLock = new Sync(\"submit\", this.Promise);\n this._registerLock = new Sync(\"register\", this.Promise);\n storeOptions = parser.load(options, this.storeDefaults, {});\n\n this._store = function () {\n if (this.datastore === \"redis\" || this.datastore === \"ioredis\" || this.connection != null) {\n storeInstanceOptions = parser.load(options, this.redisStoreDefaults, {});\n return new RedisDatastore(this, storeOptions, storeInstanceOptions);\n } else if (this.datastore === \"local\") {\n storeInstanceOptions = parser.load(options, this.localStoreDefaults, {});\n return new LocalDatastore(this, storeOptions, storeInstanceOptions);\n } else {\n throw new Bottleneck.prototype.BottleneckError(`Invalid datastore type: ${this.datastore}`);\n }\n }.call(this);\n\n this._queues.on(\"leftzero\", () => {\n var ref;\n return (ref = this._store.heartbeat) != null ? typeof ref.ref === \"function\" ? ref.ref() : void 0 : void 0;\n });\n\n this._queues.on(\"zero\", () => {\n var ref;\n return (ref = this._store.heartbeat) != null ? typeof ref.unref === \"function\" ? ref.unref() : void 0 : void 0;\n });\n }\n\n _validateOptions(options, invalid) {\n if (!(options != null && typeof options === \"object\" && invalid.length === 0)) {\n throw new Bottleneck.prototype.BottleneckError(\"Bottleneck v2 takes a single object argument. Refer to https://github.com/SGrondin/bottleneck#upgrading-to-v2 if you're upgrading from Bottleneck v1.\");\n }\n }\n\n ready() {\n return this._store.ready;\n }\n\n clients() {\n return this._store.clients;\n }\n\n channel() {\n return `b_${this.id}`;\n }\n\n channel_client() {\n return `b_${this.id}_${this._store.clientId}`;\n }\n\n publish(message) {\n return this._store.__publish__(message);\n }\n\n disconnect(flush = true) {\n return this._store.__disconnect__(flush);\n }\n\n chain(_limiter) {\n this._limiter = _limiter;\n return this;\n }\n\n queued(priority) {\n return this._queues.queued(priority);\n }\n\n clusterQueued() {\n return this._store.__queued__();\n }\n\n empty() {\n return this.queued() === 0 && this._submitLock.isEmpty();\n }\n\n running() {\n return this._store.__running__();\n }\n\n done() {\n return this._store.__done__();\n }\n\n jobStatus(id) {\n return this._states.jobStatus(id);\n }\n\n jobs(status) {\n return this._states.statusJobs(status);\n }\n\n counts() {\n return this._states.statusCounts();\n }\n\n _randomIndex() {\n return Math.random().toString(36).slice(2);\n }\n\n check(weight = 1) {\n return this._store.__check__(weight);\n }\n\n _clearGlobalState(index) {\n if (this._scheduled[index] != null) {\n clearTimeout(this._scheduled[index].expiration);\n delete this._scheduled[index];\n return true;\n } else {\n return false;\n }\n }\n\n _free(index, job, options, eventInfo) {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n var e, running;\n\n try {\n var _ref = yield _this._store.__free__(index, options.weight);\n\n running = _ref.running;\n\n _this.Events.trigger(\"debug\", `Freed ${options.id}`, eventInfo);\n\n if (running === 0 && _this.empty()) {\n return _this.Events.trigger(\"idle\");\n }\n } catch (error1) {\n e = error1;\n return _this.Events.trigger(\"error\", e);\n }\n })();\n }\n\n _run(index, job, wait) {\n var clearGlobalState, free, run;\n job.doRun();\n clearGlobalState = this._clearGlobalState.bind(this, index);\n run = this._run.bind(this, index, job);\n free = this._free.bind(this, index, job);\n return this._scheduled[index] = {\n timeout: setTimeout(() => {\n return job.doExecute(this._limiter, clearGlobalState, run, free);\n }, wait),\n expiration: job.options.expiration != null ? setTimeout(function () {\n return job.doExpire(clearGlobalState, run, free);\n }, wait + job.options.expiration) : void 0,\n job: job\n };\n }\n\n _drainOne(capacity) {\n return this._registerLock.schedule(() => {\n var args, index, next, options, queue;\n\n if (this.queued() === 0) {\n return this.Promise.resolve(null);\n }\n\n queue = this._queues.getFirst();\n\n var _next2 = next = queue.first();\n\n options = _next2.options;\n args = _next2.args;\n\n if (capacity != null && options.weight > capacity) {\n return this.Promise.resolve(null);\n }\n\n this.Events.trigger(\"debug\", `Draining ${options.id}`, {\n args,\n options\n });\n index = this._randomIndex();\n return this._store.__register__(index, options.weight, options.expiration).then(({\n success,\n wait,\n reservoir\n }) => {\n var empty;\n this.Events.trigger(\"debug\", `Drained ${options.id}`, {\n success,\n args,\n options\n });\n\n if (success) {\n queue.shift();\n empty = this.empty();\n\n if (empty) {\n this.Events.trigger(\"empty\");\n }\n\n if (reservoir === 0) {\n this.Events.trigger(\"depleted\", empty);\n }\n\n this._run(index, next, wait);\n\n return this.Promise.resolve(options.weight);\n } else {\n return this.Promise.resolve(null);\n }\n });\n });\n }\n\n _drainAll(capacity, total = 0) {\n return this._drainOne(capacity).then(drained => {\n var newCapacity;\n\n if (drained != null) {\n newCapacity = capacity != null ? capacity - drained : capacity;\n return this._drainAll(newCapacity, total + drained);\n } else {\n return this.Promise.resolve(total);\n }\n }).catch(e => {\n return this.Events.trigger(\"error\", e);\n });\n }\n\n _dropAllQueued(message) {\n return this._queues.shiftAll(function (job) {\n return job.doDrop({\n message\n });\n });\n }\n\n stop(options = {}) {\n var done, waitForExecuting;\n options = parser.load(options, this.stopDefaults);\n\n waitForExecuting = at => {\n var finished;\n\n finished = () => {\n var counts;\n counts = this._states.counts;\n return counts[0] + counts[1] + counts[2] + counts[3] === at;\n };\n\n return new this.Promise((resolve, reject) => {\n if (finished()) {\n return resolve();\n } else {\n return this.on(\"done\", () => {\n if (finished()) {\n this.removeAllListeners(\"done\");\n return resolve();\n }\n });\n }\n });\n };\n\n done = options.dropWaitingJobs ? (this._run = function (index, next) {\n return next.doDrop({\n message: options.dropErrorMessage\n });\n }, this._drainOne = () => {\n return this.Promise.resolve(null);\n }, this._registerLock.schedule(() => {\n return this._submitLock.schedule(() => {\n var k, ref, v;\n ref = this._scheduled;\n\n for (k in ref) {\n v = ref[k];\n\n if (this.jobStatus(v.job.options.id) === \"RUNNING\") {\n clearTimeout(v.timeout);\n clearTimeout(v.expiration);\n v.job.doDrop({\n message: options.dropErrorMessage\n });\n }\n }\n\n this._dropAllQueued(options.dropErrorMessage);\n\n return waitForExecuting(0);\n });\n })) : this.schedule({\n priority: NUM_PRIORITIES - 1,\n weight: 0\n }, () => {\n return waitForExecuting(1);\n });\n\n this._receive = function (job) {\n return job._reject(new Bottleneck.prototype.BottleneckError(options.enqueueErrorMessage));\n };\n\n this.stop = () => {\n return this.Promise.reject(new Bottleneck.prototype.BottleneckError(\"stop() has already been called\"));\n };\n\n return done;\n }\n\n _addToQueue(job) {\n var _this2 = this;\n\n return _asyncToGenerator(function* () {\n var args, blocked, error, options, reachedHWM, shifted, strategy;\n args = job.args;\n options = job.options;\n\n try {\n var _ref2 = yield _this2._store.__submit__(_this2.queued(), options.weight);\n\n reachedHWM = _ref2.reachedHWM;\n blocked = _ref2.blocked;\n strategy = _ref2.strategy;\n } catch (error1) {\n error = error1;\n\n _this2.Events.trigger(\"debug\", `Could not queue ${options.id}`, {\n args,\n options,\n error\n });\n\n job.doDrop({\n error\n });\n return false;\n }\n\n if (blocked) {\n job.doDrop();\n return true;\n } else if (reachedHWM) {\n shifted = strategy === Bottleneck.prototype.strategy.LEAK ? _this2._queues.shiftLastFrom(options.priority) : strategy === Bottleneck.prototype.strategy.OVERFLOW_PRIORITY ? _this2._queues.shiftLastFrom(options.priority + 1) : strategy === Bottleneck.prototype.strategy.OVERFLOW ? job : void 0;\n\n if (shifted != null) {\n shifted.doDrop();\n }\n\n if (shifted == null || strategy === Bottleneck.prototype.strategy.OVERFLOW) {\n if (shifted == null) {\n job.doDrop();\n }\n\n return reachedHWM;\n }\n }\n\n job.doQueue(reachedHWM, blocked);\n\n _this2._queues.push(job);\n\n yield _this2._drainAll();\n return reachedHWM;\n })();\n }\n\n _receive(job) {\n if (this._states.jobStatus(job.options.id) != null) {\n job._reject(new Bottleneck.prototype.BottleneckError(`A job with the same id already exists (id=${job.options.id})`));\n\n return false;\n } else {\n job.doReceive();\n return this._submitLock.schedule(this._addToQueue, job);\n }\n }\n\n submit(...args) {\n var cb, fn, job, options, ref, ref1, task;\n\n if (typeof args[0] === \"function\") {\n var _ref3, _ref4, _splice$call, _splice$call2;\n\n ref = args, (_ref3 = ref, _ref4 = _toArray(_ref3), fn = _ref4[0], args = _ref4.slice(1), _ref3), (_splice$call = splice.call(args, -1), _splice$call2 = _slicedToArray(_splice$call, 1), cb = _splice$call2[0], _splice$call);\n options = parser.load({}, this.jobDefaults);\n } else {\n var _ref5, _ref6, _splice$call3, _splice$call4;\n\n ref1 = args, (_ref5 = ref1, _ref6 = _toArray(_ref5), options = _ref6[0], fn = _ref6[1], args = _ref6.slice(2), _ref5), (_splice$call3 = splice.call(args, -1), _splice$call4 = _slicedToArray(_splice$call3, 1), cb = _splice$call4[0], _splice$call3);\n options = parser.load(options, this.jobDefaults);\n }\n\n task = (...args) => {\n return new this.Promise(function (resolve, reject) {\n return fn(...args, function (...args) {\n return (args[0] != null ? reject : resolve)(args);\n });\n });\n };\n\n job = new Job(task, args, options, this.jobDefaults, this.rejectOnDrop, this.Events, this._states, this.Promise);\n job.promise.then(function (args) {\n return typeof cb === \"function\" ? cb(...args) : void 0;\n }).catch(function (args) {\n if (Array.isArray(args)) {\n return typeof cb === \"function\" ? cb(...args) : void 0;\n } else {\n return typeof cb === \"function\" ? cb(args) : void 0;\n }\n });\n return this._receive(job);\n }\n\n schedule(...args) {\n var job, options, task;\n\n if (typeof args[0] === \"function\") {\n var _args = args;\n\n var _args2 = _toArray(_args);\n\n task = _args2[0];\n args = _args2.slice(1);\n options = {};\n } else {\n var _args3 = args;\n\n var _args4 = _toArray(_args3);\n\n options = _args4[0];\n task = _args4[1];\n args = _args4.slice(2);\n }\n\n job = new Job(task, args, options, this.jobDefaults, this.rejectOnDrop, this.Events, this._states, this.Promise);\n\n this._receive(job);\n\n return job.promise;\n }\n\n wrap(fn) {\n var schedule, wrapped;\n schedule = this.schedule.bind(this);\n\n wrapped = function wrapped(...args) {\n return schedule(fn.bind(this), ...args);\n };\n\n wrapped.withOptions = function (options, ...args) {\n return schedule(options, fn, ...args);\n };\n\n return wrapped;\n }\n\n updateSettings(options = {}) {\n var _this3 = this;\n\n return _asyncToGenerator(function* () {\n yield _this3._store.__updateSettings__(parser.overwrite(options, _this3.storeDefaults));\n parser.overwrite(options, _this3.instanceDefaults, _this3);\n return _this3;\n })();\n }\n\n currentReservoir() {\n return this._store.__currentReservoir__();\n }\n\n incrementReservoir(incr = 0) {\n return this._store.__incrementReservoir__(incr);\n }\n\n }\n\n ;\n Bottleneck.default = Bottleneck;\n Bottleneck.Events = Events;\n Bottleneck.version = Bottleneck.prototype.version = require(\"./version.json\").version;\n Bottleneck.strategy = Bottleneck.prototype.strategy = {\n LEAK: 1,\n OVERFLOW: 2,\n OVERFLOW_PRIORITY: 4,\n BLOCK: 3\n };\n Bottleneck.BottleneckError = Bottleneck.prototype.BottleneckError = require(\"./BottleneckError\");\n Bottleneck.Group = Bottleneck.prototype.Group = require(\"./Group\");\n Bottleneck.RedisConnection = Bottleneck.prototype.RedisConnection = require(\"./RedisConnection\");\n Bottleneck.IORedisConnection = Bottleneck.prototype.IORedisConnection = require(\"./IORedisConnection\");\n Bottleneck.Batcher = Bottleneck.prototype.Batcher = require(\"./Batcher\");\n Bottleneck.prototype.jobDefaults = {\n priority: DEFAULT_PRIORITY,\n weight: 1,\n expiration: null,\n id: \"<no-id>\"\n };\n Bottleneck.prototype.storeDefaults = {\n maxConcurrent: null,\n minTime: 0,\n highWater: null,\n strategy: Bottleneck.prototype.strategy.LEAK,\n penalty: null,\n reservoir: null,\n reservoirRefreshInterval: null,\n reservoirRefreshAmount: null,\n reservoirIncreaseInterval: null,\n reservoirIncreaseAmount: null,\n reservoirIncreaseMaximum: null\n };\n Bottleneck.prototype.localStoreDefaults = {\n Promise: Promise,\n timeout: null,\n heartbeatInterval: 250\n };\n Bottleneck.prototype.redisStoreDefaults = {\n Promise: Promise,\n timeout: null,\n heartbeatInterval: 5000,\n clientTimeout: 10000,\n Redis: null,\n clientOptions: {},\n clusterNodes: null,\n clearDatastore: false,\n connection: null\n };\n Bottleneck.prototype.instanceDefaults = {\n datastore: \"local\",\n connection: null,\n id: \"<no-id>\",\n rejectOnDrop: true,\n trackDoneStatus: false,\n Promise: Promise\n };\n Bottleneck.prototype.stopDefaults = {\n enqueueErrorMessage: \"This limiter has been stopped and cannot accept new jobs.\",\n dropWaitingJobs: true,\n dropErrorMessage: \"This limiter has been stopped.\"\n };\n return Bottleneck;\n}.call(void 0);\n\nmodule.exports = Bottleneck;", "\"use strict\";\n\nmodule.exports = require(\"./Bottleneck\");", "import {environmentVariables} from '../constants.js'\n\n/**\n * Enum that represents the environment to use for a given service.\n *\n * @readonly\n */\nexport enum Environment {\n Local = 'local',\n Production = 'production',\n}\n\n/**\n * Returns the environment to use for a given service.\n *\n * @param env - Environment variables.\n * @returns The environment to use for a given service.\n */\nexport function serviceEnvironment(env = process.env): Environment {\n const value = env[environmentVariables.serviceEnv]\n if (value === 'local') {\n return Environment.Local\n } else {\n return Environment.Production\n }\n}\n\n/**\n * Returns true if the environment is local.\n *\n * @param env - Environment variables.\n * @returns True if the environment is local.\n */\nexport function isLocalEnvironment(env = process.env): boolean {\n return serviceEnvironment(env) === Environment.Local\n}\n", "import {BugError} from './error.js'\nimport {getPartnersToken} from './environment.js'\nimport {nonRandomUUID} from './crypto.js'\nimport * as sessionStore from '../../private/node/session/store.js'\nimport {\n exchangeCustomPartnerToken,\n exchangeCliTokenForAppManagementAccessToken,\n exchangeCliTokenForBusinessPlatformAccessToken,\n} from '../../private/node/session/exchange.js'\nimport {outputContent, outputToken, outputDebug} from '../../public/node/output.js'\nimport {\n AdminAPIScope,\n AppManagementAPIScope,\n BusinessPlatformScope,\n EnsureAuthenticatedAdditionalOptions,\n PartnersAPIScope,\n StorefrontRendererScope,\n ensureAuthenticated,\n setLastSeenAuthMethod,\n setLastSeenUserIdAfterAuth,\n} from '../../private/node/session.js'\nimport {isThemeAccessSession} from '../../private/node/api/rest.js'\n\n/**\n * Session Object to access the Admin API, includes the token and the store FQDN.\n */\nexport interface AdminSession {\n token: string\n storeFqdn: string\n}\n\n/**\n * Session Object for Partners API and App Management API access.\n */\nexport interface Session {\n token: string\n businessPlatformToken: string\n accountInfo: AccountInfo\n userId: string\n}\n\nexport type AccountInfo = UserAccountInfo | ServiceAccountInfo | UnknownAccountInfo\n\ninterface UserAccountInfo {\n type: 'UserAccount'\n email: string\n}\n\ninterface ServiceAccountInfo {\n type: 'ServiceAccount'\n orgName: string\n}\n\ninterface UnknownAccountInfo {\n type: 'UnknownAccount'\n}\n\n/**\n * Type guard to check if an account is a UserAccount.\n *\n * @param account - The account to check.\n * @returns True if the account is a UserAccount.\n */\nexport function isUserAccount(account: AccountInfo): account is UserAccountInfo {\n return account.type === 'UserAccount'\n}\n\n/**\n * Type guard to check if an account is a ServiceAccount.\n *\n * @param account - The account to check.\n * @returns True if the account is a ServiceAccount.\n */\nexport function isServiceAccount(account: AccountInfo): account is ServiceAccountInfo {\n return account.type === 'ServiceAccount'\n}\n\n/**\n * Ensure that we have a valid session with no particular scopes.\n *\n * @param env - Optional environment variables to use.\n * @param options - Optional extra options to use.\n * @returns The user ID.\n */\nexport async function ensureAuthenticatedUser(\n env = process.env,\n options: EnsureAuthenticatedAdditionalOptions = {},\n): Promise<{userId: string}> {\n outputDebug(outputContent`Ensuring that the user is authenticated with no particular scopes`)\n const tokens = await ensureAuthenticated({}, env, options)\n return {userId: tokens.userId}\n}\n\n/**\n * Ensure that we have a valid session to access the Partners API.\n * If SHOPIFY_CLI_PARTNERS_TOKEN exists, that token will be used to obtain a valid Partners Token\n * If SHOPIFY_CLI_PARTNERS_TOKEN exists, scopes will be ignored.\n *\n * @param scopes - Optional array of extra scopes to authenticate with.\n * @param env - Optional environment variables to use.\n * @param options - Optional extra options to use.\n * @returns The access token for the Partners API.\n */\nexport async function ensureAuthenticatedPartners(\n scopes: PartnersAPIScope[] = [],\n env = process.env,\n options: EnsureAuthenticatedAdditionalOptions = {},\n): Promise<{token: string; userId: string}> {\n outputDebug(outputContent`Ensuring that the user is authenticated with the Partners API with the following scopes:\n${outputToken.json(scopes)}\n`)\n const envToken = getPartnersToken()\n if (envToken) {\n const result = await exchangeCustomPartnerToken(envToken)\n return {token: result.accessToken, userId: result.userId}\n }\n const tokens = await ensureAuthenticated({partnersApi: {scopes}}, env, options)\n if (!tokens.partners) {\n throw new BugError('No partners token found after ensuring authenticated')\n }\n return {token: tokens.partners, userId: tokens.userId}\n}\n\n/**\n * Ensure that we have a valid session to access the App Management API.\n *\n * @param options - Optional extra options to use.\n * @param appManagementScopes - Optional array of extra scopes to authenticate with.\n * @param businessPlatformScopes - Optional array of extra scopes to authenticate with.\n * @param env - Optional environment variables to use.\n * @returns The access token for the App Management API.\n */\nexport async function ensureAuthenticatedAppManagementAndBusinessPlatform(\n options: EnsureAuthenticatedAdditionalOptions = {},\n appManagementScopes: AppManagementAPIScope[] = [],\n businessPlatformScopes: BusinessPlatformScope[] = [],\n env = process.env,\n): Promise<{appManagementToken: string; userId: string; businessPlatformToken: string}> {\n outputDebug(outputContent`Ensuring that the user is authenticated with the App Management API with the following scopes:\n${outputToken.json(appManagementScopes)}\n`)\n\n const envToken = getPartnersToken()\n if (envToken) {\n const appManagmentToken = await exchangeCliTokenForAppManagementAccessToken(envToken)\n const businessPlatformToken = await exchangeCliTokenForBusinessPlatformAccessToken(envToken)\n\n return {\n appManagementToken: appManagmentToken.accessToken,\n userId: appManagmentToken.userId,\n businessPlatformToken: businessPlatformToken.accessToken,\n }\n }\n\n const tokens = await ensureAuthenticated(\n {appManagementApi: {scopes: appManagementScopes}, businessPlatformApi: {scopes: businessPlatformScopes}},\n env,\n options,\n )\n if (!tokens.appManagement || !tokens.businessPlatform) {\n throw new BugError('No App Management or Business Platform token found after ensuring authenticated')\n }\n\n return {\n appManagementToken: tokens.appManagement,\n userId: tokens.userId,\n businessPlatformToken: tokens.businessPlatform,\n }\n}\n\n/**\n * Ensure that we have a valid session to access the Storefront API.\n *\n * @param scopes - Optional array of extra scopes to authenticate with.\n * @param password - Optional password to use.\n * @param options - Optional extra options to use.\n * @returns The access token for the Storefront API.\n */\nexport async function ensureAuthenticatedStorefront(\n scopes: StorefrontRendererScope[] = [],\n password: string | undefined = undefined,\n options: EnsureAuthenticatedAdditionalOptions = {},\n): Promise<string> {\n if (password) {\n const session = {token: password, storeFqdn: ''}\n const authMethod = isThemeAccessSession(session) ? 'theme_access_token' : 'custom_app_token'\n setLastSeenAuthMethod(authMethod)\n setLastSeenUserIdAfterAuth(nonRandomUUID(password))\n return password\n }\n\n outputDebug(outputContent`Ensuring that the user is authenticated with the Storefront API with the following scopes:\n${outputToken.json(scopes)}\n`)\n const tokens = await ensureAuthenticated({storefrontRendererApi: {scopes}}, process.env, options)\n if (!tokens.storefront) {\n throw new BugError('No storefront token found after ensuring authenticated')\n }\n return tokens.storefront\n}\n\n/**\n * Ensure that we have a valid Admin session for the given store.\n *\n * @param store - Store fqdn to request auth for.\n * @param scopes - Optional array of extra scopes to authenticate with.\n * @param options - Optional extra options to use.\n * @returns The access token for the Admin API.\n */\nexport async function ensureAuthenticatedAdmin(\n store: string,\n scopes: AdminAPIScope[] = [],\n options: EnsureAuthenticatedAdditionalOptions = {},\n): Promise<AdminSession> {\n outputDebug(outputContent`Ensuring that the user is authenticated with the Admin API with the following scopes for the store ${outputToken.raw(\n store,\n )}:\n${outputToken.json(scopes)}\n`)\n const tokens = await ensureAuthenticated({adminApi: {scopes, storeFqdn: store}}, process.env, {\n ...options,\n })\n if (!tokens.admin) {\n throw new BugError('No admin token found after ensuring authenticated')\n }\n return tokens.admin\n}\n\n/**\n * Ensure that we have a valid session to access the Theme API.\n * If a password is provided, that token will be used against Theme Access API.\n * Otherwise, it will ensure that the user is authenticated with the Admin API.\n *\n * @param store - Store fqdn to request auth for.\n * @param password - Password generated from Theme Access app.\n * @param scopes - Optional array of extra scopes to authenticate with.\n * @param options - Optional extra options to use.\n * @returns The access token and store.\n */\nexport async function ensureAuthenticatedThemes(\n store: string,\n password: string | undefined,\n scopes: AdminAPIScope[] = [],\n options: EnsureAuthenticatedAdditionalOptions = {},\n): Promise<AdminSession> {\n outputDebug(outputContent`Ensuring that the user is authenticated with the Theme API with the following scopes:\n${outputToken.json(scopes)}\n`)\n if (password) {\n const session = {token: password, storeFqdn: store}\n const authMethod = isThemeAccessSession(session) ? 'theme_access_token' : 'custom_app_token'\n setLastSeenAuthMethod(authMethod)\n setLastSeenUserIdAfterAuth(nonRandomUUID(password))\n return session\n }\n return ensureAuthenticatedAdmin(store, scopes, options)\n}\n\n/**\n * Ensure that we have a valid session to access the Business Platform API.\n *\n * @param scopes - Optional array of extra scopes to authenticate with.\n * @returns The access token for the Business Platform API.\n */\nexport async function ensureAuthenticatedBusinessPlatform(scopes: BusinessPlatformScope[] = []): Promise<string> {\n outputDebug(outputContent`Ensuring that the user is authenticated with the Business Platform API with the following scopes:\n${outputToken.json(scopes)}\n`)\n const tokens = await ensureAuthenticated({businessPlatformApi: {scopes}}, process.env)\n if (!tokens.businessPlatform) {\n throw new BugError('No business-platform token found after ensuring authenticated')\n }\n return tokens.businessPlatform\n}\n\n/**\n * Logout from Shopify.\n *\n * @returns A promise that resolves when the logout is complete.\n */\nexport function logout(): Promise<void> {\n return sessionStore.remove()\n}\n", "import {SessionsSchema} from './schema.js'\nimport {getSessions, removeCurrentSessionId, removeSessions, setSessions} from '../conf-store.js'\nimport {identityFqdn} from '../../../public/node/context/fqdn.js'\nimport type {Sessions} from './schema.js'\n\n/**\n * Serializes the session as a JSON and stores it in the system.\n * @param session - the session to store.\n */\nexport async function store(sessions: Sessions) {\n const jsonSessions = JSON.stringify(sessions)\n setSessions(jsonSessions)\n}\n\n/**\n * Fetches the sessions from the local storage and returns it.\n * If the format of the object is invalid, the method will discard it.\n * @returns Returns a promise that resolves with the sessions object if it exists and is valid.\n */\nexport async function fetch(): Promise<Sessions | undefined> {\n const content = getSessions()\n\n if (!content) {\n return undefined\n }\n const contentJson = JSON.parse(content)\n const parsedSessions = await SessionsSchema.safeParseAsync(contentJson)\n if (parsedSessions.success) {\n return parsedSessions.data\n } else {\n await remove()\n return undefined\n }\n}\n\n/**\n * Removes a session from the system.\n */\nexport async function remove() {\n removeSessions()\n removeCurrentSessionId()\n}\n\n/**\n * Gets the session alias for a given user ID.\n *\n * @param userId - The user ID of the session to get the alias for.\n * @returns The alias for the session if it exists, otherwise undefined.\n */\nexport async function getSessionAlias(userId: string): Promise<string | undefined> {\n const sessions = await fetch()\n if (!sessions) return undefined\n\n const fqdn = await identityFqdn()\n if (!sessions[fqdn] || !sessions[fqdn][userId]) return undefined\n return sessions[fqdn][userId].identity.alias\n}\n\n/**\n * Finds a session by its alias.\n *\n * @param alias - The alias to search for\n * @returns The user ID if found, otherwise undefined\n */\nexport async function findSessionByAlias(alias: string): Promise<string | undefined> {\n const sessions = await fetch()\n if (!sessions) return undefined\n\n const fqdn = await identityFqdn()\n const fqdnSessions = sessions[fqdn]\n if (!fqdnSessions) return undefined\n\n for (const [userId, session] of Object.entries(fqdnSessions)) {\n if (session.identity.alias === alias) {\n return userId\n }\n }\n\n return undefined\n}\n", "import {zod} from '../../../public/node/schema.js'\n\nconst DateSchema = zod.preprocess((arg) => {\n if (typeof arg === 'string' || arg instanceof Date) return new Date(arg)\n return null\n}, zod.date())\n\n/**\n * The schema represents an Identity token.\n */\nconst IdentityTokenSchema = zod.object({\n accessToken: zod.string(),\n refreshToken: zod.string(),\n expiresAt: DateSchema,\n scopes: zod.array(zod.string()),\n userId: zod.string(),\n alias: zod.string().optional(),\n})\n\n/**\n * The schema represents an application token.\n */\nconst ApplicationTokenSchema = zod.object({\n accessToken: zod.string(),\n expiresAt: DateSchema,\n scopes: zod.array(zod.string()),\n storeFqdn: zod.string().optional(),\n})\n\nconst SessionSchema = zod.object({\n identity: IdentityTokenSchema,\n applications: zod.object({}).catchall(ApplicationTokenSchema),\n})\n\n/**\n * This schema represents the format of the session\n * that we cache in the system to avoid unnecessary\n * token exchanges.\n *\n * @example\n * ```\n * {\n * \"accounts.shopify.com\": {\n * \"user-123\": {\n * \"identity\": { ... }, // IdentityTokenSchema\n * \"applications\": {\n * \"mystore.myshopify.com-admin\": { // ApplicationTokenSchema\n * \"accessToken\": \"...\",\n * \"expiresAt\": \"...\",\n * \"scopes\": [\"...\"],\n * },\n * \"partners\": { ... },\n * }\n * },\n * \"8765-4321\": { ... }\n * },\n * \"identity.spin.com\": {\n * \"user-345\": { ... }\n * }\n * }\n * ```\n */\nexport const SessionsSchema = zod.object({}).catchall(zod.object({}).catchall(SessionSchema))\n\nexport type Sessions = zod.infer<typeof SessionsSchema>\nexport type Session = zod.infer<typeof SessionSchema>\nexport type IdentityToken = zod.infer<typeof IdentityTokenSchema>\nexport type ApplicationToken = zod.infer<typeof ApplicationTokenSchema>\n\n/**\n * Confirms that a given identity token structure matches what the schema currently defines.\n *\n * A full re-auth is the expectation if this validation fails.\n */\nexport function validateCachedIdentityTokenStructure(identityToken: unknown) {\n const parsed = IdentityTokenSchema.safeParse(identityToken)\n return parsed.success\n}\n", "import {AbortError, BugError} from '../error.js'\nimport {serviceEnvironment} from '../../../private/node/context/service.js'\nimport {DevServer, DevServerCore} from '../vendor/dev_server/index.js'\nimport {blockPartnersAccess} from '../environment.js'\n\nexport const NotProvidedStoreFQDNError = new AbortError(\n \"Couldn't obtain the Shopify FQDN because the store FQDN was not provided.\",\n)\n\n/**\n * It returns the Partners' API service we should interact with.\n *\n * @returns Fully-qualified domain of the partners service we should interact with.\n */\nexport async function partnersFqdn(): Promise<string> {\n if (blockPartnersAccess()) {\n throw new BugError('Partners API is blocked by the SHOPIFY_CLI_NEVER_USE_PARTNERS_API environment variable.')\n }\n const environment = serviceEnvironment()\n const productionFqdn = 'partners.shopify.com'\n switch (environment) {\n case 'local':\n return new DevServer('partners').host()\n default:\n return productionFqdn\n }\n}\n\n/**\n * It returns the Admin service we should interact with.\n *\n * @returns Fully-qualified domain of the Admin service we should interact with.\n */\nexport async function adminFqdn(): Promise<string> {\n const environment = serviceEnvironment()\n const productionFqdn = 'admin.shopify.com'\n switch (environment) {\n case 'local':\n return new DevServerCore().host('admin')\n default:\n return productionFqdn\n }\n}\n\n/**\n * It returns the App Management API service we should interact with.\n *\n * @returns Fully-qualified domain of the App Management service we should interact with.\n */\nexport async function appManagementFqdn(): Promise<string> {\n const environment = serviceEnvironment()\n const productionFqdn = 'app.shopify.com'\n switch (environment) {\n case 'local':\n return new DevServerCore().host('app')\n default:\n return productionFqdn\n }\n}\n\n/**\n * It returns the App Dev API service we should interact with.\n *\n * @param storeFqdn - The store FQDN.\n * @returns Fully-qualified domain of the App Dev service we should interact with.\n */\nexport async function appDevFqdn(storeFqdn: string): Promise<string> {\n const environment = serviceEnvironment()\n switch (environment) {\n case 'local':\n return new DevServerCore().host('app')\n default:\n return storeFqdn\n }\n}\n/**\n * It returns the Developer Dashboard domain we should interact with.\n *\n * @returns Fully-qualified domain of the Developer Dashboard we should interact with.\n */\nexport async function developerDashboardFqdn(): Promise<string> {\n const environment = serviceEnvironment()\n const productionFqdn = 'dev.shopify.com'\n switch (environment) {\n case 'local':\n return new DevServerCore().host('dev')\n default:\n return productionFqdn\n }\n}\n\n/**\n * It returns the BusinessPlatform' API service we should interact with.\n *\n * @returns Fully-qualified domain of the partners service we should interact with.\n */\nexport async function businessPlatformFqdn(): Promise<string> {\n const environment = serviceEnvironment()\n const productionFqdn = 'destinations.shopifysvc.com'\n switch (environment) {\n case 'local':\n return new DevServer('business-platform').host()\n default:\n return productionFqdn\n }\n}\n\n/**\n * It returns the Identity service we should interact with.\n *\n * @returns Fully-qualified domain of the Identity service we should interact with.\n */\nexport async function identityFqdn(): Promise<string> {\n const environment = serviceEnvironment()\n const productionFqdn = 'accounts.shopify.com'\n switch (environment) {\n case 'local':\n return new DevServer('identity').host()\n default:\n return productionFqdn\n }\n}\n\n/**\n * Normalize the store name to be used in the CLI.\n * It will add the .myshopify.com domain if it's not present.\n *\n * @param store - Store name.\n * @returns Normalized store name.\n */\nexport function normalizeStoreFqdn(store: string): string {\n const storeFqdn = store\n .replace(/^https?:\\/\\//, '')\n .replace(/\\/$/, '')\n .replace(/\\/admin$/, '')\n const addDomain = (storeFqdn: string) => {\n switch (serviceEnvironment()) {\n case 'local':\n return new DevServerCore().host(storeFqdn)\n default:\n return `${storeFqdn}.myshopify.com`\n }\n }\n const containDomain = (storeFqdn: string) =>\n storeFqdn.endsWith('.myshopify.com') || storeFqdn.endsWith('shopify.io') || storeFqdn.endsWith('.shop.dev')\n return containDomain(storeFqdn) ? storeFqdn : addDomain(storeFqdn)\n}\n", "export {isDevServerEnvironment} from './env.js'\nexport {DevServer, DevServerCore} from './dev-server.js'\n", "export const isDevServerEnvironment = process.env.USING_DEV === '1'\n\nexport function assertCompatibleEnvironment() {\n if (!isDevServerEnvironment) {\n throw new Error('DevServer is not supported in this environment')\n }\n}\n", "import fs from 'node:fs'\n\nimport {createServer as createServer2024} from './dev-server-2024.js'\nimport {createServer as createServer2016} from './dev-server-2016.js'\nimport type {DevServer as DevServerType, DevServerCore as DevServerCoreType, HostOptions} from './types.js'\n\nexport {isDevServerEnvironment} from './env.js'\n\nexport class DevServer implements DevServerType {\n private readonly serverImpl: DevServerType\n\n constructor(private readonly projectName: string) {\n if (projectName === 'shopify') {\n throw new Error(\"Use `import {DevServerCore}` for the 'shopify' project\")\n }\n this.serverImpl = inferProjectServer(projectName)\n }\n\n host(options?: HostOptions) {\n return this.serverImpl.host(options)\n }\n\n url(options?: HostOptions) {\n return this.serverImpl.url(options)\n }\n}\n\nexport class DevServerCore implements DevServerCoreType {\n private readonly serverImpl: DevServerType\n\n constructor() {\n this.serverImpl = inferProjectServer('shopify')\n }\n\n host(prefix: string) {\n return this.serverImpl.host({nonstandardHostPrefix: prefix})\n }\n\n url(prefix: string) {\n return this.serverImpl.url({nonstandardHostPrefix: prefix})\n }\n}\n\nconst INFERENCE_MODE_SENTINEL = '/opt/dev/misc/dev-server-inference-mode'\n\nfunction inferProjectServer(projectName: string) {\n if (inferenceModeAndProjectIsEdition2016(projectName)) {\n return createServer2016(projectName)\n } else {\n return createServer2024(projectName)\n }\n}\n\nfunction inferenceModeAndProjectIsEdition2016(projectName: string): boolean {\n try {\n fs.accessSync(INFERENCE_MODE_SENTINEL)\n\n try {\n fs.accessSync(`/opt/nginx/etc/manifest/${projectName}/current/edition-2024`)\n return false\n } catch {\n return true\n }\n } catch {\n return false\n }\n}\n", "import fs from 'node:fs'\n\nimport * as ni from 'network-interfaces'\n\nimport type {HostOptions} from './types.js'\nimport {assertConnectable, getIpFromHosts} from './network/index.js'\nimport {assertCompatibleEnvironment} from './env.js'\n\nconst NON_SHOP_PREFIXES = ['app', 'dev', 'shopify']\nconst BACKEND_PORT = 8080\n\nexport function createServer(projectName: string) {\n return {\n host: (options: HostOptions = {}) => host(projectName, options),\n url: (options: HostOptions = {}) => url(projectName, options),\n }\n}\n\nfunction host(projectName: string, options: HostOptions = {}): string {\n assertCompatibleEnvironment()\n ;(assertRunningOverride || assertRunning2024)(projectName)\n\n const prefix = (options.nonstandardHostPrefix || projectName).replace(/_/g, '-')\n\n if (projectName === 'shopify') {\n if (prefix.endsWith('-dev-api')) {\n const shopName = prefix.replace('-dev-api', '')\n return `${shopName}.dev-api.shop.dev`\n }\n if (!NON_SHOP_PREFIXES.includes(prefix)) {\n return `${prefix}.my.shop.dev`\n }\n }\n return `${prefix}.shop.dev`\n}\n\nfunction url(projectName: string, options: HostOptions = {}): string {\n return `https://${host(projectName, options)}`\n}\n\nfunction assertRunning2024(projectName: string): void {\n assertConnectable({\n projectName,\n addr: getBackendIp(projectName),\n port: BACKEND_PORT,\n })\n}\n\nfunction getBackendIp(projectName: string): string {\n try {\n const backendIp = resolveBackendHost(projectName)\n ni.fromIp(backendIp, {internal: true, ipVersion: 4})\n\n return backendIp\n } catch (error) {\n throw new Error(`DevServer for '${projectName}' is not running: \\`dev up ${projectName}\\` to start it.`)\n }\n}\n\nfunction resolveBackendHost(name: string): string {\n let host: string\n try {\n host = fs.readlinkSync(`/opt/nginx/etc/manifest/${name}/current`)\n } catch (error) {\n host = `${name}.root.shopify.dev.internal`\n }\n\n try {\n return getIpFromHosts(host)\n } catch {\n return host\n }\n}\n\n// Allow overrides for more concise test setup. Meh.\nlet assertRunningOverride: typeof assertRunning2024 | undefined\n\nexport function setAssertRunning(override: typeof assertRunningOverride) {\n assertRunningOverride = override\n}\n", "import {spawnSync} from 'node:child_process'\nimport path from 'node:path'\n\nexport {getIpFromHosts} from './host.js'\n\nexport interface ConnectionArguments {\n projectName: string\n addr: string\n port: number\n timeout?: number\n}\n\n// eslint-disable-next-line prettier/prettier\nconst DEFAULT_CONNECT_TIMEOUT = 100\n// Skip initialization on module load to prevent Spin trying to load a macOS dylib\n// (port checks should never run on Spin anyway)\nlet checkPort: ReturnType<typeof getCheckPortHelper>\n\nexport function assertConnectable(options: ConnectionArguments): void {\n checkPort ||= getCheckPortHelper()\n\n const {port, addr, timeout = DEFAULT_CONNECT_TIMEOUT} = options\n try {\n const normalizedAddr = addr === 'localhost' ? '127.0.0.1' : addr\n const running = checkPort(normalizedAddr, port, timeout)\n if (!running) {\n throw new Error(\n `DevServer for '${options.projectName}' is not running on ${port} / ${addr}: \\`dev up ${options.projectName}\\` to start it.`,\n )\n }\n } catch (err) {\n throw new Error(`DevServer check for '${options.projectName}' on ${port} / ${addr} failed (${err})`)\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function TEST_testResetCheckPort(): void {\n checkPort = getCheckPortHelper()\n}\n\nfunction getCheckPortHelper(): (addr: string, port: number, timeout: number) => boolean {\n return fallbackCheckPort\n}\n\nfunction fallbackCheckPort(address: string, port: number, timeout: number): boolean {\n const result = spawnSync('nc', ['-z', '-w', '1', address, port.toString()], {\n timeout,\n stdio: 'ignore',\n })\n\n return result.status === 0\n}\n", "import fs from 'node:fs'\nimport path from 'node:path'\n\nconst HOSTS_FILE = '/etc/hosts'\n\nlet hostToIpCache: Record<string, string> = {}\nlet lastModifiedTime = 0\n\nfunction loadHostsFile() {\n try {\n const stats = fs.statSync(HOSTS_FILE)\n const modifiedTime = stats.mtimeMs\n\n if (modifiedTime === lastModifiedTime) return\n\n const hostsContent = fs.readFileSync(HOSTS_FILE, 'utf8')\n const lines = hostsContent.split(/\\r?\\n/)\n\n hostToIpCache = {}\n\n for (const line of lines) {\n if (line.trim().startsWith('#') || line.trim() === '') {\n continue\n }\n\n const matches = /^\\s*(?<ipAddress>[^\\s#]+)\\s+(?<matchedHostName>[^\\s#]+)\\s*(#.*)?$/.exec(line)\n if (matches && matches.groups) {\n const {ipAddress, matchedHostName} = matches.groups\n if (matchedHostName && ipAddress) {\n hostToIpCache[matchedHostName] = ipAddress\n }\n }\n }\n\n lastModifiedTime = modifiedTime\n } catch (error) {\n console.log('Error reading hosts file:', error)\n }\n}\n\nexport function getIpFromHosts(hostname: string) {\n loadHostsFile()\n\n const ipAddress = hostToIpCache[hostname]\n if (ipAddress) {\n return ipAddress\n }\n\n throw new Error(`No IP found for hostname: ${hostname}`)\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function TEST_ClearCache() {\n hostToIpCache = {}\n lastModifiedTime = 0\n}\n", "import fs from 'fs'\nimport * as os from 'node:os'\n\nimport {assertConnectable} from './network/index.js'\nimport {assertCompatibleEnvironment} from './env.js'\nimport {HostOptions} from './types.js'\n\nexport function createServer(projectName: string) {\n return {\n host: (options: HostOptions = {}) => host(projectName, options),\n url: (options: HostOptions = {}) => url(projectName, options),\n }\n}\n\nfunction host(projectName: string, options: HostOptions = {}): string {\n assertCompatibleEnvironment()\n ;(assertRunningOverride || assertRunning2016)(projectName)\n\n const prefix = options.nonstandardHostPrefix || projectName\n\n return `${prefix}.myshopify.io`\n}\n\nfunction url(projectName: string, options: HostOptions = {}): string {\n return `https://${host(projectName, options)}`\n}\n\nfunction assertRunning2016(projectName: string): void {\n const [addr, port] = getAddrPort(projectName)\n assertConnectable({projectName, addr, port})\n}\n\nfunction getAddrPort(name: string): [string, number] {\n try {\n const portContent = fs.readFileSync(`${os.homedir()}/.local/run/services/${name}/server/port`, 'utf-8')\n return ['localhost', parseInt(portContent, 10)]\n } catch (error) {\n throw new Error(`DevServer for '${name}' is not running: \\`dev up ${name}\\` to start it.`)\n }\n}\n\n// Allow overrides for more concise test setup. Meh.\nlet assertRunningOverride: typeof assertRunning2016 | undefined\n\nexport function setAssertRunning(override: typeof assertRunningOverride) {\n assertRunningOverride = override\n}\n", "import {ApplicationToken, IdentityToken} from './schema.js'\nimport {applicationId, clientId as getIdentityClientId} from './identity.js'\nimport {tokenExchangeScopes} from './scopes.js'\nimport {API} from '../api.js'\nimport {identityFqdn} from '../../../public/node/context/fqdn.js'\nimport {shopifyFetch} from '../../../public/node/http.js'\nimport {err, ok, Result} from '../../../public/node/result.js'\nimport {AbortError, BugError, ExtendableError} from '../../../public/node/error.js'\nimport {setLastSeenAuthMethod, setLastSeenUserIdAfterAuth} from '../session.js'\nimport {nonRandomUUID} from '../../../public/node/crypto.js'\nimport * as jose from 'jose'\n\nexport class InvalidGrantError extends ExtendableError {}\nexport class InvalidRequestError extends ExtendableError {}\nclass InvalidTargetError extends AbortError {}\n\nexport interface ExchangeScopes {\n admin: string[]\n partners: string[]\n storefront: string[]\n businessPlatform: string[]\n appManagement: string[]\n}\n\n/**\n * Given an identity token, request an application token.\n * @param identityToken - access token obtained in a previous step\n * @param store - the store to use, only needed for admin API\n * @returns An array with the application access tokens.\n */\nexport async function exchangeAccessForApplicationTokens(\n identityToken: IdentityToken,\n scopes: ExchangeScopes,\n store?: string,\n): Promise<{[x: string]: ApplicationToken}> {\n const token = identityToken.accessToken\n\n const [partners, storefront, businessPlatform, admin, appManagement] = await Promise.all([\n requestAppToken('partners', token, scopes.partners),\n requestAppToken('storefront-renderer', token, scopes.storefront),\n requestAppToken('business-platform', token, scopes.businessPlatform),\n store ? requestAppToken('admin', token, scopes.admin, store) : {},\n requestAppToken('app-management', token, scopes.appManagement),\n ])\n\n return {\n ...partners,\n ...storefront,\n ...businessPlatform,\n ...admin,\n ...appManagement,\n }\n}\n\n/**\n * Given an expired access token, refresh it to get a new one.\n */\nexport async function refreshAccessToken(currentToken: IdentityToken): Promise<IdentityToken> {\n const clientId = getIdentityClientId()\n const params = {\n grant_type: 'refresh_token',\n access_token: currentToken.accessToken,\n refresh_token: currentToken.refreshToken,\n client_id: clientId,\n }\n const tokenResult = await tokenRequest(params)\n const value = tokenResult.mapError(tokenRequestErrorHandler).valueOrBug()\n return buildIdentityToken(value, currentToken.userId, currentToken.alias)\n}\n\n/**\n * Given a custom CLI token passed as ENV variable request a valid API access token\n * @param token - The CLI token passed as ENV variable `SHOPIFY_CLI_PARTNERS_TOKEN`\n * @param apiName - The API to exchange for the access token\n * @param scopes - The scopes to request with the access token\n * @returns An instance with the application access tokens.\n */\nasync function exchangeCliTokenForAccessToken(\n apiName: API,\n token: string,\n scopes: string[],\n): Promise<{accessToken: string; userId: string}> {\n const appId = applicationId(apiName)\n try {\n const newToken = await requestAppToken(apiName, token, scopes)\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const accessToken = newToken[appId]!.accessToken\n const userId = nonRandomUUID(token)\n setLastSeenUserIdAfterAuth(userId)\n setLastSeenAuthMethod('partners_token')\n return {accessToken, userId}\n } catch (error) {\n const prettyName = apiName.replace(/-/g, ' ').replace(/\\b\\w/g, (char) => char.toUpperCase())\n throw new AbortError(\n `The custom token provided can't be used for the ${prettyName} API.`,\n 'Ensure the token is correct and not expired.',\n )\n }\n}\n\n/**\n * Given a custom CLI token passed as ENV variable, request a valid Partners API token\n * This token does not accept extra scopes, just the cli one.\n * @param token - The CLI token passed as ENV variable `SHOPIFY_CLI_PARTNERS_TOKEN`\n * @returns An instance with the application access tokens.\n */\nexport async function exchangeCustomPartnerToken(token: string): Promise<{accessToken: string; userId: string}> {\n return exchangeCliTokenForAccessToken('partners', token, tokenExchangeScopes('partners'))\n}\n\n/**\n * Given a custom CLI token passed as ENV variable, request a valid App Management API token\n * @param token - The CLI token passed as ENV variable `SHOPIFY_CLI_PARTNERS_TOKEN`\n * @returns An instance with the application access tokens.\n */\nexport async function exchangeCliTokenForAppManagementAccessToken(\n token: string,\n): Promise<{accessToken: string; userId: string}> {\n return exchangeCliTokenForAccessToken('app-management', token, tokenExchangeScopes('app-management'))\n}\n\n/**\n * Given a custom CLI token passed as ENV variable, request a valid Business Platform API token\n * @param token - The CLI token passed as ENV variable `SHOPIFY_CLI_PARTNERS_TOKEN`\n * @returns An instance with the application access tokens.\n */\nexport async function exchangeCliTokenForBusinessPlatformAccessToken(\n token: string,\n): Promise<{accessToken: string; userId: string}> {\n return exchangeCliTokenForAccessToken('business-platform', token, tokenExchangeScopes('business-platform'))\n}\n\ntype IdentityDeviceError = 'authorization_pending' | 'access_denied' | 'expired_token' | 'slow_down' | 'unknown_failure'\n\n/**\n * Given a deviceCode obtained after starting a device identity flow, request an identity token.\n * @param deviceCode - The device code obtained after starting a device identity flow\n * @param scopes - The scopes to request\n * @returns An instance with the identity access tokens.\n */\nexport async function exchangeDeviceCodeForAccessToken(\n deviceCode: string,\n): Promise<Result<IdentityToken, IdentityDeviceError>> {\n const clientId = await getIdentityClientId()\n\n const params = {\n grant_type: 'urn:ietf:params:oauth:grant-type:device_code',\n device_code: deviceCode,\n client_id: clientId,\n }\n\n const tokenResult = await tokenRequest(params)\n if (tokenResult.isErr()) {\n return err(tokenResult.error.error as IdentityDeviceError)\n }\n const identityToken = buildIdentityToken(tokenResult.value)\n return ok(identityToken)\n}\n\nexport async function requestAppToken(\n api: API,\n token: string,\n scopes: string[] = [],\n store?: string,\n): Promise<{[x: string]: ApplicationToken}> {\n const appId = applicationId(api)\n const clientId = await getIdentityClientId()\n\n const params = {\n grant_type: 'urn:ietf:params:oauth:grant-type:token-exchange',\n requested_token_type: 'urn:ietf:params:oauth:token-type:access_token',\n subject_token_type: 'urn:ietf:params:oauth:token-type:access_token',\n client_id: clientId,\n audience: appId,\n scope: scopes.join(' '),\n subject_token: token,\n ...(api === 'admin' && {destination: `https://${store}/admin`, store}),\n }\n\n let identifier = appId\n if (api === 'admin' && store) {\n identifier = `${store}-${appId}`\n }\n const tokenResult = await tokenRequest(params)\n const value = tokenResult.mapError(tokenRequestErrorHandler).valueOrBug()\n const appToken = buildApplicationToken(value)\n return {[identifier]: appToken}\n}\n\ninterface TokenRequestResult {\n access_token: string\n expires_in: number\n refresh_token: string\n scope: string\n id_token?: string\n}\n\nfunction tokenRequestErrorHandler({error, store}: {error: string; store?: string}) {\n const invalidTargetErrorMessage = `You are not authorized to use the CLI to develop in the provided store${\n store ? `: ${store}` : '.'\n }`\n\n if (error === 'invalid_grant') {\n // There's an scenario when Identity returns \"invalid_grant\" when trying to refresh the token\n // using a valid refresh token. When that happens, we take the user through the authentication flow.\n return new InvalidGrantError()\n }\n if (error === 'invalid_request') {\n // There's an scenario when Identity returns \"invalid_request\" when exchanging an identity token.\n // This means the token is invalid. We clear the session and throw an error to let the caller know.\n return new InvalidRequestError()\n }\n if (error === 'invalid_target') {\n return new InvalidTargetError(invalidTargetErrorMessage, '', [\n 'Ensure you have logged in to the store using the Shopify admin at least once.',\n 'Ensure you are the store owner, or have a staff account if you are attempting to log in to a dev store.',\n 'Ensure you are using the permanent store domain, not a vanity domain.',\n ])\n }\n // eslint-disable-next-line @shopify/cli/no-error-factory-functions\n return new AbortError(error)\n}\n\nasync function tokenRequest(params: {\n [key: string]: string\n}): Promise<Result<TokenRequestResult, {error: string; store?: string}>> {\n const fqdn = await identityFqdn()\n const url = new URL(`https://${fqdn}/oauth/token`)\n url.search = new URLSearchParams(Object.entries(params)).toString()\n\n const res = await shopifyFetch(url.href, {method: 'POST'})\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const payload: any = await res.json()\n\n if (res.ok) return ok(payload)\n\n return err({error: payload.error, store: params.store})\n}\n\nfunction buildIdentityToken(\n result: TokenRequestResult,\n existingUserId?: string,\n existingAlias?: string,\n): IdentityToken {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const userId = existingUserId ?? (result.id_token ? jose.decodeJwt(result.id_token).sub! : undefined)\n\n if (!userId) {\n throw new BugError('Error setting userId for session. No id_token or pre-existing user ID provided.')\n }\n\n return {\n accessToken: result.access_token,\n refreshToken: result.refresh_token,\n expiresAt: new Date(Date.now() + result.expires_in * 1000),\n scopes: result.scope.split(' '),\n userId,\n alias: existingAlias,\n }\n}\n\nfunction buildApplicationToken(result: TokenRequestResult): ApplicationToken {\n return {\n accessToken: result.access_token,\n expiresAt: new Date(Date.now() + result.expires_in * 1000),\n scopes: result.scope.split(' '),\n }\n}\n", "import {API} from '../api.js'\nimport {BugError} from '../../../public/node/error.js'\nimport {Environment, serviceEnvironment} from '../context/service.js'\n\nexport function clientId(): string {\n const environment = serviceEnvironment()\n if (environment === Environment.Local) {\n return 'e5380e02-312a-7408-5718-e07017e9cf52'\n } else if (environment === Environment.Production) {\n return 'fbdb2649-e327-4907-8f67-908d24cfd7e3'\n } else {\n return 'e5380e02-312a-7408-5718-e07017e9cf52'\n }\n}\n\nexport function applicationId(api: API): string {\n switch (api) {\n case 'admin': {\n const environment = serviceEnvironment()\n if (environment === Environment.Local) {\n return 'e92482cebb9bfb9fb5a0199cc770fde3de6c8d16b798ee73e36c9d815e070e52'\n } else if (environment === Environment.Production) {\n return '7ee65a63608843c577db8b23c4d7316ea0a01bd2f7594f8a9c06ea668c1b775c'\n } else {\n return 'e92482cebb9bfb9fb5a0199cc770fde3de6c8d16b798ee73e36c9d815e070e52'\n }\n }\n case 'partners': {\n const environment = serviceEnvironment()\n if (environment === Environment.Local) {\n return 'df89d73339ac3c6c5f0a98d9ca93260763e384d51d6038da129889c308973978'\n } else if (environment === Environment.Production) {\n return '271e16d403dfa18082ffb3d197bd2b5f4479c3fc32736d69296829cbb28d41a6'\n } else {\n return 'df89d73339ac3c6c5f0a98d9ca93260763e384d51d6038da129889c308973978'\n }\n }\n case 'storefront-renderer': {\n const environment = serviceEnvironment()\n if (environment === Environment.Local) {\n return '46f603de-894f-488d-9471-5b721280ff49'\n } else if (environment === Environment.Production) {\n return 'ee139b3d-5861-4d45-b387-1bc3ada7811c'\n } else {\n return '46f603de-894f-488d-9471-5b721280ff49'\n }\n }\n case 'business-platform': {\n const environment = serviceEnvironment()\n if (environment === Environment.Local) {\n return 'ace6dc89-b526-456d-a942-4b8ef6acda4b'\n } else if (environment === Environment.Production) {\n return '32ff8ee5-82b8-4d93-9f8a-c6997cefb7dc'\n } else {\n return 'ace6dc89-b526-456d-a942-4b8ef6acda4b'\n }\n }\n case 'app-management': {\n const environment = serviceEnvironment()\n if (environment === Environment.Production) {\n return '7ee65a63608843c577db8b23c4d7316ea0a01bd2f7594f8a9c06ea668c1b775c'\n } else {\n return 'e92482cebb9bfb9fb5a0199cc770fde3de6c8d16b798ee73e36c9d815e070e52'\n }\n }\n default:\n throw new BugError(`Application id for API of type: ${api}`)\n }\n}\n", "import {allAPIs, API} from '../api.js'\nimport {BugError} from '../../../public/node/error.js'\n\n/**\n * Generate a flat array with all the default scopes for all the APIs plus\n * any custom scope defined by the user.\n * @param extraScopes - custom user-defined scopes\n * @returns Array of scopes\n */\nexport function allDefaultScopes(extraScopes: string[] = []): string[] {\n let scopes = allAPIs.map((api) => defaultApiScopes(api)).flat()\n scopes = ['openid', ...scopes, ...extraScopes].map(scopeTransform)\n return Array.from(new Set(scopes))\n}\n\n/**\n * Generate a flat array with the default scopes for the given API plus\n * any custom scope defined by the user\n * @param api - API to get the scopes for\n * @param extraScopes - custom user-defined scopes\n * @returns Array of scopes\n */\nexport function apiScopes(api: API, extraScopes: string[] = []): string[] {\n const scopes = [...defaultApiScopes(api), ...extraScopes.map(scopeTransform)].map(scopeTransform)\n return Array.from(new Set(scopes))\n}\n\n/**\n * Returns specific scopes required for token exchange with the given API.\n * @param api - API to get the scopes for\n * @returns Array of transformed scopes\n */\nexport function tokenExchangeScopes(api: API): string[] {\n switch (api) {\n case 'partners':\n return [scopeTransform('cli')]\n case 'app-management':\n return [scopeTransform('app-management')]\n case 'business-platform':\n return [scopeTransform('destinations')]\n default:\n throw new BugError(`API not supported for token exchange: ${api}`)\n }\n}\n\nfunction defaultApiScopes(api: API): string[] {\n switch (api) {\n case 'admin':\n return ['graphql', 'themes', 'collaborator']\n case 'storefront-renderer':\n return ['devtools']\n case 'partners':\n return ['cli']\n case 'business-platform':\n return ['destinations', 'store-management', 'on-demand-user-access']\n case 'app-management':\n return ['app-management']\n default:\n throw new BugError(`Unknown API: ${api}`)\n }\n}\n\nfunction scopeTransform(scope: string): string {\n switch (scope) {\n case 'graphql':\n return 'https://api.shopify.com/auth/shop.admin.graphql'\n case 'themes':\n return 'https://api.shopify.com/auth/shop.admin.themes'\n case 'collaborator':\n return 'https://api.shopify.com/auth/partners.collaborator-relationships.readonly'\n case 'cli':\n return 'https://api.shopify.com/auth/partners.app.cli.access'\n case 'devtools':\n return 'https://api.shopify.com/auth/shop.storefront-renderer.devtools'\n case 'destinations':\n return 'https://api.shopify.com/auth/destinations.readonly'\n case 'store-management':\n return 'https://api.shopify.com/auth/organization.store-management'\n case 'on-demand-user-access':\n return 'https://api.shopify.com/auth/organization.on-demand-user-access'\n case 'app-management':\n return 'https://api.shopify.com/auth/organization.apps.manage'\n default:\n return scope\n }\n}\n", "import {FatalError, AbortError, ExtendableError} from './error.js'\n\nexport type Result<TValue, TError> = Ok<TValue, TError> | Err<TValue, TError>\n\n/**\n * Utility metho to create an `Ok` result from a `value`\n *\n * @param value - `value` used to crete the `Result`\n * @returns an instance of a `Ok` `Result` inferring its type\n */\nexport const ok = <TValue, TError = never>(value: TValue): Ok<TValue, TError> => new Ok(value)\n\n/**\n * Utility method to create an `Error` result from an `error`\n *\n * @param err - `error` used to crete the `Result`\n * @returns an instance of an `Error` `Result` inferring its type\n */\nexport const err = <TValue = never, TError = unknown>(err: TError): Err<TValue, TError> => new Err(err)\n\nexport class Ok<TValue, TError> {\n constructor(readonly value: TValue) {}\n\n /**\n * Check if a `Result` is an `Err` inferring its type. `!isErr()` should be used before accessing the `value`\n *\n * @returns `false` as the `Resul` is `OK`\n */\n isErr(): this is Err<TValue, TError> {\n return false\n }\n\n /**\n * Runs the `handler` method an return the same an unaltered copy of the `Result`. It could be used to log an\n * output when the result is `Ok` without breaking the flow\n *\n * @param handler - method to be run when the result is `Ok`\n * @returns a copy of the same `Result`\n */\n doOnOk(handler: (value: TValue) => void): Result<TValue, TError> {\n handler(this.value)\n return ok(this.value)\n }\n\n /**\n * A safe mode to throw the `error` of the `Result`\n */\n valueOrBug(): TValue {\n return this.value\n }\n\n /**\n * Throws an abort error if the result doesn't represent a value.\n */\n valueOrAbort(): TValue {\n return this.value\n }\n\n /**\n * Maps the value to another one with a different type. It leaves the `Error` type unaltered\n *\n * @param mapper - The mapper method to apply an `OK` value\n * @returns a new result with the new mapped value\n */\n map<TMappedValue>(mapper: (value: TValue) => TMappedValue): Result<TMappedValue, TError> {\n return ok(mapper(this.value))\n }\n\n /**\n * Maps the error type to another one. It leaves the `Ok` type and value unaltered\n *\n * @param _mapper - This mapper method is not used for an `Ok` value\n * @returns a new result with the new mapped error type and an value\n */\n mapError<TMappedError>(_mapper: (error: TError) => TMappedError): Result<TValue, TMappedError> {\n return ok(this.value)\n }\n}\n\nexport class Err<TValue, TError> {\n // eslint-disable-next-line node/handle-callback-err\n constructor(readonly error: TError) {}\n\n /**\n * Check if a `Result` is an `Err` inferring its type. `!isErr()` should be used before accessing the `value`\n *\n * @returns `false` as the `Resul` is `OK`\n */\n isErr(): this is Err<TValue, TError> {\n return true\n }\n\n /**\n * Return an unaltered copy of the `Error` without doing anything.\n *\n * @param _handler - This handler method is not used for an `Error`\n * @returns a copy of the same `Error`\n */\n doOnOk(_handler: (value: TValue) => void): Result<TValue, TError> {\n return err(this.error)\n }\n\n /**\n * A safe mode to throw the `error` of the `Result`\n */\n valueOrBug(): TValue {\n throw this.error\n }\n\n /**\n * Throws an abort error if the result doesn't represent a value.\n */\n valueOrAbort(): TValue {\n if (this.error instanceof FatalError) {\n throw this.error\n } else if (this.error instanceof ExtendableError || this.error instanceof Error) {\n const error = new AbortError(this.error.message)\n error.stack = this.error.stack\n throw error\n } else {\n throw new AbortError(`${this.error}`)\n }\n }\n\n /**\n * Maps the value type to another one. It leaves the `Error` unaltered\n *\n * @param _mapper - This mapper method is not used for an `Error` value\n * @returns a new result with the new value type and an unaltered error\n */\n map<TMappedValue>(_mapper: (valueOrBug: TValue) => TMappedValue): Result<TMappedValue, TError> {\n return err(this.error)\n }\n\n /**\n * Maps the error to another one with a different type. It leaves the value type unaltered\n *\n * @param mapper - The mapper method to apply an `Error` value\n * @returns a new result with the new mapped error\n */\n mapError<TMappedError>(mapper: (error: TError) => TMappedError): Result<TValue, TMappedError> {\n return err(mapper(this.error))\n }\n}\n", "import {applicationId} from './session/identity.js'\nimport {validateSession} from './session/validate.js'\nimport {allDefaultScopes, apiScopes} from './session/scopes.js'\nimport {\n exchangeAccessForApplicationTokens,\n exchangeCustomPartnerToken,\n ExchangeScopes,\n refreshAccessToken,\n InvalidGrantError,\n InvalidRequestError,\n} from './session/exchange.js'\nimport {IdentityToken, Session, Sessions} from './session/schema.js'\nimport * as sessionStore from './session/store.js'\nimport {pollForDeviceAuthorization, requestDeviceAuthorization} from './session/device-authorization.js'\nimport {isThemeAccessSession} from './api/rest.js'\nimport {getCurrentSessionId, setCurrentSessionId} from './conf-store.js'\nimport {UserEmailQueryString, UserEmailQuery} from './api/graphql/business-platform-destinations/user-email.js'\nimport {outputContent, outputToken, outputDebug, outputCompleted} from '../../public/node/output.js'\nimport {firstPartyDev, themeToken} from '../../public/node/context/local.js'\nimport {AbortError} from '../../public/node/error.js'\nimport {normalizeStoreFqdn, identityFqdn} from '../../public/node/context/fqdn.js'\nimport {getIdentityTokenInformation, getPartnersToken} from '../../public/node/environment.js'\nimport {AdminSession, logout} from '../../public/node/session.js'\nimport {nonRandomUUID} from '../../public/node/crypto.js'\nimport {isEmpty} from '../../public/common/object.js'\nimport {businessPlatformRequest} from '../../public/node/api/business-platform.js'\n\n/**\n * Fetches the user's email from the Business Platform API\n * @param businessPlatformToken - The business platform token\n * @returns The user's email address or undefined if not found\n */\nasync function fetchEmail(businessPlatformToken: string | undefined): Promise<string | undefined> {\n if (!businessPlatformToken) return undefined\n\n try {\n const userEmailResult = await businessPlatformRequest<UserEmailQuery>(UserEmailQueryString, businessPlatformToken)\n return userEmailResult.currentUserAccount?.email\n // eslint-disable-next-line no-catch-all/no-catch-all\n } catch (error) {\n outputDebug(outputContent`Failed to fetch user email: ${(error as Error).message ?? String(error)}`)\n return undefined\n }\n}\n\n/**\n * A scope supported by the Shopify Admin API.\n */\nexport type AdminAPIScope = 'graphql' | 'themes' | 'collaborator'\n\n/**\n * It represents the options to authenticate against the Shopify Admin API.\n */\n\ninterface AdminAPIOAuthOptions {\n /** Store to request permissions for. */\n storeFqdn: string\n /** List of scopes to request permissions for. */\n scopes: AdminAPIScope[]\n}\n\n/**\n * A scope supported by the Partners API.\n */\nexport type PartnersAPIScope = 'cli'\ninterface PartnersAPIOAuthOptions {\n /** List of scopes to request permissions for. */\n scopes: PartnersAPIScope[]\n}\n\n/**\n * A scope supported by the Developer Platform API.\n */\nexport type AppManagementAPIScope = 'https://api.shopify.com/auth/organization.apps.manage'\ninterface AppManagementAPIOauthOptions {\n /** List of scopes to request permissions for. */\n scopes: AppManagementAPIScope[]\n}\n\n/**\n * A scope supported by the Storefront Renderer API.\n */\nexport type StorefrontRendererScope = 'devtools'\ninterface StorefrontRendererAPIOAuthOptions {\n /** List of scopes to request permissions for. */\n scopes: StorefrontRendererScope[]\n}\n\nexport type BusinessPlatformScope = 'destinations'\ninterface BusinessPlatformAPIOAuthOptions {\n /** List of scopes to request permissions for. */\n scopes: BusinessPlatformScope[]\n}\n\n/**\n * It represents the authentication requirements and\n * is the input necessary to trigger the authentication\n * flow.\n */\nexport interface OAuthApplications {\n adminApi?: AdminAPIOAuthOptions\n storefrontRendererApi?: StorefrontRendererAPIOAuthOptions\n partnersApi?: PartnersAPIOAuthOptions\n businessPlatformApi?: BusinessPlatformAPIOAuthOptions\n appManagementApi?: AppManagementAPIOauthOptions\n}\n\nexport interface OAuthSession {\n admin?: AdminSession\n partners?: string\n storefront?: string\n businessPlatform?: string\n appManagement?: string\n userId: string\n}\n\ntype AuthMethod = 'partners_token' | 'device_auth' | 'theme_access_token' | 'custom_app_token' | 'none'\n\nlet userId: undefined | string\nlet authMethod: AuthMethod = 'none'\n\n/**\n * Retrieves the user ID from the current session or returns 'unknown' if not found.\n *\n * This function performs the following steps:\n * 1. Checks for a cached user ID in memory (obtained in the current run).\n * 2. Attempts to fetch it from the local storage (from a previous auth session).\n * 3. Checks if a custom token was used (either as a theme password or partners token).\n * 4. If a custom token is present in the environment, generates a UUID and uses it as userId.\n * 5. If after all this we don't have a userId, then reports as 'unknown'.\n *\n * @returns A Promise that resolves to the user ID as a string.\n */\nexport async function getLastSeenUserIdAfterAuth(): Promise<string> {\n if (userId) return userId\n\n const currentSessionId = getCurrentSessionId()\n if (currentSessionId) return currentSessionId\n\n const customToken = getPartnersToken() ?? themeToken()\n return customToken ? nonRandomUUID(customToken) : 'unknown'\n}\n\nexport function setLastSeenUserIdAfterAuth(id: string) {\n userId = id\n}\n\n/**\n * Retrieves the last seen authentication method used in the current session.\n *\n * This function checks for the authentication method in the following order:\n * 1. Returns the cached auth method if it's not 'none'.\n * 2. Checks for a cached session, which implies 'device_auth' was used.\n * 3. Checks for a partners token in the environment.\n * 4. Checks for a theme password in the environment.\n * 5. If none of the above are true, returns 'none'.\n *\n * @returns A Promise that resolves to the last seen authentication method as an AuthMethod type.\n */\nexport async function getLastSeenAuthMethod(): Promise<AuthMethod> {\n if (authMethod !== 'none') return authMethod\n\n if (getCurrentSessionId()) return 'device_auth'\n\n const partnersToken = getPartnersToken()\n if (partnersToken) return 'partners_token'\n\n const themePassword = themeToken()\n if (themePassword) {\n return isThemeAccessSession({token: themePassword, storeFqdn: ''}) ? 'theme_access_token' : 'custom_app_token'\n }\n\n return 'none'\n}\n\nexport function setLastSeenAuthMethod(method: AuthMethod) {\n authMethod = method\n}\n\nexport interface EnsureAuthenticatedAdditionalOptions {\n noPrompt?: boolean\n forceRefresh?: boolean\n forceNewSession?: boolean\n}\n\n/**\n * This method ensures that we have a valid session to authenticate against the given applications using the provided scopes.\n *\n * @param applications - An object containing the applications we need to be authenticated with.\n * @param _env - Optional environment variables to use.\n * @param options - Optional extra options to use.\n * @returns An instance with the access tokens organized by application.\n */\nexport async function ensureAuthenticated(\n applications: OAuthApplications,\n _env?: NodeJS.ProcessEnv,\n {forceRefresh = false, noPrompt = false, forceNewSession = false}: EnsureAuthenticatedAdditionalOptions = {},\n): Promise<OAuthSession> {\n const fqdn = await identityFqdn()\n\n const previousStoreFqdn = applications.adminApi?.storeFqdn\n if (previousStoreFqdn) {\n const normalizedStoreName = normalizeStoreFqdn(previousStoreFqdn)\n if (previousStoreFqdn === applications.adminApi?.storeFqdn) {\n applications.adminApi.storeFqdn = normalizedStoreName\n }\n }\n\n const sessions = (await sessionStore.fetch()) ?? {}\n\n let currentSessionId = getCurrentSessionId()\n if (!currentSessionId) {\n const userIds = Object.keys(sessions[fqdn] ?? {})\n if (userIds.length > 0) currentSessionId = userIds[0]\n }\n const currentSession: Session | undefined =\n currentSessionId && !forceNewSession ? sessions[fqdn]?.[currentSessionId] : undefined\n const scopes = getFlattenScopes(applications)\n\n outputDebug(outputContent`Validating existing session against the scopes:\n${outputToken.json(scopes)}\nFor applications:\n${outputToken.json(applications)}\n`)\n\n const validationResult = await validateSession(scopes, applications, currentSession)\n\n let newSession = {}\n\n if (validationResult === 'needs_full_auth') {\n await throwOnNoPrompt(noPrompt)\n outputDebug(outputContent`Initiating the full authentication flow...`)\n newSession = await executeCompleteFlow(applications)\n } else if (validationResult === 'needs_refresh' || forceRefresh) {\n outputDebug(outputContent`The current session is valid but needs refresh. Refreshing...`)\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n newSession = await refreshTokens(currentSession!, applications)\n } catch (error) {\n if (error instanceof InvalidGrantError) {\n await throwOnNoPrompt(noPrompt)\n newSession = await executeCompleteFlow(applications)\n } else if (error instanceof InvalidRequestError) {\n await sessionStore.remove()\n throw new AbortError('\\nError validating auth session', \"We've cleared the current session, please try again\")\n } else {\n throw error\n }\n }\n }\n\n const completeSession = {...currentSession, ...newSession} as Session\n const newSessionId = completeSession.identity.userId\n const updatedSessions: Sessions = {\n ...sessions,\n [fqdn]: {...sessions[fqdn], [newSessionId]: completeSession},\n }\n\n // Save the new session info if it has changed\n if (!isEmpty(newSession)) {\n await sessionStore.store(updatedSessions)\n setCurrentSessionId(newSessionId)\n }\n\n const tokens = await tokensFor(applications, completeSession)\n\n // Overwrite partners token if using a custom CLI Token\n const envToken = getPartnersToken()\n if (envToken && applications.partnersApi) {\n tokens.partners = (await exchangeCustomPartnerToken(envToken)).accessToken\n }\n\n setLastSeenAuthMethod(envToken ? 'partners_token' : 'device_auth')\n setLastSeenUserIdAfterAuth(tokens.userId)\n return tokens\n}\n\nasync function throwOnNoPrompt(noPrompt: boolean) {\n if (!noPrompt) return\n await logout()\n throw new AbortError(\n `The currently available CLI credentials are invalid.\n\nThe CLI is currently unable to prompt for reauthentication.`,\n 'Restart the CLI process you were running. If in an interactive terminal, you will be prompted to reauthenticate. If in a non-interactive terminal, ensure the correct credentials are available in the program environment.',\n )\n}\n\n/**\n * Execute the full authentication flow.\n *\n * @param applications - An object containing the applications we need to be authenticated with.\n * @param alias - Optional alias to use for the session.\n */\nasync function executeCompleteFlow(applications: OAuthApplications): Promise<Session> {\n const scopes = getFlattenScopes(applications)\n const exchangeScopes = getExchangeScopes(applications)\n const store = applications.adminApi?.storeFqdn\n if (firstPartyDev()) {\n outputDebug(outputContent`Authenticating as Shopify Employee...`)\n scopes.push('employee')\n }\n\n let identityToken: IdentityToken\n const identityTokenInformation = getIdentityTokenInformation()\n if (identityTokenInformation) {\n identityToken = buildIdentityTokenFromEnv(scopes, identityTokenInformation)\n } else {\n // Request a device code to authorize without a browser redirect.\n outputDebug(outputContent`Requesting device authorization code...`)\n const deviceAuth = await requestDeviceAuthorization(scopes)\n\n // Poll for the identity token\n outputDebug(outputContent`Starting polling for the identity token...`)\n identityToken = await pollForDeviceAuthorization(deviceAuth.deviceCode, deviceAuth.interval)\n }\n\n // Exchange identity token for application tokens\n outputDebug(outputContent`CLI token received. Exchanging it for application tokens...`)\n const result = await exchangeAccessForApplicationTokens(identityToken, exchangeScopes, store)\n\n // Get the alias for the session (email or userId)\n const businessPlatformToken = result[applicationId('business-platform')]?.accessToken\n const alias = (await fetchEmail(businessPlatformToken)) ?? identityToken.userId\n\n const session: Session = {\n identity: {\n ...identityToken,\n alias,\n },\n applications: result,\n }\n\n outputCompleted(`Logged in.`)\n\n return session\n}\n\n/**\n * Refresh the tokens for a given session.\n *\n * @param session - The session to refresh.\n */\nasync function refreshTokens(session: Session, applications: OAuthApplications): Promise<Session> {\n // Refresh Identity Token\n const identityToken = await refreshAccessToken(session.identity)\n // Exchange new identity token for application tokens\n const exchangeScopes = getExchangeScopes(applications)\n const applicationTokens = await exchangeAccessForApplicationTokens(\n identityToken,\n exchangeScopes,\n applications.adminApi?.storeFqdn,\n )\n\n return {\n identity: identityToken,\n applications: applicationTokens,\n }\n}\n\n/**\n * Get the application tokens for a given session.\n *\n * @param applications - An object containing the applications we need the tokens for.\n * @param session - The current session.\n * @param fqdn - The identity FQDN.\n */\nasync function tokensFor(applications: OAuthApplications, session: Session): Promise<OAuthSession> {\n const tokens: OAuthSession = {\n userId: session.identity.userId,\n }\n\n if (applications.adminApi) {\n const appId = applicationId('admin')\n const realAppId = `${applications.adminApi.storeFqdn}-${appId}`\n const token = session.applications[realAppId]?.accessToken\n if (token) {\n tokens.admin = {token, storeFqdn: applications.adminApi.storeFqdn}\n }\n }\n\n if (applications.partnersApi) {\n const appId = applicationId('partners')\n tokens.partners = session.applications[appId]?.accessToken\n }\n\n if (applications.storefrontRendererApi) {\n const appId = applicationId('storefront-renderer')\n tokens.storefront = session.applications[appId]?.accessToken\n }\n\n if (applications.businessPlatformApi) {\n const appId = applicationId('business-platform')\n tokens.businessPlatform = session.applications[appId]?.accessToken\n }\n\n if (applications.appManagementApi) {\n const appId = applicationId('app-management')\n tokens.appManagement = session.applications[appId]?.accessToken\n }\n\n return tokens\n}\n\n// Scope Helpers\n/**\n * Get a flattened array of scopes for the given applications.\n *\n * @param apps - An object containing the applications we need the scopes for.\n * @returns A flattened array of scopes.\n */\nfunction getFlattenScopes(apps: OAuthApplications): string[] {\n const admin = apps.adminApi?.scopes ?? []\n const partner = apps.partnersApi?.scopes ?? []\n const storefront = apps.storefrontRendererApi?.scopes ?? []\n const businessPlatform = apps.businessPlatformApi?.scopes ?? []\n const appManagement = apps.appManagementApi?.scopes ?? []\n const requestedScopes = [...admin, ...partner, ...storefront, ...businessPlatform, ...appManagement]\n return allDefaultScopes(requestedScopes)\n}\n\n/**\n * Get the scopes for the given applications.\n *\n * @param apps - An object containing the applications we need the scopes for.\n * @returns An object containing the scopes for each application.\n */\nfunction getExchangeScopes(apps: OAuthApplications): ExchangeScopes {\n const adminScope = apps.adminApi?.scopes ?? []\n const partnerScope = apps.partnersApi?.scopes ?? []\n const storefrontScopes = apps.storefrontRendererApi?.scopes ?? []\n const businessPlatformScopes = apps.businessPlatformApi?.scopes ?? []\n const appManagementScopes = apps.appManagementApi?.scopes ?? []\n return {\n admin: apiScopes('admin', adminScope),\n partners: apiScopes('partners', partnerScope),\n storefront: apiScopes('storefront-renderer', storefrontScopes),\n businessPlatform: apiScopes('business-platform', businessPlatformScopes),\n appManagement: apiScopes('app-management', appManagementScopes),\n }\n}\n\nfunction buildIdentityTokenFromEnv(\n scopes: string[],\n identityTokenInformation: {accessToken: string; refreshToken: string; userId: string},\n) {\n return {\n ...identityTokenInformation,\n expiresAt: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000),\n scopes,\n alias: identityTokenInformation.userId,\n }\n}\n", "/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport {applicationId} from './identity.js'\nimport {ApplicationToken, IdentityToken, Session, validateCachedIdentityTokenStructure} from './schema.js'\nimport {sessionConstants} from '../constants.js'\nimport {firstPartyDev} from '../../../public/node/context/local.js'\nimport {OAuthApplications} from '../session.js'\nimport {outputDebug} from '../../../public/node/output.js'\n\ntype ValidationResult = 'needs_refresh' | 'needs_full_auth' | 'ok'\n\n/**\n * Validate if an identity token is valid for the requested scopes\n */\nfunction validateScopes(requestedScopes: string[], identity: IdentityToken) {\n const currentScopes = identity.scopes\n if (firstPartyDev() !== currentScopes.includes('employee')) return false\n return requestedScopes.every((scope) => currentScopes.includes(scope))\n}\n\n/**\n * Validate if the current session is valid or we need to refresh/re-authenticate\n * @param scopes - requested scopes to validate\n * @param applications - requested applications\n * @param session - current session with identity and application tokens\n * @returns 'ok' if the session is valid, 'needs_full_auth' if we need to re-authenticate, 'needs_refresh' if we need to refresh the session\n */\nexport async function validateSession(\n scopes: string[],\n applications: OAuthApplications,\n session: Session | undefined,\n): Promise<ValidationResult> {\n if (!session) return 'needs_full_auth'\n const scopesAreValid = validateScopes(scopes, session.identity)\n if (!scopesAreValid) return 'needs_full_auth'\n let tokensAreExpired = isTokenExpired(session.identity)\n\n if (applications.partnersApi) {\n const appId = applicationId('partners')\n const token = session.applications[appId]!\n tokensAreExpired = tokensAreExpired || isTokenExpired(token)\n }\n\n if (applications.appManagementApi) {\n const appId = applicationId('app-management')\n const token = session.applications[appId]!\n tokensAreExpired = tokensAreExpired || isTokenExpired(token)\n }\n\n if (applications.storefrontRendererApi) {\n const appId = applicationId('storefront-renderer')\n const token = session.applications[appId]!\n tokensAreExpired = tokensAreExpired || isTokenExpired(token)\n }\n\n if (applications.adminApi) {\n const appId = applicationId('admin')\n const realAppId = `${applications.adminApi.storeFqdn}-${appId}`\n const token = session.applications[realAppId]!\n tokensAreExpired = tokensAreExpired || isTokenExpired(token)\n }\n\n outputDebug(`- Token validation -> It's expired: ${tokensAreExpired}`)\n\n if (!validateCachedIdentityTokenStructure(session.identity)) {\n return 'needs_full_auth'\n }\n\n if (tokensAreExpired) return 'needs_refresh'\n\n return 'ok'\n}\n\nfunction isTokenExpired(token: ApplicationToken): boolean {\n if (!token) return true\n return token.expiresAt < expireThreshold()\n}\n\nfunction expireThreshold(): Date {\n return new Date(Date.now() + sessionConstants.expirationTimeMarginInMinutes * 60 * 1000)\n}\n", "import {clientId} from './identity.js'\nimport {exchangeDeviceCodeForAccessToken} from './exchange.js'\nimport {IdentityToken} from './schema.js'\nimport {identityFqdn} from '../../../public/node/context/fqdn.js'\nimport {shopifyFetch} from '../../../public/node/http.js'\nimport {outputContent, outputDebug, outputInfo, outputToken} from '../../../public/node/output.js'\nimport {AbortError, BugError} from '../../../public/node/error.js'\nimport {isCloudEnvironment} from '../../../public/node/context/local.js'\nimport {isCI, openURL} from '../../../public/node/system.js'\nimport {isTTY, keypress} from '../../../public/node/ui.js'\nimport {Response} from 'node-fetch'\n\nexport interface DeviceAuthorizationResponse {\n deviceCode: string\n userCode: string\n verificationUri: string\n expiresIn: number\n verificationUriComplete?: string\n interval?: number\n}\n\n/**\n * Initiate a device authorization flow.\n * This will return a DeviceAuthorizationResponse containing the URL where user\n * should go to authorize the device without the need of a callback to the CLI.\n *\n * Also returns a `deviceCode` used for polling the token endpoint in the next step.\n *\n * @param scopes - The scopes to request\n * @returns An object with the device authorization response.\n */\nexport async function requestDeviceAuthorization(scopes: string[]): Promise<DeviceAuthorizationResponse> {\n const fqdn = await identityFqdn()\n const identityClientId = clientId()\n const queryParams = {client_id: identityClientId, scope: scopes.join(' ')}\n const url = `https://${fqdn}/oauth/device_authorization`\n\n const response = await shopifyFetch(url, {\n method: 'POST',\n headers: {'Content-type': 'application/x-www-form-urlencoded'},\n body: convertRequestToParams(queryParams),\n })\n\n // First read the response body as text so we have it for debugging\n let responseText: string\n try {\n responseText = await response.text()\n } catch (error) {\n throw new BugError(\n `Failed to read response from authorization service (HTTP ${response.status}). Network or streaming error occurred.`,\n 'Check your network connection and try again.',\n )\n }\n\n // Now try to parse the text as JSON\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let jsonResult: any\n try {\n jsonResult = JSON.parse(responseText)\n } catch {\n // JSON.parse failed, handle the parsing error\n const errorMessage = buildAuthorizationParseErrorMessage(response, responseText)\n throw new BugError(errorMessage)\n }\n\n outputDebug(outputContent`Received device authorization code: ${outputToken.json(jsonResult)}`)\n if (!jsonResult.device_code || !jsonResult.verification_uri_complete) {\n throw new BugError('Failed to start authorization process')\n }\n\n outputInfo('\\nTo run this command, log in to Shopify.')\n\n if (isCI()) {\n throw new AbortError(\n 'Authorization is required to continue, but the current environment does not support interactive prompts.',\n 'To resolve this, specify credentials in your environment, or run the command in an interactive environment such as your local terminal.',\n )\n }\n\n outputInfo(outputContent`User verification code: ${jsonResult.user_code}`)\n const linkToken = outputToken.link(jsonResult.verification_uri_complete)\n\n const cloudMessage = () => {\n outputInfo(outputContent`👉 Open this link to start the auth process: ${linkToken}`)\n }\n\n if (isCloudEnvironment() || !isTTY()) {\n cloudMessage()\n } else {\n outputInfo('👉 Press any key to open the login page on your browser')\n await keypress()\n const opened = await openURL(jsonResult.verification_uri_complete)\n if (opened) {\n outputInfo(outputContent`Opened link to start the auth process: ${linkToken}`)\n } else {\n cloudMessage()\n }\n }\n\n return {\n deviceCode: jsonResult.device_code,\n userCode: jsonResult.user_code,\n verificationUri: jsonResult.verification_uri,\n expiresIn: jsonResult.expires_in,\n verificationUriComplete: jsonResult.verification_uri_complete,\n interval: jsonResult.interval,\n }\n}\n\n/**\n * Poll the Oauth token endpoint with the device code obtained from a DeviceAuthorizationResponse.\n * The endpoint will return `authorization_pending` until the user completes the auth flow in the browser.\n * Once the user completes the auth flow, the endpoint will return the identity token.\n *\n * Timeout for the polling is defined by the server and is around 600 seconds.\n *\n * @param code - The device code obtained after starting a device identity flow\n * @param interval - The interval to poll the token endpoint\n * @returns The identity token\n */\nexport async function pollForDeviceAuthorization(code: string, interval = 5): Promise<IdentityToken> {\n let currentIntervalInSeconds = interval\n\n return new Promise<IdentityToken>((resolve, reject) => {\n const onPoll = async () => {\n const result = await exchangeDeviceCodeForAccessToken(code)\n if (!result.isErr()) {\n resolve(result.value)\n return\n }\n\n const error = result.error ?? 'unknown_failure'\n\n outputDebug(outputContent`Polling for device authorization... status: ${error}`)\n switch (error) {\n case 'authorization_pending': {\n startPolling()\n return\n }\n case 'slow_down':\n currentIntervalInSeconds += 5\n startPolling()\n return\n case 'access_denied':\n case 'expired_token':\n case 'unknown_failure': {\n reject(new Error(`Device authorization failed: ${error}`))\n }\n }\n }\n\n const startPolling = () => {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n setTimeout(onPoll, currentIntervalInSeconds * 1000)\n }\n\n startPolling()\n })\n}\n\nfunction convertRequestToParams(queryParams: {client_id: string; scope: string}): string {\n return Object.entries(queryParams)\n .map(([key, value]) => value && `${key}=${value}`)\n .filter((hasValue) => Boolean(hasValue))\n .join('&')\n}\n\n/**\n * Build a detailed error message for JSON parsing failures from the authorization service.\n * Provides context-specific error messages based on response status and content.\n *\n * @param response - The HTTP response object\n * @param responseText - The raw response body text\n * @returns Detailed error message about the failure\n */\nfunction buildAuthorizationParseErrorMessage(response: Response, responseText: string): string {\n // Build helpful error message based on response status and content\n let errorMessage = `Received invalid response from authorization service (HTTP ${response.status}).`\n\n // Add status-based context\n if (response.status >= 500) {\n errorMessage += ' The service may be experiencing issues.'\n } else if (response.status >= 400) {\n errorMessage += ' The request may be malformed or unauthorized.'\n }\n\n // Add content-based context (check these regardless of status)\n if (responseText.trim().startsWith('<!DOCTYPE') || responseText.trim().startsWith('<html')) {\n errorMessage += ' Received HTML instead of JSON - the service endpoint may have changed.'\n } else if (responseText.trim() === '') {\n errorMessage += ' Received empty response body.'\n } else {\n errorMessage += ' Response could not be parsed as valid JSON.'\n }\n\n return `${errorMessage} If this issue persists, please contact support at https://help.shopify.com`\n}\n", "import {buildHeaders} from './headers.js'\nimport {themeKitAccessDomain} from '../constants.js'\nimport {AdminSession} from '../../../public/node/session.js'\n\nexport function restRequestBody<T>(requestBody?: T) {\n if (!requestBody) {\n return\n }\n return JSON.stringify(requestBody)\n}\n\nexport function restRequestUrl(\n session: AdminSession,\n apiVersion: string,\n path: string,\n searchParams: {[name: string]: string} = {},\n) {\n const url = new URL(\n isThemeAccessSession(session)\n ? `https://${themeKitAccessDomain}/cli/admin/api/${apiVersion}${path}.json`\n : `https://${session.storeFqdn}/admin/api/${apiVersion}${path}.json`,\n )\n Object.entries(searchParams).forEach(([name, value]) => {\n url.searchParams.set(name, value)\n })\n\n return url.toString()\n}\n\nexport function restRequestHeaders(session: AdminSession) {\n const store = session.storeFqdn\n const token = session.token\n const headers = buildHeaders(session.token)\n\n if (isThemeAccessSession(session)) {\n headers['X-Shopify-Shop'] = store\n headers['X-Shopify-Access-Token'] = token\n }\n\n return headers\n}\n\nexport function isThemeAccessSession(session: AdminSession) {\n return session.token.startsWith('shptka_')\n}\n", "// UserEmail query for fetching user email from Business Platform API\nexport interface UserEmailQuery {\n currentUserAccount?: {\n email: string\n } | null\n}\n\nexport const UserEmailQueryString = `\n query UserEmail {\n currentUserAccount {\n email\n }\n }\n`\n", "import {unionArrayStrategy} from '../../private/common/array.js'\nimport deepMerge from 'deepmerge'\nimport {Dictionary, ObjectIterator, PropertyPath, ValueKeyIteratee} from 'lodash'\nimport lodashPickBy from 'lodash/pickBy.js'\nimport lodashMapValues from 'lodash/mapValues.js'\nimport lodashIsEqual from 'lodash/isEqual.js'\nimport differenceWith from 'lodash/differenceWith.js'\nimport fromPairs from 'lodash/fromPairs.js'\nimport toPairs from 'lodash/toPairs.js'\nimport get from 'lodash/get.js'\nimport set from 'lodash/set.js'\nimport unset from 'lodash/unset.js'\nimport lodashIsEmpty from 'lodash/isEmpty.js'\n\n/**\n * Deep merges the two objects and returns a new object with the merge result.\n *\n * @param lhs - One of the objects to be merged.\n * @param rhs - Another object to be merged.\n * @param arrayMergeStrategy - Strategy used to merge the array typed fields. Union strategy is used by default to avoid\n * duplicated elements.\n * @returns A Javascrip tobject with th emerged objects.\n */\nexport function deepMergeObjects<T1, T2>(\n lhs: Partial<T1>,\n rhs: Partial<T2>,\n arrayMergeStrategy: (destinationArray: unknown[], sourceArray: unknown[]) => unknown[] = unionArrayStrategy,\n): T1 & T2 {\n return deepMerge(lhs, rhs, {arrayMerge: arrayMergeStrategy})\n}\n\n/**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @param object - The source object.\n * @param predicate - The function invoked per property.\n * @returns Returns the new object.\n */\nexport function pickBy<T>(object: Dictionary<T> | null | undefined, predicate: ValueKeyIteratee<T>): Dictionary<T> {\n return lodashPickBy(object, predicate)\n}\n\n/**\n * Creates an object with the same keys as object and values generated by running each own\n * enumerable property of object through iteratee. The iteratee function is\n * invoked with three arguments: (value, key, object).\n *\n * @param source - The object to iterate over.\n * @param callback - The function invoked per iteration.\n * @returns Returns the new mapped object.\n */\nexport function mapValues<T extends object, TResult>(\n source: T | null | undefined,\n callback: ObjectIterator<T, TResult>,\n): {[P in keyof T]: TResult} {\n return lodashMapValues(source, callback)\n}\n\n/**\n * Deeply compares two objects and returns true if they are equal.\n *\n * @param one - The first object to be compared.\n * @param two - The second object to be compared.\n * @returns True if the objects are equal, false otherwise.\n */\nexport function deepCompare(one: object, two: object): boolean {\n return lodashIsEqual(one, two)\n}\n\n/**\n * Return the difference between two nested objects.\n *\n * @param one - The first object to be compared.\n * @param two - The second object to be compared.\n * @returns Two objects containing the fields that are different, each one with the values of one object.\n */\nexport function deepDifference(one: object, two: object): [object, object] {\n const changes = differenceWith(toPairs(one), toPairs(two), deepCompare)\n const changes2 = differenceWith(toPairs(two), toPairs(one), deepCompare)\n return [fromPairs(changes), fromPairs(changes2)]\n}\n\n/**\n * Gets the value at path of object. If the resolved value is undefined, the defaultValue is returned in its place.\n *\n * @param object - The object to query.\n * @param path - The path of the property to get.\n * @returns - Returns the resolved value.\n */\nexport function getPathValue<T = object>(object: object, path: PropertyPath): T | undefined {\n return get(object, path) === undefined ? undefined : (get(object, path) as T)\n}\n\n/**\n * Sets the value at path of object. If a portion of path doesn't exist, it's create.\n *\n * @param object - The object to modify.\n * @param path - The path of the property to set.\n * @param value - The value to set.\n * @returns - Returns object.\n */\nexport function setPathValue(object: object, path: PropertyPath, value?: unknown): object {\n return set(object, path, value)\n}\n\n/**\n * Removes the property at path of object.\n *\n * @param object - The object to modify.\n * @param path - The path of the property to unset.\n * @returns - Returns true if the property is deleted or not found, else false.\n */\nexport function unsetPathValue(object: object, path: PropertyPath): boolean {\n return unset(object, path)\n}\n\n/**\n * Checks if value is an empty object, collection, map, or set.\n *\n * @param object - The value to check.\n * @returns - Returns true if value is empty, else false.\n */\nexport function isEmpty(object: object): boolean {\n return lodashIsEmpty(object)\n}\n\n/**\n * Removes the undefined elements.\n *\n * @param object - The object whose undefined will be deleted.\n * @returns A copy of the object with the undefined elements deleted.\n */\nexport function compact(object: object): object {\n return Object.fromEntries(Object.entries(object).filter(([_, value]) => value != null))\n}\n", "export function unionArrayStrategy(destinationArray: unknown[], sourceArray: unknown[]): unknown[] {\n return Array.from(new Set([...destinationArray, ...sourceArray]))\n}\n", "import {CacheOptions, GraphQLVariables, UnauthorizedHandler, graphqlRequest, graphqlRequestDoc} from './graphql.js'\nimport {handleDeprecations} from './partners.js'\nimport {businessPlatformFqdn} from '../context/fqdn.js'\nimport {TypedDocumentNode} from '@graphql-typed-document-node/core'\nimport {Variables} from 'graphql-request'\n\n/**\n * Sets up the request to the Business Platform Destinations API.\n *\n * @param token - Business Platform token.\n */\nasync function setupRequest(token: string) {\n const api = 'BusinessPlatform'\n const fqdn = await businessPlatformFqdn()\n const url = `https://${fqdn}/destinations/api/2020-07/graphql`\n return {\n token,\n api,\n url,\n responseOptions: {onResponse: handleDeprecations},\n }\n}\n\n/**\n * Executes a GraphQL query against the Business Platform Destinations API.\n *\n * @param query - GraphQL query to execute.\n * @param token - Business Platform token.\n * @param variables - GraphQL variables to pass to the query.\n * @param cacheOptions - Cache options for the request. If not present, the request will not be cached.\n * @returns The response of the query of generic type <T>.\n */\nexport async function businessPlatformRequest<T>(\n query: string,\n token: string,\n variables?: GraphQLVariables,\n cacheOptions?: CacheOptions,\n): Promise<T> {\n return graphqlRequest<T>({\n ...(await setupRequest(token)),\n query,\n variables,\n cacheOptions,\n })\n}\n\n/**\n * @param query - GraphQL query to execute.\n * @param token - Business Platform token.\n * @param variables - GraphQL variables to pass to the query.\n * @param cacheOptions - Cache options for the request. If not present, the request will not be cached.\n */\nexport interface BusinessPlatformRequestOptions<TResult, TVariables extends Variables> {\n query: TypedDocumentNode<TResult, TVariables>\n token: string\n variables?: TVariables\n cacheOptions?: CacheOptions\n unauthorizedHandler: UnauthorizedHandler\n}\n\n/**\n * Executes a GraphQL query against the Business Platform Destinations API. Uses typed documents.\n *\n * @param options - The options for the request.\n * @returns The response of the query of generic type <TResult>.\n */\nexport async function businessPlatformRequestDoc<TResult, TVariables extends Variables>(\n options: BusinessPlatformRequestOptions<TResult, TVariables>,\n): Promise<TResult> {\n return graphqlRequestDoc<TResult, TVariables>({\n ...(await setupRequest(options.token)),\n query: options.query,\n variables: options.variables,\n cacheOptions: options.cacheOptions,\n unauthorizedHandler: options.unauthorizedHandler,\n })\n}\n\n/**\n * Sets up the request to the Business Platform Organizations API.\n *\n * @param token - Business Platform token.\n * @param organizationId - Organization ID as a numeric (non-GID) value.\n */\nasync function setupOrganizationsRequest(token: string, organizationId: string) {\n const api = 'BusinessPlatform'\n const fqdn = await businessPlatformFqdn()\n const url = `https://${fqdn}/organizations/api/unstable/organization/${organizationId}/graphql`\n return {\n token,\n api,\n url,\n responseOptions: {onResponse: handleDeprecations},\n }\n}\n\nexport interface BusinessPlatformOrganizationsRequestNonTypedOptions {\n query: string\n token: string\n organizationId: string\n unauthorizedHandler: UnauthorizedHandler\n variables?: GraphQLVariables\n}\n\n/**\n * Executes a GraphQL query against the Business Platform Organizations API.\n *\n * @param options - The options for the request.\n * @returns The response of the query of generic type <T>.\n */\nexport async function businessPlatformOrganizationsRequest<T>(\n options: BusinessPlatformOrganizationsRequestNonTypedOptions,\n): Promise<T> {\n return graphqlRequest<T>({\n query: options.query,\n ...(await setupOrganizationsRequest(options.token, options.organizationId)),\n variables: options.variables,\n unauthorizedHandler: options.unauthorizedHandler,\n })\n}\n\nexport interface BusinessPlatformOrganizationsRequestOptions<TResult, TVariables extends Variables>\n extends BusinessPlatformRequestOptions<TResult, TVariables> {\n organizationId: string\n}\n\n/**\n * Executes a GraphQL query against the Business Platform Organizations API. Uses typed documents.\n *\n * @param options - The options for the request.\n * @returns The response of the query of generic type <T>.\n */\nexport async function businessPlatformOrganizationsRequestDoc<TResult, TVariables extends Variables>(\n options: BusinessPlatformOrganizationsRequestOptions<TResult, TVariables>,\n): Promise<TResult> {\n return graphqlRequestDoc<TResult, TVariables>({\n query: options.query,\n ...(await setupOrganizationsRequest(options.token, options.organizationId)),\n variables: options.variables,\n unauthorizedHandler: options.unauthorizedHandler,\n })\n}\n", "import {buildHeaders, httpsAgent} from '../../../private/node/api/headers.js'\nimport {debugLogRequestInfo, errorHandler} from '../../../private/node/api/graphql.js'\nimport {addPublicMetadata, runWithTimer} from '../metadata.js'\nimport {retryAwareRequest} from '../../../private/node/api.js'\nimport {requestIdsCollection} from '../../../private/node/request-ids.js'\nimport {nonRandomUUID} from '../crypto.js'\nimport {\n cacheRetrieveOrRepopulate,\n ConfSchema,\n GraphQLRequestKey,\n TimeInterval,\n timeIntervalToMilliseconds,\n} from '../../../private/node/conf-store.js'\nimport {LocalStorage} from '../local-storage.js'\nimport {abortSignalFromRequestBehaviour, requestMode, RequestModeInput} from '../http.js'\nimport {CLI_KIT_VERSION} from '../../common/version.js'\nimport {\n GraphQLClient,\n rawRequest,\n RequestDocument,\n resolveRequestDocument,\n Variables,\n ClientError,\n} from 'graphql-request'\nimport {TypedDocumentNode} from '@graphql-typed-document-node/core'\n\n// to replace TVariable type when there graphql query has no variables\nexport type Exact<T extends {[key: string]: unknown}> = {[K in keyof T]: T[K]}\n\nexport interface GraphQLVariables {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any\n}\n\nexport type GraphQLResponse<T> = Awaited<ReturnType<typeof rawRequest<T>>>\n\nexport interface CacheOptions {\n cacheTTL: TimeInterval\n cacheExtraKey?: string\n cacheStore?: LocalStorage<ConfSchema>\n}\n\ninterface RefreshedTokenOnAuthorizedResponse {\n token?: string\n}\n\nexport type RefreshTokenOnAuthorizedResponse = Promise<RefreshedTokenOnAuthorizedResponse>\n\nexport interface UnauthorizedHandler {\n type: 'token_refresh'\n handler: () => RefreshTokenOnAuthorizedResponse\n}\n\ninterface GraphQLRequestBaseOptions<TResult> {\n api: string\n url: string\n token?: string\n addedHeaders?: {[header: string]: string}\n responseOptions?: GraphQLResponseOptions<TResult>\n cacheOptions?: CacheOptions\n preferredBehaviour?: RequestModeInput\n}\n\ntype PerformGraphQLRequestOptions<TResult> = GraphQLRequestBaseOptions<TResult> & {\n queryAsString: string\n variables?: Variables\n unauthorizedHandler?: UnauthorizedHandler\n}\n\nexport type GraphQLRequestOptions<T> = GraphQLRequestBaseOptions<T> & {\n query: RequestDocument\n variables?: Variables\n unauthorizedHandler?: UnauthorizedHandler\n}\n\nexport type GraphQLRequestDocOptions<TResult, TVariables> = GraphQLRequestBaseOptions<TResult> & {\n query: TypedDocumentNode<TResult, TVariables> | TypedDocumentNode<TResult, Exact<{[key: string]: never}>>\n variables?: TVariables\n unauthorizedHandler?: UnauthorizedHandler\n}\n\nexport interface GraphQLResponseOptions<T> {\n handleErrors?: boolean\n onResponse?: (response: GraphQLResponse<T>) => void\n}\n\nasync function createGraphQLClient({\n url,\n addedHeaders,\n token,\n}: {\n url: string\n token: string | undefined\n addedHeaders?: {[header: string]: string}\n}) {\n const headers = {\n ...addedHeaders,\n ...buildHeaders(token),\n }\n const clientOptions = {agent: await httpsAgent(), headers}\n\n return {\n client: new GraphQLClient(url, clientOptions),\n headers,\n }\n}\n\n/**\n * Handles execution of a GraphQL query.\n *\n * @param options - GraphQL request options.\n */\nasync function performGraphQLRequest<TResult>(options: PerformGraphQLRequestOptions<TResult>) {\n const {token, addedHeaders, queryAsString, variables, api, url, responseOptions, unauthorizedHandler, cacheOptions} =\n options\n const behaviour = requestMode(options.preferredBehaviour ?? 'default')\n\n let {headers, client} = await createGraphQLClient({url, addedHeaders, token})\n debugLogRequestInfo(api, queryAsString, url, variables, headers)\n\n const rawGraphQLRequest = async () => {\n let fullResponse: GraphQLResponse<TResult>\n // there is a errorPolicy option which returns rather than throwing on errors, but we _do_ ultimately want to\n // throw.\n try {\n // mapping signal to any due to polyfill meaning types don't exactly match (but are functionally equivalent)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n client.requestConfig.signal = abortSignalFromRequestBehaviour(behaviour) as any\n fullResponse = await client.rawRequest<TResult>(queryAsString, variables)\n await logLastRequestIdFromResponse(fullResponse)\n return fullResponse\n } catch (error) {\n if (error instanceof ClientError) {\n // error.response does have a headers property like a normal response, but it's not typed as such.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n await logLastRequestIdFromResponse(error.response as any)\n }\n throw error\n }\n }\n\n const tokenRefreshHandler = unauthorizedHandler?.handler\n\n const tokenRefreshUnauthorizedHandlerFunction = tokenRefreshHandler\n ? async () => {\n const refreshTokenResult = await tokenRefreshHandler()\n if (refreshTokenResult.token) {\n const {client: newClient, headers: newHeaders} = await createGraphQLClient({\n url,\n addedHeaders,\n token: refreshTokenResult.token,\n })\n client = newClient\n headers = newHeaders\n return true\n } else {\n return false\n }\n }\n : undefined\n\n const request = () =>\n retryAwareRequest(\n {request: rawGraphQLRequest, url, ...behaviour},\n responseOptions?.handleErrors === false ? undefined : errorHandler(api),\n )\n\n const executeWithTimer = () =>\n runWithTimer('cmd_all_timing_network_ms')(async () => {\n let response\n try {\n response = await request()\n } catch (error) {\n if (error instanceof ClientError && error.response.status === 401 && tokenRefreshUnauthorizedHandlerFunction) {\n if (await tokenRefreshUnauthorizedHandlerFunction()) {\n response = await request()\n } else {\n throw error\n }\n } else {\n throw error\n }\n }\n\n if (responseOptions?.onResponse) {\n responseOptions.onResponse(response)\n }\n return response.data\n })\n\n // If there is no cache config for this query, just execute it and return the result.\n if (cacheOptions === undefined) {\n return executeWithTimer()\n }\n\n const {cacheTTL, cacheExtraKey, cacheStore} = cacheOptions\n\n // The cache key is a combination of the hashed query and variables, with an optional extra key provided by the user.\n const queryHash = nonRandomUUID(queryAsString)\n const variablesHash = nonRandomUUID(JSON.stringify(variables ?? {}))\n const cacheKey: GraphQLRequestKey = `q-${queryHash}-${variablesHash}-${CLI_KIT_VERSION}-${cacheExtraKey ?? ''}`\n\n const result = await cacheRetrieveOrRepopulate(\n cacheKey,\n async () => {\n const result = await executeWithTimer()\n return JSON.stringify(result)\n },\n timeIntervalToMilliseconds(cacheTTL),\n cacheStore,\n )\n\n return JSON.parse(result) as TResult\n}\n\nasync function logLastRequestIdFromResponse(response: GraphQLResponse<unknown>) {\n try {\n const requestId = response.headers.get('x-request-id')\n requestIdsCollection.addRequestId(requestId)\n await addPublicMetadata(() => ({\n cmd_all_last_graphql_request_id: requestId ?? undefined,\n }))\n // eslint-disable-next-line no-catch-all/no-catch-all\n } catch {\n // no problem if unable to get request ID.\n }\n}\n\n/**\n * Executes a GraphQL query to an endpoint.\n *\n * @param options - GraphQL request options.\n * @returns The response of the query of generic type <T>.\n */\nexport async function graphqlRequest<T>(options: GraphQLRequestOptions<T>): Promise<T> {\n return performGraphQLRequest<T>({\n ...options,\n queryAsString: options.query as string,\n })\n}\n\n/**\n * Executes a GraphQL query to an endpoint. Uses typed documents.\n *\n * @param options - GraphQL request options.\n * @returns The response of the query of generic type <TResult>.\n */\nexport async function graphqlRequestDoc<TResult, TVariables extends Variables>(\n options: GraphQLRequestDocOptions<TResult, TVariables>,\n): Promise<TResult> {\n return performGraphQLRequest<TResult>({\n ...options,\n queryAsString: resolveRequestDocument(options.query).query,\n })\n}\n", "import {GraphQLClientError, sanitizedHeadersOutput} from './headers.js'\nimport {sanitizeURL} from './urls.js'\nimport {stringifyMessage, outputContent, outputToken, outputDebug} from '../../../public/node/output.js'\nimport {AbortError} from '../../../public/node/error.js'\nimport {ClientError, Variables} from 'graphql-request'\n\nexport function debugLogRequestInfo(\n api: string,\n query: string,\n url: string,\n variables?: Variables,\n headers: {[key: string]: string} = {},\n) {\n outputDebug(outputContent`Sending ${outputToken.json(api)} GraphQL request:\n ${outputToken.raw(query.toString().trim())}\n${variables ? `\\nWith variables:\\n${sanitizeVariables(variables)}\\n` : ''}\nWith request headers:\n${sanitizedHeadersOutput(headers)}\\n\nto ${sanitizeURL(url)}`)\n}\n\nexport function sanitizeVariables(variables: Variables): string {\n const result: Variables = {...variables}\n const sensitiveKeys = ['apiKey', 'serialized_script']\n\n const sanitizedResult = sanitizeDeepVariables(result, sensitiveKeys)\n\n return JSON.stringify(sanitizedResult, null, 2)\n}\n\nfunction sanitizeDeepVariables(value: unknown, sensitiveKeys: string[]): unknown {\n // Checking for JSON\n if (typeof value === 'string') {\n try {\n const parsed = JSON.parse(value)\n if (typeof parsed === 'object' && parsed !== null) {\n const sanitized = sanitizeDeepVariables(parsed, sensitiveKeys)\n return JSON.stringify(sanitized, null)\n }\n // eslint-disable-next-line no-catch-all/no-catch-all\n } catch (error) {\n return value\n }\n }\n\n if (typeof value !== 'object' || value === null) {\n return value\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => sanitizeDeepVariables(item, sensitiveKeys))\n }\n\n const result: Variables = {}\n\n for (const [key, val] of Object.entries(value)) {\n if (sensitiveKeys.includes(key) && typeof val === 'string') {\n result[key] = '*****'\n continue\n }\n\n result[key] = sanitizeDeepVariables(val, sensitiveKeys)\n }\n\n return result\n}\n\nexport function errorHandler(api: string): (error: unknown, requestId?: string) => unknown {\n return (error: unknown, requestId?: string) => {\n if (error instanceof ClientError) {\n const {status} = error.response\n let errorMessage = stringifyMessage(outputContent`\nThe ${outputToken.raw(api)} GraphQL API responded unsuccessfully with${\n status === 200 ? '' : ` the HTTP status ${status} and`\n } errors:\n\n${outputToken.json(error.response.errors)}\n `)\n if (requestId) {\n errorMessage += `\nRequest ID: ${requestId}\n`\n }\n let mappedError: Error\n if (status < 500) {\n mappedError = new GraphQLClientError(errorMessage, status, error.response.errors)\n } else {\n mappedError = new AbortError(errorMessage)\n }\n mappedError.stack = error.stack\n return mappedError\n } else {\n return error\n }\n }\n}\n", "export const MAX_REQUEST_IDS = 100\n\n/**\n * Manages collection of request IDs during command execution\n */\nclass RequestIDCollection {\n private static instance: RequestIDCollection\n\n static getInstance(): RequestIDCollection {\n if (!RequestIDCollection.instance) {\n RequestIDCollection.instance = new RequestIDCollection()\n }\n return RequestIDCollection.instance\n }\n\n private requestIds: string[] = []\n\n /**\n * Add a request ID to the collection\n * We only report the first MAX_REQUEST_IDS request IDs.\n */\n addRequestId(requestId: string | undefined | null) {\n if (requestId && this.requestIds.length < MAX_REQUEST_IDS) {\n this.requestIds.push(requestId)\n }\n }\n\n /**\n * Get all collected request IDs\n */\n getRequestIds(): string[] {\n return this.requestIds\n }\n\n /**\n * Clear all stored request IDs\n */\n clear() {\n this.requestIds = []\n }\n}\n\nexport const requestIdsCollection = RequestIDCollection.getInstance()\n", "import {\n graphqlRequest,\n GraphQLVariables,\n GraphQLResponse,\n graphqlRequestDoc,\n CacheOptions,\n UnauthorizedHandler,\n} from './graphql.js'\nimport {addCursorAndFiltersToAppLogsUrl} from './utilities.js'\nimport {partnersFqdn} from '../context/fqdn.js'\nimport {setNextDeprecationDate} from '../../../private/node/context/deprecations-store.js'\nimport {getPackageManager} from '../node-package-manager.js'\nimport {cwd} from '../path.js'\nimport {AbortError} from '../error.js'\nimport {formatPackageManagerCommand} from '../output.js'\nimport {RequestModeInput} from '../http.js'\nimport Bottleneck from 'bottleneck'\nimport {Variables} from 'graphql-request'\nimport {TypedDocumentNode} from '@graphql-typed-document-node/core'\n\n// API Rate limiter for partners API (Limit is 10 requests per second)\n// Jobs are launched every 150ms to add an extra 50ms margin per request.\n// Only 10 requests can be executed concurrently.\nconst limiter = new Bottleneck({\n minTime: 150,\n maxConcurrent: 10,\n})\n\n/**\n * Sets up the request to the Partners API.\n *\n * @param token - Partners token.\n */\nasync function setupRequest(token: string) {\n const api = 'Partners'\n const fqdn = await partnersFqdn()\n const url = `https://${fqdn}/api/cli/graphql`\n return {\n token,\n api,\n url,\n responseOptions: {onResponse: handleDeprecations},\n }\n}\n\n/**\n * Executes a GraphQL query against the Partners API.\n *\n * @param query - GraphQL query to execute.\n * @param token - Partners token.\n * @param variables - GraphQL variables to pass to the query.\n * @param cacheOptions - Cache options.\n * @param preferredBehaviour - Preferred behaviour for the request.\n * @param unauthorizedHandler - Optional handler for unauthorized requests.\n * @returns The response of the query of generic type <T>.\n */\nexport async function partnersRequest<T>(\n query: string,\n token: string,\n variables?: GraphQLVariables,\n cacheOptions?: CacheOptions,\n preferredBehaviour?: RequestModeInput,\n unauthorizedHandler?: UnauthorizedHandler,\n): Promise<T> {\n const opts = await setupRequest(token)\n const result = limiter.schedule(() =>\n graphqlRequest<T>({\n ...opts,\n query,\n variables,\n cacheOptions,\n preferredBehaviour,\n unauthorizedHandler,\n }),\n )\n\n return result\n}\n\nexport const generateFetchAppLogUrl = async (\n cursor?: string,\n filters?: {\n status?: string\n source?: string\n },\n): Promise<string> => {\n const fqdn = await partnersFqdn()\n const url = `https://${fqdn}/app_logs/poll`\n return addCursorAndFiltersToAppLogsUrl(url, cursor, filters)\n}\n\n/**\n * Executes a GraphQL query against the Partners API. Uses typed documents.\n *\n * @param query - GraphQL query to execute.\n * @param token - Partners token.\n * @param variables - GraphQL variables to pass to the query.\n * @param preferredBehaviour - Preferred behaviour for the request.\n * @param unauthorizedHandler - Optional handler for unauthorized requests.\n * @returns The response of the query of generic type <TResult>.\n */\nexport async function partnersRequestDoc<TResult, TVariables extends Variables>(\n query: TypedDocumentNode<TResult, TVariables>,\n token: string,\n variables?: TVariables,\n preferredBehaviour?: RequestModeInput,\n unauthorizedHandler?: UnauthorizedHandler,\n): Promise<TResult> {\n try {\n const opts = await setupRequest(token)\n const result = limiter.schedule(() =>\n graphqlRequestDoc<TResult, TVariables>({\n ...opts,\n query,\n variables,\n preferredBehaviour,\n unauthorizedHandler,\n }),\n )\n\n return result\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n if (error.errors?.[0]?.extensions?.type === 'unsupported_client_version') {\n const packageManager = await getPackageManager(cwd())\n\n throw new AbortError(['Upgrade your CLI version to run this command.'], null, [\n ['Run', {command: formatPackageManagerCommand(packageManager, 'shopify upgrade')}],\n ])\n }\n\n throw error\n }\n}\n\ninterface Deprecation {\n supportedUntilDate?: string\n}\n\ninterface WithDeprecations {\n deprecations: Deprecation[]\n}\n\n/**\n * Sets the next deprecation date from [GraphQL response extensions](https://www.apollographql.com/docs/resources/graphql-glossary/#extensions)\n * if `response.extensions.deprecations` objects contain a `supportedUntilDate` (ISO 8601-formatted string).\n *\n * @param response - The response of the query.\n */\nexport function handleDeprecations<T>(response: GraphQLResponse<T>): void {\n if (!response.extensions) return\n\n const deprecationDates: Date[] = []\n for (const deprecation of (response.extensions as WithDeprecations).deprecations) {\n if (deprecation.supportedUntilDate) {\n deprecationDates.push(new Date(deprecation.supportedUntilDate))\n }\n }\n\n setNextDeprecationDate(deprecationDates)\n}\n", "export const addCursorAndFiltersToAppLogsUrl = (\n baseUrl: string,\n cursor?: string,\n filters?: {\n status?: string\n source?: string\n },\n): string => {\n const url = new URL(baseUrl)\n\n if (cursor) {\n url.searchParams.append('cursor', cursor)\n }\n\n if (filters?.status) {\n url.searchParams.append('status', filters.status)\n }\n\n if (filters?.source) {\n url.searchParams.append('source', filters.source)\n }\n\n return url.toString()\n}\n", "interface DeprecationsStore {\n nextDeprecationDate: Date | undefined\n}\n\nconst deprecationsStore: DeprecationsStore = {\n nextDeprecationDate: undefined,\n}\n\n/**\n * Get the earliest date in the future when deprecations will no longer be supported, if any.\n *\n * @returns The next deprecation date.\n */\nexport function getNextDeprecationDate(): Date | undefined {\n return deprecationsStore.nextDeprecationDate\n}\n\n/**\n * Set the next deprecation date to the earliest date in the future.\n *\n * @param dates - Dates when deprecations will no longer be supported.\n */\nexport function setNextDeprecationDate(dates: Date[]): Date | undefined {\n if (dates.length < 1) return\n\n const earliestFutureDateTime = earliestDateTimeAfter(Date.now(), dates)\n if (!earliestFutureDateTime) return\n\n const nextDeprecationDate = getNextDeprecationDate()\n if (!nextDeprecationDate || earliestFutureDateTime < nextDeprecationDate.getTime()) {\n deprecationsStore.nextDeprecationDate = new Date(earliestFutureDateTime)\n }\n}\n\nfunction earliestDateTimeAfter(afterTime: number, dates: Date[]): number | undefined {\n const times = dates.map((date) => date.getTime())\n return times.sort().find((time) => time > afterTime)\n}\n", "export { compactDecrypt } from './jwe/compact/decrypt.js';\nexport { flattenedDecrypt } from './jwe/flattened/decrypt.js';\nexport { generalDecrypt } from './jwe/general/decrypt.js';\nexport { GeneralEncrypt } from './jwe/general/encrypt.js';\nexport { compactVerify } from './jws/compact/verify.js';\nexport { flattenedVerify } from './jws/flattened/verify.js';\nexport { generalVerify } from './jws/general/verify.js';\nexport { jwtVerify } from './jwt/verify.js';\nexport { jwtDecrypt } from './jwt/decrypt.js';\nexport { CompactEncrypt } from './jwe/compact/encrypt.js';\nexport { FlattenedEncrypt } from './jwe/flattened/encrypt.js';\nexport { CompactSign } from './jws/compact/sign.js';\nexport { FlattenedSign } from './jws/flattened/sign.js';\nexport { GeneralSign } from './jws/general/sign.js';\nexport { SignJWT } from './jwt/sign.js';\nexport { EncryptJWT } from './jwt/encrypt.js';\nexport { calculateJwkThumbprint, calculateJwkThumbprintUri } from './jwk/thumbprint.js';\nexport { EmbeddedJWK } from './jwk/embedded.js';\nexport { createLocalJWKSet } from './jwks/local.js';\nexport { createRemoteJWKSet, jwksCache, experimental_jwksCache } from './jwks/remote.js';\nexport { UnsecuredJWT } from './jwt/unsecured.js';\nexport { exportPKCS8, exportSPKI, exportJWK } from './key/export.js';\nexport { importSPKI, importPKCS8, importX509, importJWK } from './key/import.js';\nexport { decodeProtectedHeader } from './util/decode_protected_header.js';\nexport { decodeJwt } from './util/decode_jwt.js';\nexport * as errors from './util/errors.js';\nexport { generateKeyPair } from './key/generate_key_pair.js';\nexport { generateSecret } from './key/generate_secret.js';\nexport * as base64url from './util/base64url.js';\nexport { default as cryptoRuntime } from './util/runtime.js';\n", "import { Buffer } from 'node:buffer';\nimport { decoder } from '../lib/buffer_utils.js';\nfunction normalize(input) {\n let encoded = input;\n if (encoded instanceof Uint8Array) {\n encoded = decoder.decode(encoded);\n }\n return encoded;\n}\nconst encode = (input) => Buffer.from(input).toString('base64url');\nexport const decodeBase64 = (input) => new Uint8Array(Buffer.from(input, 'base64'));\nexport const encodeBase64 = (input) => Buffer.from(input).toString('base64');\nexport { encode };\nexport const decode = (input) => new Uint8Array(Buffer.from(normalize(input), 'base64url'));\n", "import digest from '../runtime/digest.js';\nexport const encoder = new TextEncoder();\nexport const decoder = new TextDecoder();\nconst MAX_INT32 = 2 ** 32;\nexport function concat(...buffers) {\n const size = buffers.reduce((acc, { length }) => acc + length, 0);\n const buf = new Uint8Array(size);\n let i = 0;\n for (const buffer of buffers) {\n buf.set(buffer, i);\n i += buffer.length;\n }\n return buf;\n}\nexport function p2s(alg, p2sInput) {\n return concat(encoder.encode(alg), new Uint8Array([0]), p2sInput);\n}\nfunction writeUInt32BE(buf, value, offset) {\n if (value < 0 || value >= MAX_INT32) {\n throw new RangeError(`value must be >= 0 and <= ${MAX_INT32 - 1}. Received ${value}`);\n }\n buf.set([value >>> 24, value >>> 16, value >>> 8, value & 0xff], offset);\n}\nexport function uint64be(value) {\n const high = Math.floor(value / MAX_INT32);\n const low = value % MAX_INT32;\n const buf = new Uint8Array(8);\n writeUInt32BE(buf, high, 0);\n writeUInt32BE(buf, low, 4);\n return buf;\n}\nexport function uint32be(value) {\n const buf = new Uint8Array(4);\n writeUInt32BE(buf, value);\n return buf;\n}\nexport function lengthAndInput(input) {\n return concat(uint32be(input.length), input);\n}\nexport async function concatKdf(secret, bits, value) {\n const iterations = Math.ceil((bits >> 3) / 32);\n const res = new Uint8Array(iterations * 32);\n for (let iter = 0; iter < iterations; iter++) {\n const buf = new Uint8Array(4 + secret.length + value.length);\n buf.set(uint32be(iter + 1));\n buf.set(secret, 4);\n buf.set(value, 4 + secret.length);\n res.set(await digest('sha256', buf), iter * 32);\n }\n return res.slice(0, bits >> 3);\n}\n", "export class JOSEError extends Error {\n static code = 'ERR_JOSE_GENERIC';\n code = 'ERR_JOSE_GENERIC';\n constructor(message, options) {\n super(message, options);\n this.name = this.constructor.name;\n Error.captureStackTrace?.(this, this.constructor);\n }\n}\nexport class JWTClaimValidationFailed extends JOSEError {\n static code = 'ERR_JWT_CLAIM_VALIDATION_FAILED';\n code = 'ERR_JWT_CLAIM_VALIDATION_FAILED';\n claim;\n reason;\n payload;\n constructor(message, payload, claim = 'unspecified', reason = 'unspecified') {\n super(message, { cause: { claim, reason, payload } });\n this.claim = claim;\n this.reason = reason;\n this.payload = payload;\n }\n}\nexport class JWTExpired extends JOSEError {\n static code = 'ERR_JWT_EXPIRED';\n code = 'ERR_JWT_EXPIRED';\n claim;\n reason;\n payload;\n constructor(message, payload, claim = 'unspecified', reason = 'unspecified') {\n super(message, { cause: { claim, reason, payload } });\n this.claim = claim;\n this.reason = reason;\n this.payload = payload;\n }\n}\nexport class JOSEAlgNotAllowed extends JOSEError {\n static code = 'ERR_JOSE_ALG_NOT_ALLOWED';\n code = 'ERR_JOSE_ALG_NOT_ALLOWED';\n}\nexport class JOSENotSupported extends JOSEError {\n static code = 'ERR_JOSE_NOT_SUPPORTED';\n code = 'ERR_JOSE_NOT_SUPPORTED';\n}\nexport class JWEDecryptionFailed extends JOSEError {\n static code = 'ERR_JWE_DECRYPTION_FAILED';\n code = 'ERR_JWE_DECRYPTION_FAILED';\n constructor(message = 'decryption operation failed', options) {\n super(message, options);\n }\n}\nexport class JWEInvalid extends JOSEError {\n static code = 'ERR_JWE_INVALID';\n code = 'ERR_JWE_INVALID';\n}\nexport class JWSInvalid extends JOSEError {\n static code = 'ERR_JWS_INVALID';\n code = 'ERR_JWS_INVALID';\n}\nexport class JWTInvalid extends JOSEError {\n static code = 'ERR_JWT_INVALID';\n code = 'ERR_JWT_INVALID';\n}\nexport class JWKInvalid extends JOSEError {\n static code = 'ERR_JWK_INVALID';\n code = 'ERR_JWK_INVALID';\n}\nexport class JWKSInvalid extends JOSEError {\n static code = 'ERR_JWKS_INVALID';\n code = 'ERR_JWKS_INVALID';\n}\nexport class JWKSNoMatchingKey extends JOSEError {\n static code = 'ERR_JWKS_NO_MATCHING_KEY';\n code = 'ERR_JWKS_NO_MATCHING_KEY';\n constructor(message = 'no applicable key found in the JSON Web Key Set', options) {\n super(message, options);\n }\n}\nexport class JWKSMultipleMatchingKeys extends JOSEError {\n [Symbol.asyncIterator];\n static code = 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';\n code = 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';\n constructor(message = 'multiple matching keys found in the JSON Web Key Set', options) {\n super(message, options);\n }\n}\nexport class JWKSTimeout extends JOSEError {\n static code = 'ERR_JWKS_TIMEOUT';\n code = 'ERR_JWKS_TIMEOUT';\n constructor(message = 'request timed out', options) {\n super(message, options);\n }\n}\nexport class JWSSignatureVerificationFailed extends JOSEError {\n static code = 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';\n code = 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';\n constructor(message = 'signature verification failed', options) {\n super(message, options);\n }\n}\n", "function isObjectLike(value) {\n return typeof value === 'object' && value !== null;\n}\nexport default function isObject(input) {\n if (!isObjectLike(input) || Object.prototype.toString.call(input) !== '[object Object]') {\n return false;\n }\n if (Object.getPrototypeOf(input) === null) {\n return true;\n }\n let proto = input;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(input) === proto;\n}\n", "import * as base64url from '../runtime/base64url.js';\nexport const encode = base64url.encode;\nexport const decode = base64url.decode;\n", "import { decode as base64url } from './base64url.js';\nimport { decoder } from '../lib/buffer_utils.js';\nimport isObject from '../lib/is_object.js';\nimport { JWTInvalid } from './errors.js';\nexport function decodeJwt(jwt) {\n if (typeof jwt !== 'string')\n throw new JWTInvalid('JWTs must use Compact JWS serialization, JWT must be a string');\n const { 1: payload, length } = jwt.split('.');\n if (length === 5)\n throw new JWTInvalid('Only JWTs using Compact JWS serialization can be decoded');\n if (length !== 3)\n throw new JWTInvalid('Invalid JWT');\n if (!payload)\n throw new JWTInvalid('JWTs must contain a payload');\n let decoded;\n try {\n decoded = base64url(payload);\n }\n catch {\n throw new JWTInvalid('Failed to base64url decode the payload');\n }\n let result;\n try {\n result = JSON.parse(decoder.decode(decoded));\n }\n catch {\n throw new JWTInvalid('Failed to parse the decoded payload as JSON');\n }\n if (!isObject(result))\n throw new JWTInvalid('Invalid JWT Claims Set');\n return result;\n}\n", "import {getLastSeenAuthMethod} from './session.js'\nimport {hashString} from '../../public/node/crypto.js'\nimport {getPackageManager, packageManagerFromUserAgent} from '../../public/node/node-package-manager.js'\nimport BaseCommand from '../../public/node/base-command.js'\nimport {CommandContent} from '../../public/node/hooks/prerun.js'\nimport * as metadata from '../../public/node/metadata.js'\nimport {platformAndArch} from '../../public/node/os.js'\nimport {ciPlatform, cloudEnvironment, macAddress} from '../../public/node/context/local.js'\nimport {cwd} from '../../public/node/path.js'\nimport {currentProcessIsGlobal} from '../../public/node/is-global.js'\nimport {isWsl} from '../../public/node/system.js'\nimport {Command, Interfaces} from '@oclif/core'\n\ninterface StartOptions {\n commandContent: CommandContent\n args: string[]\n currentTime?: number\n commandClass?: Command.Class | typeof BaseCommand\n}\n\nexport async function startAnalytics({\n commandContent,\n args,\n currentTime = new Date().getTime(),\n commandClass,\n}: StartOptions): Promise<void> {\n let startCommand: string = commandContent.command\n if (commandClass && Object.prototype.hasOwnProperty.call(commandClass, 'analyticsNameOverride')) {\n startCommand = (commandClass as typeof BaseCommand).analyticsNameOverride() ?? commandContent.command\n }\n\n let pluginName = commandClass?.plugin?.name\n if (commandClass && 'customPluginName' in commandClass) {\n pluginName = commandClass.customPluginName as string\n }\n\n await metadata.addSensitiveMetadata(() => ({\n commandStartOptions: {\n startTime: currentTime,\n startCommand,\n startArgs: args,\n },\n }))\n\n await metadata.addPublicMetadata(() => ({\n cmd_all_launcher: packageManagerFromUserAgent(),\n cmd_all_alias_used: commandContent.alias,\n cmd_all_topic: commandContent.topic,\n cmd_all_plugin: pluginName,\n cmd_all_force: flagIncluded('force', commandClass) ? args.includes('--force') : undefined,\n }))\n}\n\ninterface EnvironmentData {\n uname: string\n env_ci: boolean\n env_ci_platform?: string\n env_plugin_installed_any_custom: boolean\n env_plugin_installed_shopify: string\n env_shell: string\n env_web_ide: string | undefined\n env_device_id: string\n env_cloud: string\n env_package_manager: string\n env_is_global: boolean\n env_auth_method: string\n env_is_wsl: boolean\n env_build_repository: string\n}\n\nexport async function getEnvironmentData(config: Interfaces.Config): Promise<EnvironmentData> {\n const ciplatform = ciPlatform()\n\n const pluginNames = getPluginNames(config)\n const shopifyPlugins = pluginNames.filter((plugin) => plugin.startsWith('@shopify/'))\n\n const {platform, arch} = platformAndArch()\n\n return {\n uname: `${platform} ${arch}`,\n env_ci: ciplatform.isCI,\n env_ci_platform: ciplatform.name,\n env_plugin_installed_any_custom: pluginNames.length !== shopifyPlugins.length,\n env_plugin_installed_shopify: JSON.stringify(shopifyPlugins),\n env_shell: config.shell,\n env_web_ide: cloudEnvironment().editor ? cloudEnvironment().platform : undefined,\n env_device_id: hashString(await macAddress()),\n env_cloud: cloudEnvironment().platform,\n env_package_manager: await getPackageManager(cwd()),\n env_is_global: currentProcessIsGlobal(),\n env_auth_method: await getLastSeenAuthMethod(),\n env_is_wsl: await isWsl(),\n env_build_repository: process.env.SHOPIFY_CLI_BUILD_REPO ?? 'unknown',\n }\n}\n\nexport async function getSensitiveEnvironmentData(config: Interfaces.Config) {\n return {\n env_plugin_installed_all: JSON.stringify(getPluginNames(config)),\n env_shopify_variables: JSON.stringify(getShopifyEnvironmentVariables()),\n }\n}\n\nfunction getShopifyEnvironmentVariables() {\n return Object.fromEntries(Object.entries(process.env).filter(([key]) => key.startsWith('SHOPIFY_')))\n}\n\nfunction getPluginNames(config: Interfaces.Config) {\n const pluginNames = [...config.plugins.keys()]\n return pluginNames.sort().filter((plugin) => !plugin.startsWith('@oclif/'))\n}\n\nfunction flagIncluded(flag: string, commandClass?: Command.Class | typeof BaseCommand) {\n if (!commandClass) return false\n\n const commandFlags = commandClass.flags ?? {}\n return Object.keys(commandFlags).includes(flag)\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,+FAAAA,UAAA;AAAA;AAAA;AAEA,QAAMC,MAAK,UAAQ,IAAI;AAGvB,aAAS,QAAQ,SAASC,UAAS;AASlC,aARI,SAAOA,SAAQ,YAAa,aAAa,QAAQ,aAAaA,SAAQ,YAItEA,SAAQ,cAAc,KAAK,QAAQ,WAAW,UAI9CA,SAAQ,cAAc,KAAK,QAAQ,WAAW;AAAA,IAKnD;AAGA,aAAS,cAAc,eAAeA,WAAU,CAAC,GAAG;AACnD,UAAM,YAAYD,IAAG,kBAAkB,EAAE,aAAa;AACtD,UAAI,CAAC;AACJ,cAAM,IAAI,MAAM,sBAAsB,aAAa,kBAAkB;AAGtE,UAAM,SAAS,CAAC;AAGhB,eAAW,WAAW;AACrB,QAAI,QAAQ,SAASC,QAAO,KAC3B,OAAO,KAAK,OAAO;AAIrB,aAAO;AAAA,IACR;AAYA,IAAAF,SAAQ,OAAO,SAAU,eAAeE,UAAS;AAChD,UAAM,YAAY,cAAc,eAAeA,QAAO;AAEtD,UAAI,UAAU,WAAW;AACxB,cAAM,IAAI,MAAM,8CAA8C,aAAa,GAAG;AAG/E,aAAO,UAAU,CAAC,EAAE;AAAA,IACrB;AAYA,IAAAF,SAAQ,QAAQ,SAAU,eAAeE,UAAS;AACjD,aAAO,cAAc,eAAeA,QAAO,EAAE,IAAI,CAAC,YAAY,QAAQ,OAAO;AAAA,IAC9E;AAYA,IAAAF,SAAQ,SAAS,SAAU,IAAIE,UAAS;AACvC,UAAM,aAAaD,IAAG,kBAAkB,GAClC,iBAAiB,OAAO,KAAK,UAAU;AAE7C,eAAW,iBAAiB;AAC3B,iBAAW,WAAW,WAAW,aAAa;AAC7C,cAAI,QAAQ,YAAY,MAAM,QAAQ,SAASC,QAAO;AACrD,mBAAO;AAKV,YAAM,IAAI,MAAM,sDAAsD,EAAE,GAAG;AAAA,IAC5E;AAWA,IAAAF,SAAQ,eAAe,SAAUE,UAAS;AACzC,UAAM,aAAaD,IAAG,kBAAkB,GAClC,iBAAiB,OAAO,KAAK,UAAU;AAE7C,eAAW,iBAAiB;AAC3B,YAAI,cAAc,eAAeC,QAAO,EAAE,SAAS;AAClD,iBAAO;AAIT,YAAM,IAAI,MAAM,mCAAmC;AAAA,IACpD;AAWA,IAAAF,SAAQ,gBAAgB,SAAUE,UAAS;AAC1C,UAAM,aAAaD,IAAG,kBAAkB,GAClC,iBAAiB,OAAO,KAAK,UAAU,GAEvC,SAAS,CAAC;AAEhB,eAAW,iBAAiB;AAC3B,QAAI,cAAc,eAAeC,QAAO,EAAE,SAAS,KAClD,OAAO,KAAK,aAAa;AAI3B,aAAO;AAAA,IACR;AAAA;AAAA;;;AC/IA;AAAA,gFAAAC,UAAAC,SAAA;AAAA;AAAA;AAEA,QAAI,oBAAoB,SAA2B,OAAO;AACzD,aAAO,gBAAgB,KAAK,KACxB,CAAC,UAAU,KAAK;AAAA,IACrB;AAEA,aAAS,gBAAgB,OAAO;AAC/B,aAAO,CAAC,CAAC,SAAS,OAAO,SAAU;AAAA,IACpC;AAEA,aAAS,UAAU,OAAO;AACzB,UAAI,cAAc,OAAO,UAAU,SAAS,KAAK,KAAK;AAEtD,aAAO,gBAAgB,qBACnB,gBAAgB,mBAChB,eAAe,KAAK;AAAA,IACzB;AAGA,QAAI,eAAe,OAAO,UAAW,cAAc,OAAO,KACtD,qBAAqB,eAAe,OAAO,IAAI,eAAe,IAAI;AAEtE,aAAS,eAAe,OAAO;AAC9B,aAAO,MAAM,aAAa;AAAA,IAC3B;AAEA,aAAS,YAAY,KAAK;AACzB,aAAO,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;AAAA,IACnC;AAEA,aAAS,8BAA8B,OAAOC,UAAS;AACtD,aAAQA,SAAQ,UAAU,MAASA,SAAQ,kBAAkB,KAAK,IAC/D,UAAU,YAAY,KAAK,GAAG,OAAOA,QAAO,IAC5C;AAAA,IACJ;AAEA,aAAS,kBAAkB,QAAQ,QAAQA,UAAS;AACnD,aAAO,OAAO,OAAO,MAAM,EAAE,IAAI,SAAS,SAAS;AAClD,eAAO,8BAA8B,SAASA,QAAO;AAAA,MACtD,CAAC;AAAA,IACF;AAEA,aAAS,iBAAiB,KAAKA,UAAS;AACvC,UAAI,CAACA,SAAQ;AACZ,eAAO;AAER,UAAI,cAAcA,SAAQ,YAAY,GAAG;AACzC,aAAO,OAAO,eAAgB,aAAa,cAAc;AAAA,IAC1D;AAEA,aAAS,gCAAgC,QAAQ;AAChD,aAAO,OAAO,wBACX,OAAO,sBAAsB,MAAM,EAAE,OAAO,SAAS,QAAQ;AAC9D,eAAO,OAAO,qBAAqB,KAAK,QAAQ,MAAM;AAAA,MACvD,CAAC,IACC,CAAC;AAAA,IACL;AAEA,aAAS,QAAQ,QAAQ;AACxB,aAAO,OAAO,KAAK,MAAM,EAAE,OAAO,gCAAgC,MAAM,CAAC;AAAA,IAC1E;AAEA,aAAS,mBAAmB,QAAQ,UAAU;AAC7C,UAAI;AACH,eAAO,YAAY;AAAA,MACpB,QAAW;AACV,eAAO;AAAA,MACR;AAAA,IACD;AAGA,aAAS,iBAAiB,QAAQ,KAAK;AACtC,aAAO,mBAAmB,QAAQ,GAAG,KACjC,EAAE,OAAO,eAAe,KAAK,QAAQ,GAAG,KACvC,OAAO,qBAAqB,KAAK,QAAQ,GAAG;AAAA,IAClD;AAEA,aAAS,YAAY,QAAQ,QAAQA,UAAS;AAC7C,UAAI,cAAc,CAAC;AACnB,aAAIA,SAAQ,kBAAkB,MAAM,KACnC,QAAQ,MAAM,EAAE,QAAQ,SAAS,KAAK;AACrC,oBAAY,GAAG,IAAI,8BAA8B,OAAO,GAAG,GAAGA,QAAO;AAAA,MACtE,CAAC,GAEF,QAAQ,MAAM,EAAE,QAAQ,SAAS,KAAK;AACrC,QAAI,iBAAiB,QAAQ,GAAG,MAI5B,mBAAmB,QAAQ,GAAG,KAAKA,SAAQ,kBAAkB,OAAO,GAAG,CAAC,IAC3E,YAAY,GAAG,IAAI,iBAAiB,KAAKA,QAAO,EAAE,OAAO,GAAG,GAAG,OAAO,GAAG,GAAGA,QAAO,IAEnF,YAAY,GAAG,IAAI,8BAA8B,OAAO,GAAG,GAAGA,QAAO;AAAA,MAEvE,CAAC,GACM;AAAA,IACR;AAEA,aAAS,UAAU,QAAQ,QAAQA,UAAS;AAC3C,MAAAA,WAAUA,YAAW,CAAC,GACtBA,SAAQ,aAAaA,SAAQ,cAAc,mBAC3CA,SAAQ,oBAAoBA,SAAQ,qBAAqB,mBAGzDA,SAAQ,gCAAgC;AAExC,UAAI,gBAAgB,MAAM,QAAQ,MAAM,GACpC,gBAAgB,MAAM,QAAQ,MAAM,GACpC,4BAA4B,kBAAkB;AAElD,aAAK,4BAEM,gBACHA,SAAQ,WAAW,QAAQ,QAAQA,QAAO,IAE1C,YAAY,QAAQ,QAAQA,QAAO,IAJnC,8BAA8B,QAAQA,QAAO;AAAA,IAMtD;AAEA,cAAU,MAAM,SAAsB,OAAOA,UAAS;AACrD,UAAI,CAAC,MAAM,QAAQ,KAAK;AACvB,cAAM,IAAI,MAAM,mCAAmC;AAGpD,aAAO,MAAM,OAAO,SAAS,MAAM,MAAM;AACxC,eAAO,UAAU,MAAM,MAAMA,QAAO;AAAA,MACrC,GAAG,CAAC,CAAC;AAAA,IACN;AAEA,QAAI,cAAc;AAElB,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACpIjB;AAAA,oFAAAE,UAAAC,SAAA;AAAA;AAAA,QAAI,iBAAiB;AAWrB,aAAS,gBAAgB,QAAQ,KAAK,OAAO;AAC3C,MAAI,OAAO,eAAe,iBACxB,eAAe,QAAQ,KAAK;AAAA,QAC1B,cAAgB;AAAA,QAChB,YAAc;AAAA,QACd;AAAA,QACA,UAAY;AAAA,MACd,CAAC,IAED,OAAO,GAAG,IAAI;AAAA,IAElB;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACxBjB;AAAA,gFAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,kBAAkB,2BAClB,KAAK,cAGL,cAAc,OAAO,WAGrB,iBAAiB,YAAY;AAYjC,aAAS,YAAY,QAAQ,KAAK,OAAO;AACvC,UAAI,WAAW,OAAO,GAAG;AACzB,OAAI,EAAE,eAAe,KAAK,QAAQ,GAAG,KAAK,GAAG,UAAU,KAAK,MACvD,UAAU,UAAa,EAAE,OAAO,YACnC,gBAAgB,QAAQ,KAAK,KAAK;AAAA,IAEtC;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AC3BjB;AAAA,4EAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,cAAc,uBACd,WAAW,oBACX,UAAU,mBACVC,YAAW,oBACX,QAAQ;AAYZ,aAAS,QAAQ,QAAQ,MAAM,OAAO,YAAY;AAChD,UAAI,CAACA,UAAS,MAAM;AAClB,eAAO;AAET,aAAO,SAAS,MAAM,MAAM;AAO5B,eALI,QAAQ,IACR,SAAS,KAAK,QACd,YAAY,SAAS,GACrB,SAAS,QAEN,UAAU,QAAQ,EAAE,QAAQ,UAAQ;AACzC,YAAI,MAAM,MAAM,KAAK,KAAK,CAAC,GACvB,WAAW;AAEf,YAAI,QAAQ,eAAe,QAAQ,iBAAiB,QAAQ;AAC1D,iBAAO;AAGT,YAAI,SAAS,WAAW;AACtB,cAAI,WAAW,OAAO,GAAG;AACzB,qBAAW,aAAa,WAAW,UAAU,KAAK,MAAM,IAAI,QACxD,aAAa,WACf,WAAWA,UAAS,QAAQ,IACxB,WACC,QAAQ,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAAA,QAE1C;AACA,oBAAY,QAAQ,KAAK,QAAQ,GACjC,SAAS,OAAO,GAAG;AAAA,MACrB;AACA,aAAO;AAAA,IACT;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;AClDjB;AAAA,+EAAAE,UAAAC,SAAA;AAAA;AAAA,QAAI,UAAU,mBACV,UAAU,mBACV,WAAW;AAWf,aAAS,WAAW,QAAQ,OAAO,WAAW;AAK5C,eAJI,QAAQ,IACR,SAAS,MAAM,QACf,SAAS,CAAC,GAEP,EAAE,QAAQ,UAAQ;AACvB,YAAI,OAAO,MAAM,KAAK,GAClB,QAAQ,QAAQ,QAAQ,IAAI;AAEhC,QAAI,UAAU,OAAO,IAAI,KACvB,QAAQ,QAAQ,SAAS,MAAM,MAAM,GAAG,KAAK;AAAA,MAEjD;AACA,aAAO;AAAA,IACT;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AC7BjB;AAAA,iFAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,UAAU,mBAGV,eAAe,QAAQ,OAAO,gBAAgB,MAAM;AAExD,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACLjB;AAAA,iFAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,YAAY,qBACZ,eAAe,wBACf,aAAa,sBACb,YAAY,qBAGZ,mBAAmB,OAAO,uBAS1B,eAAgB,mBAA+B,SAAS,QAAQ;AAElE,eADI,SAAS,CAAC,GACP;AACL,kBAAU,QAAQ,WAAW,MAAM,CAAC,GACpC,SAAS,aAAa,MAAM;AAE9B,aAAO;AAAA,IACT,IAPuC;AASvC,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACxBjB;AAAA,iFAAAC,UAAAC,SAAA;AAAA;AASA,aAAS,aAAa,QAAQ;AAC5B,UAAI,SAAS,CAAC;AACd,UAAI,UAAU;AACZ,iBAAS,OAAO,OAAO,MAAM;AAC3B,iBAAO,KAAK,GAAG;AAGnB,aAAO;AAAA,IACT;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACnBjB;AAAA,+EAAAC,UAAAC,SAAA;AAAA;AAAA,QAAIC,YAAW,oBACX,cAAc,uBACd,eAAe,wBAGf,cAAc,OAAO,WAGrB,iBAAiB,YAAY;AASjC,aAAS,WAAW,QAAQ;AAC1B,UAAI,CAACA,UAAS,MAAM;AAClB,eAAO,aAAa,MAAM;AAE5B,UAAI,UAAU,YAAY,MAAM,GAC5B,SAAS,CAAC;AAEd,eAAS,OAAO;AACd,QAAM,OAAO,kBAAkB,WAAW,CAAC,eAAe,KAAK,QAAQ,GAAG,MACxE,OAAO,KAAK,GAAG;AAGnB,aAAO;AAAA,IACT;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;AChCjB;AAAA,0EAAAE,UAAAC,SAAA;AAAA;AAAA,QAAI,gBAAgB,yBAChB,aAAa,sBACb,cAAc;AAyBlB,aAAS,OAAO,QAAQ;AACtB,aAAO,YAAY,MAAM,IAAI,cAAc,QAAQ,EAAI,IAAI,WAAW,MAAM;AAAA,IAC9E;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AC/BjB;AAAA,iFAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,iBAAiB,0BACjB,eAAe,wBACf,SAAS;AAUb,aAAS,aAAa,QAAQ;AAC5B,aAAO,eAAe,QAAQ,QAAQ,YAAY;AAAA,IACpD;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AChBjB;AAAA,0EAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,WAAW,oBACX,eAAe,wBACf,aAAa,sBACb,eAAe;AAoBnB,aAASC,QAAO,QAAQ,WAAW;AACjC,UAAI,UAAU;AACZ,eAAO,CAAC;AAEV,UAAI,QAAQ,SAAS,aAAa,MAAM,GAAG,SAAS,MAAM;AACxD,eAAO,CAAC,IAAI;AAAA,MACd,CAAC;AACD,yBAAY,aAAa,SAAS,GAC3B,WAAW,QAAQ,OAAO,SAAS,OAAO,MAAM;AACrD,eAAO,UAAU,OAAO,KAAK,CAAC,CAAC;AAAA,MACjC,CAAC;AAAA,IACH;AAEA,IAAAD,QAAO,UAAUC;AAAA;AAAA;;;ACpCjB;AAAA,6EAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,kBAAkB,2BAClB,aAAa,sBACb,eAAe;AA8BnB,aAAS,UAAU,QAAQ,UAAU;AACnC,UAAI,SAAS,CAAC;AACd,wBAAW,aAAa,UAAU,CAAC,GAEnC,WAAW,QAAQ,SAAS,OAAO,KAAKC,SAAQ;AAC9C,wBAAgB,QAAQ,KAAK,SAAS,OAAO,KAAKA,OAAM,CAAC;AAAA,MAC3D,CAAC,GACM;AAAA,IACT;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;AC1CjB;AAAA,2EAAAE,UAAAC,SAAA;AAAA;AAAA,QAAI,cAAc;AA8BlB,aAAS,QAAQ,OAAO,OAAO;AAC7B,aAAO,YAAY,OAAO,KAAK;AAAA,IACjC;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AClCjB;AAAA,wEAAAC,UAAAC,SAAA;AAAA;AAcA,aAAS,KAAK,OAAO;AACnB,UAAI,SAAS,SAAS,OAAO,IAAI,MAAM;AACvC,aAAO,SAAS,MAAM,SAAS,CAAC,IAAI;AAAA,IACtC;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACnBjB;AAAA,kFAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,iBAAiB,0BACjB,cAAc,uBACd,WAAW,oBACX,oBAAoB,6BACpB,OAAO,gBAyBPC,kBAAiB,SAAS,SAAS,OAAO,QAAQ;AACpD,UAAI,aAAa,KAAK,MAAM;AAC5B,aAAI,kBAAkB,UAAU,MAC9B,aAAa,SAER,kBAAkB,KAAK,IAC1B,eAAe,OAAO,YAAY,QAAQ,GAAG,mBAAmB,EAAI,GAAG,QAAW,UAAU,IAC5F,CAAC;AAAA,IACP,CAAC;AAED,IAAAD,QAAO,UAAUC;AAAA;AAAA;;;ACvCjB;AAAA,6EAAAC,UAAAC,SAAA;AAAA;AAeA,aAASC,WAAU,OAAO;AAKxB,eAJI,QAAQ,IACR,SAAS,SAAS,OAAO,IAAI,MAAM,QACnC,SAAS,CAAC,GAEP,EAAE,QAAQ,UAAQ;AACvB,YAAI,OAAO,MAAM,KAAK;AACtB,eAAO,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC;AAAA,MAC1B;AACA,aAAO;AAAA,IACT;AAEA,IAAAD,QAAO,UAAUC;AAAA;AAAA;;;AC3BjB;AAAA,gFAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,WAAW;AAWf,aAAS,YAAY,QAAQ,OAAO;AAClC,aAAO,SAAS,OAAO,SAAS,KAAK;AACnC,eAAO,CAAC,KAAK,OAAO,GAAG,CAAC;AAAA,MAC1B,CAAC;AAAA,IACH;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACjBjB;AAAA,+EAAAC,UAAAC,SAAA;AAAA;AAOA,aAAS,WAAWC,MAAK;AACvB,UAAI,QAAQ,IACR,SAAS,MAAMA,KAAI,IAAI;AAE3B,aAAAA,KAAI,QAAQ,SAAS,OAAO;AAC1B,eAAO,EAAE,KAAK,IAAI,CAAC,OAAO,KAAK;AAAA,MACjC,CAAC,GACM;AAAA,IACT;AAEA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;ACjBjB;AAAA,kFAAAE,UAAAC,SAAA;AAAA;AAAA,QAAI,cAAc,uBACd,SAAS,kBACT,aAAa,sBACb,aAAa,sBAGb,SAAS,gBACT,SAAS;AASb,aAAS,cAAc,UAAU;AAC/B,aAAO,SAAS,QAAQ;AACtB,YAAI,MAAM,OAAO,MAAM;AACvB,eAAI,OAAO,SACF,WAAW,MAAM,IAEtB,OAAO,SACF,WAAW,MAAM,IAEnB,YAAY,QAAQ,SAAS,MAAM,CAAC;AAAA,MAC7C;AAAA,IACF;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AC7BjB;AAAA,2EAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,gBAAgB,yBAChB,OAAO,gBA0BPC,WAAU,cAAc,IAAI;AAEhC,IAAAD,QAAO,UAAUC;AAAA;AAAA;;;AC7BjB;AAAA,uEAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,UAAU;AA8Bd,aAASC,KAAI,QAAQ,MAAM,OAAO;AAChC,aAAO,UAAU,OAAO,SAAS,QAAQ,QAAQ,MAAM,KAAK;AAAA,IAC9D;AAEA,IAAAD,QAAO,UAAUC;AAAA;AAAA;;;AClCjB;AAAA,8EAAAC,UAAAC,SAAA;AAAA;AASA,aAAS,UAAU,OAAO,OAAO,KAAK;AACpC,UAAI,QAAQ,IACR,SAAS,MAAM;AAEnB,MAAI,QAAQ,MACV,QAAQ,CAAC,QAAQ,SAAS,IAAK,SAAS,QAE1C,MAAM,MAAM,SAAS,SAAS,KAC1B,MAAM,MACR,OAAO,SAET,SAAS,QAAQ,MAAM,IAAM,MAAM,UAAW,GAC9C,WAAW;AAGX,eADI,SAAS,MAAM,MAAM,GAClB,EAAE,QAAQ;AACf,eAAO,KAAK,IAAI,MAAM,QAAQ,KAAK;AAErC,aAAO;AAAA,IACT;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AC9BjB;AAAA,2EAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,UAAU,mBACV,YAAY;AAUhB,aAAS,OAAO,QAAQ,MAAM;AAC5B,aAAO,KAAK,SAAS,IAAI,SAAS,QAAQ,QAAQ,UAAU,MAAM,GAAG,EAAE,CAAC;AAAA,IAC1E;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACfjB;AAAA,8EAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,WAAW,oBACX,OAAO,gBACP,SAAS,kBACT,QAAQ;AAUZ,aAAS,UAAU,QAAQ,MAAM;AAC/B,oBAAO,SAAS,MAAM,MAAM,GAC5B,SAAS,OAAO,QAAQ,IAAI,GACrB,UAAU,QAAQ,OAAO,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC;AAAA,IAC1D;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACnBjB;AAAA,yEAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,YAAY;AA6BhB,aAASC,OAAM,QAAQ,MAAM;AAC3B,aAAO,UAAU,OAAO,KAAO,UAAU,QAAQ,IAAI;AAAA,IACvD;AAEA,IAAAD,QAAO,UAAUC;AAAA;AAAA;;;ACjCjB;AAAA,2EAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,WAAW,oBACX,SAAS,kBACT,cAAc,uBACd,UAAU,mBACV,cAAc,uBACd,WAAW,oBACX,cAAc,uBACd,eAAe,wBAGf,SAAS,gBACT,SAAS,gBAGT,cAAc,OAAO,WAGrB,iBAAiB,YAAY;AAmCjC,aAASC,SAAQ,OAAO;AACtB,UAAI,SAAS;AACX,eAAO;AAET,UAAI,YAAY,KAAK,MAChB,QAAQ,KAAK,KAAK,OAAO,SAAS,YAAY,OAAO,MAAM,UAAU,cACpE,SAAS,KAAK,KAAK,aAAa,KAAK,KAAK,YAAY,KAAK;AAC/D,eAAO,CAAC,MAAM;AAEhB,UAAI,MAAM,OAAO,KAAK;AACtB,UAAI,OAAO,UAAU,OAAO;AAC1B,eAAO,CAAC,MAAM;AAEhB,UAAI,YAAY,KAAK;AACnB,eAAO,CAAC,SAAS,KAAK,EAAE;AAE1B,eAAS,OAAO;AACd,YAAI,eAAe,KAAK,OAAO,GAAG;AAChC,iBAAO;AAGX,aAAO;AAAA,IACT;AAEA,IAAAD,QAAO,UAAUC;AAAA;AAAA;;;AC5EjB;AAAA,qFAAAC,UAAA;AAAA;AAAA;AAEA,IAAAA,SAAQ,OAAO,SAAU,UAAU,UAAU,OAAO,CAAC,GAAG;AACtD,UAAI,GAAG,KAAK;AAEZ,WAAK,KAAK;AACR,YAAI,SAAS,CAAC,GACd,KAAK,CAAC,KAAK,MAAM,SAAS,CAAC,MAAM,OAAO,MAAM;AAGhD,aAAO;AAAA,IACT;AAEA,IAAAA,SAAQ,YAAY,SAAU,UAAU,UAAU,OAAO,CAAC,GAAG;AAC3D,UAAI,GAAG;AAEP,WAAK,KAAK;AACR,YAAI,SAAS,CAAC,GAEV,SAAS,CAAC,MAAM,WAClB,KAAK,CAAC,IAAI;AAId,aAAO;AAAA,IACT;AAAA;AAAA;;;ACzBA;AAAA,qFAAAC,UAAAC,SAAA;AAAA;AAAA;AAEA,QAAI;AACJ,aAAS,MAAa;AAAA,MACpB,YAAY,MAAM,MAAM;AACtB,aAAK,OAAO,MACZ,KAAK,OAAO,MACZ,KAAK,SAAS,MACd,KAAK,QAAQ,MACb,KAAK,SAAS;AAAA,MAChB;AAAA,MAEA,KAAK,OAAO;AACV,YAAI;AACJ,aAAK,UAED,OAAO,KAAK,QAAS,cACvB,KAAK,KAAK,GAGZ,OAAO;AAAA,UACL;AAAA,UACA,MAAM,KAAK;AAAA,UACX,MAAM;AAAA,QACR,GAEI,KAAK,SAAS,QAChB,KAAK,MAAM,OAAO,MAClB,KAAK,QAAQ,QAEb,KAAK,SAAS,KAAK,QAAQ;AAAA,MAI/B;AAAA,MAEA,QAAQ;AACN,YAAI;AAEJ,YAAI,KAAK,UAAU;AAGjB,sBAAK,UAED,OAAO,KAAK,QAAS,cACvB,KAAK,KAAK,GAId,QAAQ,KAAK,OAAO,QAEf,KAAK,SAAS,KAAK,OAAO,SAAS,OACtC,KAAK,OAAO,OAAO,OAEnB,KAAK,QAAQ,MAGR;AAAA,MACT;AAAA,MAEA,QAAQ;AACN,YAAI,KAAK,UAAU;AACjB,iBAAO,KAAK,OAAO;AAAA,MAEvB;AAAA,MAEA,WAAW;AACT,YAAI,MAAM,KAAK;AAIf,aAHA,OAAO,KAAK,QACZ,UAAU,CAAC,GAEJ,QAAQ;AACb,kBAAQ,MAAM,MAAM,MAAM,OAAO,KAAK,MAAM,IAAI,MAAM;AAGxD,eAAO;AAAA,MACT;AAAA,MAEA,aAAa,IAAI;AACf,YAAI;AAGJ,aAFA,OAAO,KAAK,MAAM,GAEX,QAAQ;AACb,aAAG,IAAI,GAAG,OAAO,KAAK,MAAM;AAAA,MAIhC;AAAA,MAEA,QAAQ;AACN,YAAI,MAAM,KAAK,MAAM,MAAM;AAI3B,aAHA,OAAO,KAAK,QACZ,UAAU,CAAC,GAEJ,QAAQ;AACb,kBAAQ,MAAM,MAAM,MAAM,OAAO,KAAK,MAAM;AAAA,YAC1C,OAAO,IAAI;AAAA,YACX,OAAO,OAAO,IAAI,SAAS,OAAO,KAAK,QAAQ;AAAA,YAC/C,OAAO,OAAO,IAAI,SAAS,OAAO,KAAK,QAAQ;AAAA,UACjD,EAAE;AAGJ,eAAO;AAAA,MACT;AAAA,IAEF;AACA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;AC1GjB;AAAA,qFAAAC,UAAAC,SAAA;AAAA;AAAA;AAEA,aAASC,oBAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,KAAK,KAAK;AAAE,UAAI;AAAE,YAAI,OAAO,IAAI,GAAG,EAAE,GAAG,GAAO,QAAQ,KAAK;AAAA,MAAO,SAAS,OAAO;AAAE,eAAO,KAAK;AAAG;AAAA,MAAQ;AAAE,MAAI,KAAK,OAAQ,QAAQ,KAAK,IAAY,QAAQ,QAAQ,KAAK,EAAE,KAAK,OAAO,MAAM;AAAA,IAAK;AAExQ,aAASC,mBAAkB,IAAI;AAAE,aAAO,WAAY;AAAE,YAAI,OAAO,MAAM,OAAO;AAAW,eAAO,IAAI,QAAQ,SAAU,SAAS,QAAQ;AAAE,cAAI,MAAM,GAAG,MAAM,MAAM,IAAI;AAAG,mBAAS,MAAM,OAAO;AAAE,YAAAD,oBAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,QAAQ,KAAK;AAAA,UAAG;AAAE,mBAAS,OAAOE,MAAK;AAAE,YAAAF,oBAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,SAASE,IAAG;AAAA,UAAG;AAAE,gBAAM,MAAS;AAAA,QAAG,CAAC;AAAA,MAAG;AAAA,IAAG;AAEpY,QAAIC;AACJ,IAAAA,UAAS,MAAa;AAAA,MACpB,YAAY,UAAU;AAIpB,YAHA,KAAK,WAAW,UAChB,KAAK,UAAU,CAAC,GAEZ,KAAK,SAAS,MAAM,QAAQ,KAAK,SAAS,QAAQ,QAAQ,KAAK,SAAS,sBAAsB;AAChG,gBAAM,IAAI,MAAM,2CAA2C;AAG7D,aAAK,SAAS,KAAK,CAAC,MAAM,OACjB,KAAK,aAAa,MAAM,QAAQ,EAAE,GAG3C,KAAK,SAAS,OAAO,CAAC,MAAM,OACnB,KAAK,aAAa,MAAM,QAAQ,EAAE,GAG3C,KAAK,SAAS,qBAAqB,CAAC,OAAO,SACrC,QAAQ,OACH,OAAO,KAAK,QAAQ,IAAI,IAExB,KAAK,UAAU,CAAC;AAAA,MAG7B;AAAA,MAEA,aAAa,MAAM,QAAQ,IAAI;AAC7B,YAAI;AAEJ,gBAAK,OAAO,KAAK,SAAS,IAAI,KAAK,SACjC,KAAK,IAAI,IAAI,CAAC,IAGhB,KAAK,QAAQ,IAAI,EAAE,KAAK;AAAA,UACtB;AAAA,UACA;AAAA,QACF,CAAC,GAEM,KAAK;AAAA,MACd;AAAA,MAEA,cAAc,MAAM;AAClB,eAAI,KAAK,QAAQ,IAAI,KAAK,OACjB,KAAK,QAAQ,IAAI,EAAE,SAEnB;AAAA,MAEX;AAAA,MAEA,QAAQ,SAAS,MAAM;AACrB,YAAI,QAAQ;AAEZ,eAAOF,mBAAkB,aAAa;AACpC,cAAI,GAAG;AAEP,cAAI;AAKF,mBAJI,SAAS,WACX,MAAM,QAAQ,SAAS,oBAAoB,IAAI,IAAI,IAAI,GAGrD,MAAM,QAAQ,IAAI,KAAK,OACzB,UAGF,MAAM,QAAQ,IAAI,IAAI,MAAM,QAAQ,IAAI,EAAE,OAAO,SAAU,UAAU;AACnE,qBAAO,SAAS,WAAW;AAAA,YAC7B,CAAC,GACD,WAAW,MAAM,QAAQ,IAAI,EAAE;AAAA,cAE/B,4BAAY;AACV,oBAAI,OAAOA,mBAAkB,WAAW,UAAU;AAChD,sBAAIG,IAAG;AAEP,sBAAI,SAAS,WAAW,QAIxB;AAAA,oBAAI,SAAS,WAAW,WACtB,SAAS,SAAS;AAGpB,wBAAI;AAGF,6BAFA,WAAW,OAAO,SAAS,MAAO,aAAa,SAAS,GAAG,GAAG,IAAI,IAAI,QAElE,OAA2B,UAAS,QAAmB,aAClD,MAAM,WAEN;AAAA,oBAEX,SAAS,OAAO;AACd,6BAAAA,KAAI,OAGF,MAAM,QAAQ,SAASA,EAAC,GAGnB;AAAA,oBACT;AAAA;AAAA,gBACF,CAAC;AAED,uBAAO,SAAU,IAAI;AACnB,yBAAO,KAAK,MAAM,MAAM,SAAS;AAAA,gBACnC;AAAA,cACF,GAAE;AAAA,YAAC,IACK,MAAM,QAAQ,IAAI,QAAQ,GAAG,KAAK,SAAU,GAAG;AACrD,qBAAO,KAAK;AAAA,YACd,CAAC;AAAA,UACH,SAAS,OAAO;AACd,uBAAI,OAGF,MAAM,QAAQ,SAAS,CAAC,GAGnB;AAAA,UACT;AAAA,QACF,CAAC,EAAE;AAAA,MACL;AAAA,IAEF;AACA,IAAAL,QAAO,UAAUI;AAAA;AAAA;;;AC/HjB;AAAA,qFAAAE,UAAAC,SAAA;AAAA;AAAA;AAEA,QAAI,QAAQC,SAAQ;AACpB,aAAS;AACT,IAAAA,UAAS;AACT,aAAS,MAAa;AAAA,MACpB,YAAY,gBAAgB;AAC1B,YAAI;AACJ,aAAK,SAAS,IAAIA,QAAO,IAAI,GAC7B,KAAK,UAAU,GAEf,KAAK,SAAS,WAAY;AACxB,cAAI,GAAG,KAAK;AAGZ,eAFA,UAAU,CAAC,GAEN,IAAI,IAAI,GAAG,MAAM,gBAAgB,KAAK,MAAM,KAAK,MAAM,KAAK,KAAK,IAAI,KAAK,MAAM,EAAE,IAAI,EAAE;AAC3F,oBAAQ,KAAK,IAAI,OAAO,MACf,KAAK,KAAK,GAChB,MACM,KAAK,KAAK,CAClB,CAAC;AAGJ,iBAAO;AAAA,QACT,EAAE,KAAK,IAAI;AAAA,MACb;AAAA,MAEA,OAAO;AACL,YAAI,KAAK,cAAc;AACrB,iBAAO,KAAK,OAAO,QAAQ,UAAU;AAAA,MAEzC;AAAA,MAEA,OAAO;AACL,YAAI,EAAE,KAAK,YAAY;AACrB,iBAAO,KAAK,OAAO,QAAQ,MAAM;AAAA,MAErC;AAAA,MAEA,KAAK,KAAK;AACR,eAAO,KAAK,OAAO,IAAI,QAAQ,QAAQ,EAAE,KAAK,GAAG;AAAA,MACnD;AAAA,MAEA,OAAO,UAAU;AACf,eAAI,YAAY,OACP,KAAK,OAAO,QAAQ,EAAE,SAEtB,KAAK;AAAA,MAEhB;AAAA,MAEA,SAAS,IAAI;AACX,eAAO,KAAK,OAAO,QAAQ,SAAU,MAAM;AACzC,iBAAO,KAAK,aAAa,EAAE;AAAA,QAC7B,CAAC;AAAA,MACH;AAAA,MAEA,SAAS,MAAM,KAAK,QAAQ;AAC1B,YAAI,GAAG,KAAK;AAEZ,aAAK,IAAI,GAAG,MAAM,IAAI,QAAQ,IAAI,KAAK;AAGrC,cAFA,OAAO,IAAI,CAAC,GAER,KAAK,SAAS;AAChB,mBAAO;AAIX,eAAO,CAAC;AAAA,MACV;AAAA,MAEA,cAAc,UAAU;AACtB,eAAO,KAAK,SAAS,KAAK,OAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM;AAAA,MACpE;AAAA,IAEF;AACA,IAAAD,QAAO,UAAU;AAAA;AAAA;;;AC5EjB;AAAA,8FAAAE,UAAAC,SAAA;AAAA;AAAA;AAEA,QAAI;AACJ,sBAAkB,cAA8B,MAAM;AAAA,IAAC;AACvD,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACJjB;AAAA,kFAAAC,UAAAC,SAAA;AAAA;AAAA;AAEA,aAASC,oBAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,KAAK,KAAK;AAAE,UAAI;AAAE,YAAI,OAAO,IAAI,GAAG,EAAE,GAAG,GAAO,QAAQ,KAAK;AAAA,MAAO,SAAS,OAAO;AAAE,eAAO,KAAK;AAAG;AAAA,MAAQ;AAAE,MAAI,KAAK,OAAQ,QAAQ,KAAK,IAAY,QAAQ,QAAQ,KAAK,EAAE,KAAK,OAAO,MAAM;AAAA,IAAK;AAExQ,aAASC,mBAAkB,IAAI;AAAE,aAAO,WAAY;AAAE,YAAI,OAAO,MAAM,OAAO;AAAW,eAAO,IAAI,QAAQ,SAAU,SAAS,QAAQ;AAAE,cAAI,MAAM,GAAG,MAAM,MAAM,IAAI;AAAG,mBAAS,MAAM,OAAO;AAAE,YAAAD,oBAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,QAAQ,KAAK;AAAA,UAAG;AAAE,mBAAS,OAAOE,MAAK;AAAE,YAAAF,oBAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,SAASE,IAAG;AAAA,UAAG;AAAE,gBAAM,MAAS;AAAA,QAAG,CAAC;AAAA,MAAG;AAAA,IAAG;AAEpY,QAAI,iBAAiB,kBAAkB,KAAK,gBAAgBC;AAC5D,qBAAiB;AACjB,uBAAmB;AACnB,IAAAA,UAAS;AACT,sBAAkB;AAClB,UAAM,MAAU;AAAA,MACd,YAAY,MAAM,MAAMC,UAAS,aAAa,cAAcC,SAAQ,SAASC,UAAS;AACpF,aAAK,OAAO,MACZ,KAAK,OAAO,MACZ,KAAK,eAAe,cACpB,KAAK,SAASD,SACd,KAAK,UAAU,SACf,KAAK,UAAUC,UACf,KAAK,UAAUH,QAAO,KAAKC,UAAS,WAAW,GAC/C,KAAK,QAAQ,WAAW,KAAK,kBAAkB,KAAK,QAAQ,QAAQ,GAEhE,KAAK,QAAQ,OAAO,YAAY,OAClC,KAAK,QAAQ,KAAK,GAAG,KAAK,QAAQ,EAAE,IAAI,KAAK,aAAa,CAAC,KAG7D,KAAK,UAAU,IAAI,KAAK,QAAQ,CAAC,UAAU,YAAY;AACrD,eAAK,WAAW,UAChB,KAAK,UAAU;AAAA,QACjB,CAAC,GACD,KAAK,aAAa;AAAA,MACpB;AAAA,MAEA,kBAAkB,UAAU;AAC1B,YAAI;AAGJ,eAFA,YAAY,CAAC,CAAC,aAAa,WAAW,mBAAmB,UAErD,YAAY,IACP,IACE,YAAY,iBAAiB,IAC/B,iBAAiB,IAEjB;AAAA,MAEX;AAAA,MAEA,eAAe;AACb,eAAO,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC;AAAA,MAC3C;AAAA,MAEA,OAAO;AAAA,QACL;AAAA,QACA,UAAU;AAAA,MACZ,IAAI,CAAC,GAAG;AACN,eAAI,KAAK,QAAQ,OAAO,KAAK,QAAQ,EAAE,KACjC,KAAK,gBACP,KAAK,QAAQ,SAAwB,IAAI,gBAAgB,OAAO,CAAC,GAGnE,KAAK,OAAO,QAAQ,WAAW;AAAA,UAC7B,MAAM,KAAK;AAAA,UACX,SAAS,KAAK;AAAA,UACd,MAAM,KAAK;AAAA,UACX,SAAS,KAAK;AAAA,QAChB,CAAC,GACM,MAEA;AAAA,MAEX;AAAA,MAEA,cAAc,UAAU;AACtB,YAAI;AAGJ,YAFA,SAAS,KAAK,QAAQ,UAAU,KAAK,QAAQ,EAAE,GAE3C,EAAE,WAAW,YAAY,aAAa,UAAU,WAAW;AAC7D,gBAAM,IAAI,gBAAgB,sBAAsB,MAAM,cAAc,QAAQ,yEAAyE;AAAA,MAEzJ;AAAA,MAEA,YAAY;AACV,oBAAK,QAAQ,MAAM,KAAK,QAAQ,EAAE,GAE3B,KAAK,OAAO,QAAQ,YAAY;AAAA,UACrC,MAAM,KAAK;AAAA,UACX,SAAS,KAAK;AAAA,QAChB,CAAC;AAAA,MACH;AAAA,MAEA,QAAQ,YAAY,SAAS;AAC3B,oBAAK,cAAc,UAAU,GAE7B,KAAK,QAAQ,KAAK,KAAK,QAAQ,EAAE,GAE1B,KAAK,OAAO,QAAQ,UAAU;AAAA,UACnC,MAAM,KAAK;AAAA,UACX,SAAS,KAAK;AAAA,UACd;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MAEA,QAAQ;AACN,eAAI,KAAK,eAAe,KACtB,KAAK,cAAc,QAAQ,GAE3B,KAAK,QAAQ,KAAK,KAAK,QAAQ,EAAE,KAEjC,KAAK,cAAc,WAAW,GAGzB,KAAK,OAAO,QAAQ,aAAa;AAAA,UACtC,MAAM,KAAK;AAAA,UACX,SAAS,KAAK;AAAA,QAChB,CAAC;AAAA,MACH;AAAA,MAEA,UAAU,SAAS,kBAAkB,KAAK,MAAM;AAC9C,YAAI,QAAQ;AAEZ,eAAOH,mBAAkB,aAAa;AACpC,cAAI,OAAO,WAAW;AAEtB,UAAI,MAAM,eAAe,KACvB,MAAM,cAAc,SAAS,GAE7B,MAAM,QAAQ,KAAK,MAAM,QAAQ,EAAE,KAEnC,MAAM,cAAc,WAAW,GAGjC,YAAY;AAAA,YACV,MAAM,MAAM;AAAA,YACZ,SAAS,MAAM;AAAA,YACf,YAAY,MAAM;AAAA,UACpB,GAEA,MAAM,OAAO,QAAQ,aAAa,SAAS;AAE3C,cAAI;AAGF,gBAFA,SAAS,MAAM,WAAW,OAAO,QAAQ,SAAS,MAAM,SAAS,MAAM,MAAM,GAAG,MAAM,IAAI,IAAI,MAAM,KAAK,GAAG,MAAM,IAAI,GAElH,iBAAiB;AACnB,2BAAM,OAAO,SAAS,GAEtB,MAAM,KAAK,MAAM,SAAS,SAAS,GAEnC,MAAM,cAAc,MAAM,GAEnB,MAAM,SAAS,MAAM;AAAA,UAEhC,SAAS,QAAQ;AACf,2BAAQ,QACD,MAAM,WAAW,OAAO,WAAW,kBAAkB,KAAK,IAAI;AAAA,UACvE;AAAA,QACF,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,SAAS,kBAAkB,KAAK,MAAM;AACpC,YAAI,OAAO;AAEX,eAAI,KAAK,QAAQ,UAAU,KAAK,QAAQ,OAAO,SAAS,KACtD,KAAK,QAAQ,KAAK,KAAK,QAAQ,EAAE,GAGnC,KAAK,cAAc,WAAW,GAE9B,YAAY;AAAA,UACV,MAAM,KAAK;AAAA,UACX,SAAS,KAAK;AAAA,UACd,YAAY,KAAK;AAAA,QACnB,GACA,QAAQ,IAAI,gBAAgB,4BAA4B,KAAK,QAAQ,UAAU,MAAM,GAC9E,KAAK,WAAW,OAAO,WAAW,kBAAkB,KAAK,IAAI;AAAA,MACtE;AAAA,MAEA,WAAW,OAAO,WAAW,kBAAkB,KAAK,MAAM;AACxD,YAAI,SAAS;AAEb,eAAOA,mBAAkB,aAAa;AACpC,cAAI,OAAO;AAEX,cAAI,iBAAiB;AAGnB,mBAFA,QAAQ,MAAM,OAAO,OAAO,QAAQ,UAAU,OAAO,SAAS,GAE1D,SAAS,QACX,aAAa,CAAC,CAAC,OAEf,OAAO,OAAO,QAAQ,SAAS,YAAY,OAAO,QAAQ,EAAE,UAAU,UAAU,OAAO,SAAS,GAEhG,OAAO,cACA,IAAI,UAAU,MAErB,OAAO,OAAO,SAAS,GAEvB,MAAM,KAAK,OAAO,SAAS,SAAS,GAEpC,OAAO,cAAc,MAAM,GAEpB,OAAO,QAAQ,KAAK;AAAA,QAGjC,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,OAAO,WAAW;AAChB,oBAAK,cAAc,WAAW,GAE9B,KAAK,QAAQ,KAAK,KAAK,QAAQ,EAAE,GAE1B,KAAK,OAAO,QAAQ,QAAQ,SAAS;AAAA,MAC9C;AAAA,IAEF;AACA,IAAAF,QAAO,UAAU;AAAA;AAAA;;;ACtNjB;AAAA,6FAAAQ,UAAAC,SAAA;AAAA;AAAA;AAEA,aAASC,oBAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,KAAK,KAAK;AAAE,UAAI;AAAE,YAAI,OAAO,IAAI,GAAG,EAAE,GAAG,GAAO,QAAQ,KAAK;AAAA,MAAO,SAAS,OAAO;AAAE,eAAO,KAAK;AAAG;AAAA,MAAQ;AAAE,MAAI,KAAK,OAAQ,QAAQ,KAAK,IAAY,QAAQ,QAAQ,KAAK,EAAE,KAAK,OAAO,MAAM;AAAA,IAAK;AAExQ,aAASC,mBAAkB,IAAI;AAAE,aAAO,WAAY;AAAE,YAAI,OAAO,MAAM,OAAO;AAAW,eAAO,IAAI,QAAQ,SAAU,SAAS,QAAQ;AAAE,cAAI,MAAM,GAAG,MAAM,MAAM,IAAI;AAAG,mBAAS,MAAM,OAAO;AAAE,YAAAD,oBAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,QAAQ,KAAK;AAAA,UAAG;AAAE,mBAAS,OAAOE,MAAK;AAAE,YAAAF,oBAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,SAASE,IAAG;AAAA,UAAG;AAAE,gBAAM,MAAS;AAAA,QAAG,CAAC;AAAA,MAAG;AAAA,IAAG;AAEpY,QAAI,iBAAiB,gBAAgBC;AACrC,IAAAA,UAAS;AACT,sBAAkB;AAClB,qBAAiB,MAAqB;AAAA,MACpC,YAAY,UAAU,cAAc,sBAAsB;AACxD,aAAK,WAAW,UAChB,KAAK,eAAe,cACpB,KAAK,WAAW,KAAK,SAAS,aAAa,GAC3CA,QAAO,KAAK,sBAAsB,sBAAsB,IAAI,GAC5D,KAAK,eAAe,KAAK,wBAAwB,KAAK,yBAAyB,KAAK,IAAI,GACxF,KAAK,WAAW,GAChB,KAAK,QAAQ,GACb,KAAK,eAAe,GACpB,KAAK,QAAQ,KAAK,QAAQ,QAAQ,GAClC,KAAK,UAAU,CAAC,GAEhB,KAAK,gBAAgB;AAAA,MACvB;AAAA,MAEA,kBAAkB;AAChB,YAAI;AAEJ,eAAI,KAAK,aAAa,SAAS,KAAK,aAAa,4BAA4B,QAAQ,KAAK,aAAa,0BAA0B,QAAQ,KAAK,aAAa,6BAA6B,QAAQ,KAAK,aAAa,2BAA2B,QACpO,QAAQ,OAAO,KAAK,YAAY,YAAY,MAAM;AACvD,cAAI,QAAQ,MAAM,SAAS,KAAK;AAUhC,cATA,MAAM,KAAK,IAAI,GAEX,KAAK,aAAa,4BAA4B,QAAQ,OAAO,KAAK,wBAAwB,KAAK,aAAa,6BAC9G,KAAK,wBAAwB,KAC7B,KAAK,aAAa,YAAY,KAAK,aAAa,wBAEhD,KAAK,SAAS,UAAU,KAAK,gBAAgB,CAAC,IAG5C,KAAK,aAAa,6BAA6B,QAAQ,OAAO,KAAK,yBAAyB,KAAK,aAAa,2BAA2B;AAC3I,gBAAI,qBAAqB,KAAK;AAO9B,gBANA,SAAS,mBAAmB,yBAC5B,UAAU,mBAAmB,0BAC7B,YAAY,mBAAmB,WAC/B,KAAK,yBAAyB,KAC9B,OAAO,WAAW,OAAO,KAAK,IAAI,QAAQ,UAAU,SAAS,IAAI,QAE7D,OAAO;AACT,0BAAK,aAAa,aAAa,MACxB,KAAK,SAAS,UAAU,KAAK,gBAAgB,CAAC;AAAA,UAEzD;AAAA,QACF,GAAG,KAAK,iBAAiB,GAAG,SAAU,aAAa,KAAK,MAAM,IAAI,SAE3D,cAAc,KAAK,SAAS;AAAA,MAEvC;AAAA,MAEA,YAAY,SAAS;AACnB,YAAI,QAAQ;AAEZ,eAAOF,mBAAkB,aAAa;AACpC,uBAAM,MAAM,UAAU,GACf,MAAM,SAAS,OAAO,QAAQ,WAAW,QAAQ,SAAS,CAAC;AAAA,QACpE,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,eAAe,OAAO;AACpB,YAAI,SAAS;AAEb,eAAOA,mBAAkB,aAAa;AACpC,uBAAM,OAAO,UAAU,GACvB,cAAc,OAAO,SAAS,GACvB,OAAO,QAAQ,QAAQ;AAAA,QAChC,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,UAAU,IAAI,GAAG;AACf,eAAO,IAAI,KAAK,QAAQ,SAAU,SAAS,QAAQ;AACjD,iBAAO,WAAW,SAAS,CAAC;AAAA,QAC9B,CAAC;AAAA,MACH;AAAA,MAEA,iBAAiB;AACf,YAAI;AACJ,gBAAQ,MAAM,KAAK,aAAa,YAAY,OAAO,MAAM,KAAK,KAAK,aAAa,WAAW;AAAA,MAC7F;AAAA,MAEA,mBAAmBG,UAAS;AAC1B,YAAI,SAAS;AAEb,eAAOH,mBAAkB,aAAa;AACpC,uBAAM,OAAO,UAAU,GACvBE,QAAO,UAAUC,UAASA,UAAS,OAAO,YAAY,GAEtD,OAAO,gBAAgB,GAEvB,OAAO,SAAS,UAAU,OAAO,gBAAgB,CAAC,GAE3C;AAAA,QACT,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,cAAc;AACZ,YAAI,SAAS;AAEb,eAAOH,mBAAkB,aAAa;AACpC,uBAAM,OAAO,UAAU,GAChB,OAAO;AAAA,QAChB,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,aAAa;AACX,YAAI,SAAS;AAEb,eAAOA,mBAAkB,aAAa;AACpC,uBAAM,OAAO,UAAU,GAChB,OAAO,SAAS,OAAO;AAAA,QAChC,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,WAAW;AACT,YAAI,SAAS;AAEb,eAAOA,mBAAkB,aAAa;AACpC,uBAAM,OAAO,UAAU,GAChB,OAAO;AAAA,QAChB,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,eAAe,MAAM;AACnB,YAAI,SAAS;AAEb,eAAOA,mBAAkB,aAAa;AACpC,uBAAM,OAAO,UAAU,GAChB,OAAO,eAAe,OAAO,UAAU;AAAA,QAChD,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,kBAAkB;AAChB,YAAI,eAAe,WACf,sBAAsB,KAAK;AAI/B,eAHA,gBAAgB,oBAAoB,eACpC,YAAY,oBAAoB,WAE5B,iBAAiB,QAAQ,aAAa,OACjC,KAAK,IAAI,gBAAgB,KAAK,UAAU,SAAS,IAC/C,iBAAiB,OACnB,gBAAgB,KAAK,WACnB,aAGF;AAAA,MAEX;AAAA,MAEA,gBAAgB,QAAQ;AACtB,YAAI;AACJ,0BAAW,KAAK,gBAAgB,GACzB,YAAY,QAAQ,UAAU;AAAA,MACvC;AAAA,MAEA,uBAAuB,MAAM;AAC3B,YAAI,SAAS;AAEb,eAAOA,mBAAkB,aAAa;AACpC,cAAI;AACJ,uBAAM,OAAO,UAAU,GACvB,YAAY,OAAO,aAAa,aAAa,MAE7C,OAAO,SAAS,UAAU,OAAO,gBAAgB,CAAC,GAE3C;AAAA,QACT,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,uBAAuB;AACrB,YAAI,SAAS;AAEb,eAAOA,mBAAkB,aAAa;AACpC,uBAAM,OAAO,UAAU,GAChB,OAAO,aAAa;AAAA,QAC7B,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,UAAU,KAAK;AACb,eAAO,KAAK,gBAAgB;AAAA,MAC9B;AAAA,MAEA,MAAM,QAAQ,KAAK;AACjB,eAAO,KAAK,gBAAgB,MAAM,KAAK,KAAK,eAAe,OAAO;AAAA,MACpE;AAAA,MAEA,UAAU,QAAQ;AAChB,YAAI,UAAU;AAEd,eAAOA,mBAAkB,aAAa;AACpC,cAAI;AACJ,uBAAM,QAAQ,UAAU,GACxB,MAAM,KAAK,IAAI,GACR,QAAQ,MAAM,QAAQ,GAAG;AAAA,QAClC,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,aAAa,OAAO,QAAQ,YAAY;AACtC,YAAI,UAAU;AAEd,eAAOA,mBAAkB,aAAa;AACpC,cAAI,KAAK;AAIT,iBAHA,MAAM,QAAQ,UAAU,GACxB,MAAM,KAAK,IAAI,GAEX,QAAQ,gBAAgB,MAAM,KAChC,QAAQ,YAAY,QAEhB,QAAQ,aAAa,aAAa,SACpC,QAAQ,aAAa,aAAa,SAGpC,OAAO,KAAK,IAAI,QAAQ,eAAe,KAAK,CAAC,GAC7C,QAAQ,eAAe,MAAM,OAAO,QAAQ,aAAa,SAClD;AAAA,YACL,SAAS;AAAA,YACT;AAAA,YACA,WAAW,QAAQ,aAAa;AAAA,UAClC,KAEO;AAAA,YACL,SAAS;AAAA,UACX;AAAA,QAEJ,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,kBAAkB;AAChB,eAAO,KAAK,aAAa,aAAa;AAAA,MACxC;AAAA,MAEA,WAAW,aAAa,QAAQ;AAC9B,YAAI,UAAU;AAEd,eAAOA,mBAAkB,aAAa;AACpC,cAAI,SAAS,KAAK;AAGlB,cAFA,MAAM,QAAQ,UAAU,GAEpB,QAAQ,aAAa,iBAAiB,QAAQ,SAAS,QAAQ,aAAa;AAC9E,kBAAM,IAAI,gBAAgB,8CAA8C,MAAM,mDAAmD,QAAQ,aAAa,aAAa,EAAE;AAGvK,uBAAM,KAAK,IAAI,GACf,aAAa,QAAQ,aAAa,aAAa,QAAQ,gBAAgB,QAAQ,aAAa,aAAa,CAAC,QAAQ,MAAM,QAAQ,GAAG,GACnI,UAAU,QAAQ,gBAAgB,MAAM,cAAc,QAAQ,UAAU,GAAG,IAEvE,YACF,QAAQ,eAAe,MAAM,QAAQ,eAAe,GACpD,QAAQ,eAAe,QAAQ,eAAe,QAAQ,aAAa,SAEnE,QAAQ,SAAS,eAAe,IAG3B;AAAA,YACL;AAAA,YACA;AAAA,YACA,UAAU,QAAQ,aAAa;AAAA,UACjC;AAAA,QACF,CAAC,EAAE;AAAA,MACL;AAAA,MAEA,SAAS,OAAO,QAAQ;AACtB,YAAI,UAAU;AAEd,eAAOA,mBAAkB,aAAa;AACpC,uBAAM,QAAQ,UAAU,GACxB,QAAQ,YAAY,QACpB,QAAQ,SAAS,QAEjB,QAAQ,SAAS,UAAU,QAAQ,gBAAgB,CAAC,GAE7C;AAAA,YACL,SAAS,QAAQ;AAAA,UACnB;AAAA,QACF,CAAC,EAAE;AAAA,MACL;AAAA,IAEF;AACA,IAAAF,QAAO,UAAU;AAAA;AAAA;;;AC9RjB;AAAA,oFAAAM,UAAAC,SAAA;AAAA,IAAAA,QAAA;AAAA,MACE,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MACxB,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MACb,wBAAwB;AAAA;AAAA;AAAA;AAAA,MACxB,yBAAyB;AAAA;AAAA,MACzB,YAAY;AAAA;AAAA;AAAA;AAAA,MACZ,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MACZ,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAChB,mBAAmB;AAAA;AAAA,MACnB,iBAAiB;AAAA;AAAA,MACjB,2BAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAC3B,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MACZ,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MACpB,cAAc;AAAA;AAAA;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",
6
6
  "names": ["exports", "os", "options", "exports", "module", "options", "exports", "module", "exports", "module", "exports", "module", "isObject", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "isObject", "exports", "module", "exports", "module", "exports", "module", "pickBy", "exports", "module", "object", "exports", "module", "exports", "module", "exports", "module", "differenceWith", "exports", "module", "fromPairs", "exports", "module", "exports", "module", "set", "exports", "module", "exports", "module", "toPairs", "exports", "module", "set", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "unset", "exports", "module", "isEmpty", "exports", "exports", "module", "exports", "module", "asyncGeneratorStep", "_asyncToGenerator", "err", "Events", "e", "exports", "module", "Events", "exports", "module", "exports", "module", "asyncGeneratorStep", "_asyncToGenerator", "err", "parser", "options", "Events", "Promise", "exports", "module", "asyncGeneratorStep", "_asyncToGenerator", "err", "parser", "options", "exports", "module", "exports", "err", "err", "exports", "module", "_slicedToArray", "_arrayWithHoles", "_iterableToArrayLimit", "_nonIterableRest", "err", "asyncGeneratorStep", "_asyncToGenerator", "IORedisConnection", "RedisConnection", "parser", "e", "options", "exports", "module", "exports", "module", "asyncGeneratorStep", "_asyncToGenerator", "err", "Promise", "exports", "module", "exports", "module", "_slicedToArray", "_arrayWithHoles", "_iterableToArrayLimit", "_nonIterableRest", "err", "asyncGeneratorStep", "_asyncToGenerator", "Events", "IORedisConnection", "RedisConnection", "Scripts", "parser", "Group", "limiter", "options", "exports", "module", "Events", "parser", "Batcher", "options", "exports", "module", "_slicedToArray", "_arrayWithHoles", "_iterableToArrayLimit", "_nonIterableRest", "err", "asyncGeneratorStep", "_asyncToGenerator", "Bottleneck", "Events", "parser", "options", "args", "exports", "module", "Environment", "fs", "fs", "options", "err", "options", "host", "fs", "fs", "createServer", "options", "host", "url", "assertRunningOverride", "fs", "options", "createServer", "fs", "store", "storeFqdn", "userId", "err", "url", "deepMerge", "lodashPickBy", "lodashIsEqual", "differenceWith", "toPairs", "fromPairs", "get", "set", "lodashIsEmpty", "url", "url", "options", "result", "url", "Bottleneck", "url", "setupRequest", "url", "options", "store", "options", "decode", "decode", "store", "clientId", "userId", "url", "options", "authMethod", "store"]
7
7
  }