callman-core 1.0.6 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/dist/index.d.ts +6 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +5 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/script/errors.d.ts +3 -0
  6. package/dist/script/errors.d.ts.map +1 -0
  7. package/dist/script/errors.js +68 -0
  8. package/dist/script/errors.js.map +1 -0
  9. package/dist/script/executor.d.ts +5 -0
  10. package/dist/script/executor.d.ts.map +1 -0
  11. package/dist/script/executor.js +301 -0
  12. package/dist/script/executor.js.map +1 -0
  13. package/dist/script/features/assertions.d.ts +46 -0
  14. package/dist/script/features/assertions.d.ts.map +1 -0
  15. package/dist/script/features/assertions.js +264 -0
  16. package/dist/script/features/assertions.js.map +1 -0
  17. package/dist/script/features/counter.d.ts +11 -0
  18. package/dist/script/features/counter.d.ts.map +1 -0
  19. package/dist/script/features/counter.js +43 -0
  20. package/dist/script/features/counter.js.map +1 -0
  21. package/dist/script/features/cryptojs.d.ts +13 -0
  22. package/dist/script/features/cryptojs.d.ts.map +1 -0
  23. package/dist/script/features/cryptojs.js +63 -0
  24. package/dist/script/features/cryptojs.js.map +1 -0
  25. package/dist/script/features/db.d.ts +36 -0
  26. package/dist/script/features/db.d.ts.map +1 -0
  27. package/dist/script/features/db.js +165 -0
  28. package/dist/script/features/db.js.map +1 -0
  29. package/dist/script/features/environment.d.ts +11 -0
  30. package/dist/script/features/environment.d.ts.map +1 -0
  31. package/dist/script/features/environment.js +61 -0
  32. package/dist/script/features/environment.js.map +1 -0
  33. package/dist/script/features/feature-policy.d.ts +8 -0
  34. package/dist/script/features/feature-policy.d.ts.map +1 -0
  35. package/dist/script/features/feature-policy.js +88 -0
  36. package/dist/script/features/feature-policy.js.map +1 -0
  37. package/dist/script/features/kafka.d.ts +11 -0
  38. package/dist/script/features/kafka.d.ts.map +1 -0
  39. package/dist/script/features/kafka.js +71 -0
  40. package/dist/script/features/kafka.js.map +1 -0
  41. package/dist/script/features/log.d.ts +15 -0
  42. package/dist/script/features/log.d.ts.map +1 -0
  43. package/dist/script/features/log.js +59 -0
  44. package/dist/script/features/log.js.map +1 -0
  45. package/dist/script/features/node.d.ts +14 -0
  46. package/dist/script/features/node.d.ts.map +1 -0
  47. package/dist/script/features/node.js +82 -0
  48. package/dist/script/features/node.js.map +1 -0
  49. package/dist/script/features/random.d.ts +13 -0
  50. package/dist/script/features/random.d.ts.map +1 -0
  51. package/dist/script/features/random.js +111 -0
  52. package/dist/script/features/random.js.map +1 -0
  53. package/dist/script/features/redis.d.ts +10 -0
  54. package/dist/script/features/redis.d.ts.map +1 -0
  55. package/dist/script/features/redis.js +22 -0
  56. package/dist/script/features/redis.js.map +1 -0
  57. package/dist/script/features/request.d.ts +23 -0
  58. package/dist/script/features/request.d.ts.map +1 -0
  59. package/dist/script/features/request.js +105 -0
  60. package/dist/script/features/request.js.map +1 -0
  61. package/dist/script/features/response.d.ts +25 -0
  62. package/dist/script/features/response.d.ts.map +1 -0
  63. package/dist/script/features/response.js +43 -0
  64. package/dist/script/features/response.js.map +1 -0
  65. package/dist/script/features/tests.d.ts +15 -0
  66. package/dist/script/features/tests.d.ts.map +1 -0
  67. package/dist/script/features/tests.js +147 -0
  68. package/dist/script/features/tests.js.map +1 -0
  69. package/dist/script/features/variables.d.ts +6 -0
  70. package/dist/script/features/variables.d.ts.map +1 -0
  71. package/dist/script/features/variables.js +25 -0
  72. package/dist/script/features/variables.js.map +1 -0
  73. package/dist/script/legacy.d.ts +4 -0
  74. package/dist/script/legacy.d.ts.map +1 -0
  75. package/dist/script/legacy.js +128 -0
  76. package/dist/script/legacy.js.map +1 -0
  77. package/dist/script/sandbox.d.ts +16 -0
  78. package/dist/script/sandbox.d.ts.map +1 -0
  79. package/dist/script/sandbox.js +51 -0
  80. package/dist/script/sandbox.js.map +1 -0
  81. package/dist/script/scope.d.ts +23 -0
  82. package/dist/script/scope.d.ts.map +1 -0
  83. package/dist/script/scope.js +172 -0
  84. package/dist/script/scope.js.map +1 -0
  85. package/dist/script/scriptEngine.d.ts +2 -2
  86. package/dist/script/scriptEngine.d.ts.map +1 -1
  87. package/dist/script/scriptEngine.js +7 -105
  88. package/dist/script/scriptEngine.js.map +1 -1
  89. package/dist/script/timeout.d.ts +3 -0
  90. package/dist/script/timeout.d.ts.map +1 -0
  91. package/dist/script/timeout.js +38 -0
  92. package/dist/script/timeout.js.map +1 -0
  93. package/dist/script/types.d.ts +167 -0
  94. package/dist/script/types.d.ts.map +1 -0
  95. package/dist/script/types.js +7 -0
  96. package/dist/script/types.js.map +1 -0
  97. package/dist-cjs/contract/contractValidator.js +236 -0
  98. package/dist-cjs/contract/contractValidator.js.map +1 -0
  99. package/dist-cjs/index.js +47 -0
  100. package/dist-cjs/index.js.map +1 -0
  101. package/dist-cjs/package.json +1 -0
  102. package/dist-cjs/request/executeRequest.js +33 -0
  103. package/dist-cjs/request/executeRequest.js.map +1 -0
  104. package/dist-cjs/runner/requestRunner.js +102 -0
  105. package/dist-cjs/runner/requestRunner.js.map +1 -0
  106. package/dist-cjs/runner/runCollection.js +53 -0
  107. package/dist-cjs/runner/runCollection.js.map +1 -0
  108. package/dist-cjs/scenario-runner/condition.js +1735 -0
  109. package/dist-cjs/scenario-runner/condition.js.map +1 -0
  110. package/dist-cjs/scenario-runner/conditionTypes.js +3 -0
  111. package/dist-cjs/scenario-runner/conditionTypes.js.map +1 -0
  112. package/dist-cjs/scenario-runner/executionPolicyRunner.js +53 -0
  113. package/dist-cjs/scenario-runner/executionPolicyRunner.js.map +1 -0
  114. package/dist-cjs/scenario-runner/graphTraversal.js +27 -0
  115. package/dist-cjs/scenario-runner/graphTraversal.js.map +1 -0
  116. package/dist-cjs/scenario-runner/index.js +39 -0
  117. package/dist-cjs/scenario-runner/index.js.map +1 -0
  118. package/dist-cjs/scenario-runner/nodePolicy.js +127 -0
  119. package/dist-cjs/scenario-runner/nodePolicy.js.map +1 -0
  120. package/dist-cjs/scenario-runner/notification/index.js +18 -0
  121. package/dist-cjs/scenario-runner/notification/index.js.map +1 -0
  122. package/dist-cjs/scenario-runner/notification/providers/provider.interface.js +3 -0
  123. package/dist-cjs/scenario-runner/notification/providers/provider.interface.js.map +1 -0
  124. package/dist-cjs/scenario-runner/notification/providers/slack.provider.js +88 -0
  125. package/dist-cjs/scenario-runner/notification/providers/slack.provider.js.map +1 -0
  126. package/dist-cjs/scenario-runner/notification/template.js +13 -0
  127. package/dist-cjs/scenario-runner/notification/template.js.map +1 -0
  128. package/dist-cjs/scenario-runner/retryExecutor.js +57 -0
  129. package/dist-cjs/scenario-runner/retryExecutor.js.map +1 -0
  130. package/dist-cjs/scenario-runner/runScenario.js +1545 -0
  131. package/dist-cjs/scenario-runner/runScenario.js.map +1 -0
  132. package/dist-cjs/scenario-runner/templateResolver.js +468 -0
  133. package/dist-cjs/scenario-runner/templateResolver.js.map +1 -0
  134. package/dist-cjs/scenario-runner/types.js +3 -0
  135. package/dist-cjs/scenario-runner/types.js.map +1 -0
  136. package/dist-cjs/scenario-runner/waitNodeExecutor.js +71 -0
  137. package/dist-cjs/scenario-runner/waitNodeExecutor.js.map +1 -0
  138. package/dist-cjs/script/errors.js +72 -0
  139. package/dist-cjs/script/errors.js.map +1 -0
  140. package/dist-cjs/script/executor.js +306 -0
  141. package/dist-cjs/script/executor.js.map +1 -0
  142. package/dist-cjs/script/features/assertions.js +269 -0
  143. package/dist-cjs/script/features/assertions.js.map +1 -0
  144. package/dist-cjs/script/features/counter.js +47 -0
  145. package/dist-cjs/script/features/counter.js.map +1 -0
  146. package/dist-cjs/script/features/cryptojs.js +67 -0
  147. package/dist-cjs/script/features/cryptojs.js.map +1 -0
  148. package/dist-cjs/script/features/db.js +169 -0
  149. package/dist-cjs/script/features/db.js.map +1 -0
  150. package/dist-cjs/script/features/environment.js +65 -0
  151. package/dist-cjs/script/features/environment.js.map +1 -0
  152. package/dist-cjs/script/features/feature-policy.js +94 -0
  153. package/dist-cjs/script/features/feature-policy.js.map +1 -0
  154. package/dist-cjs/script/features/kafka.js +77 -0
  155. package/dist-cjs/script/features/kafka.js.map +1 -0
  156. package/dist-cjs/script/features/log.js +64 -0
  157. package/dist-cjs/script/features/log.js.map +1 -0
  158. package/dist-cjs/script/features/node.js +89 -0
  159. package/dist-cjs/script/features/node.js.map +1 -0
  160. package/dist-cjs/script/features/random.js +115 -0
  161. package/dist-cjs/script/features/random.js.map +1 -0
  162. package/dist-cjs/script/features/redis.js +26 -0
  163. package/dist-cjs/script/features/redis.js.map +1 -0
  164. package/dist-cjs/script/features/request.js +109 -0
  165. package/dist-cjs/script/features/request.js.map +1 -0
  166. package/dist-cjs/script/features/response.js +47 -0
  167. package/dist-cjs/script/features/response.js.map +1 -0
  168. package/dist-cjs/script/features/tests.js +151 -0
  169. package/dist-cjs/script/features/tests.js.map +1 -0
  170. package/dist-cjs/script/features/variables.js +29 -0
  171. package/dist-cjs/script/features/variables.js.map +1 -0
  172. package/dist-cjs/script/legacy.js +132 -0
  173. package/dist-cjs/script/legacy.js.map +1 -0
  174. package/dist-cjs/script/pmApi.js +353 -0
  175. package/dist-cjs/script/pmApi.js.map +1 -0
  176. package/dist-cjs/script/sandbox.js +91 -0
  177. package/dist-cjs/script/sandbox.js.map +1 -0
  178. package/dist-cjs/script/scope.js +177 -0
  179. package/dist-cjs/script/scope.js.map +1 -0
  180. package/dist-cjs/script/scriptEngine.js +12 -0
  181. package/dist-cjs/script/scriptEngine.js.map +1 -0
  182. package/dist-cjs/script/timeout.js +43 -0
  183. package/dist-cjs/script/timeout.js.map +1 -0
  184. package/dist-cjs/script/types.js +8 -0
  185. package/dist-cjs/script/types.js.map +1 -0
  186. package/dist-cjs/types/index.js +3 -0
  187. package/dist-cjs/types/index.js.map +1 -0
  188. package/dist-cjs/utils/get.js +52 -0
  189. package/dist-cjs/utils/get.js.map +1 -0
  190. package/dist-cjs/utils/random.js +87 -0
  191. package/dist-cjs/utils/random.js.map +1 -0
  192. package/dist-cjs/variables/envStore.js +24 -0
  193. package/dist-cjs/variables/envStore.js.map +1 -0
  194. package/dist-cjs/variables/resolver.js +95 -0
  195. package/dist-cjs/variables/resolver.js.map +1 -0
  196. package/package.json +19 -3
  197. package/samples/runSample.mjs +0 -128
  198. package/tests/waitNode.test.mjs +0 -311
  199. package/tsconfig.json +0 -18
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ // Feature policy — disabled-feature handling for collection-runner.
3
+ //
4
+ // When the host disables a feature (e.g., `featurePolicy.database = false`
5
+ // for a collection that has no DB step), user scripts that reach into the
6
+ // disabled API should NOT crash the runner. Instead, accessing the API
7
+ // inside a `pm.test` callback throws DisabledFeatureDependencyError; the
8
+ // test collector recognizes that error class and emits a SKIP result with
9
+ // a descriptive message.
10
+ //
11
+ // Outside test callbacks (e.g., at script top level) the disabled API
12
+ // returns benign no-op values so the script can continue to execute and
13
+ // any errors propagate as normal exceptions.
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.createDisabledFeatureValue = exports.isDisabledFeatureValue = exports.DisabledFeatureDependencyError = void 0;
16
+ class DisabledFeatureDependencyError extends Error {
17
+ feature;
18
+ constructor(feature) {
19
+ super(feature === "database"
20
+ ? "Database-dependent test is disabled for this collection runner."
21
+ : "Kafka-dependent test is disabled for this collection runner.");
22
+ this.feature = feature;
23
+ this.name = "DisabledFeatureDependencyError";
24
+ }
25
+ }
26
+ exports.DisabledFeatureDependencyError = DisabledFeatureDependencyError;
27
+ const DISABLED_FEATURE_SYMBOL = Symbol.for("callman:disabled-feature");
28
+ const isDisabledFeatureValue = (value) => {
29
+ if ((typeof value === "object" && value !== null) ||
30
+ typeof value === "function") {
31
+ const tag = value[DISABLED_FEATURE_SYMBOL];
32
+ if (tag === "database" || tag === "kafka") {
33
+ return tag;
34
+ }
35
+ }
36
+ return null;
37
+ };
38
+ exports.isDisabledFeatureValue = isDisabledFeatureValue;
39
+ const createDisabledFeatureValue = (feature, isInsideTestCallback) => new Proxy(function disabledFeatureValue() {
40
+ return undefined;
41
+ }, {
42
+ get(_target, property) {
43
+ if (property === DISABLED_FEATURE_SYMBOL) {
44
+ return feature;
45
+ }
46
+ if (isInsideTestCallback()) {
47
+ throw new DisabledFeatureDependencyError(feature);
48
+ }
49
+ return undefined;
50
+ },
51
+ apply() {
52
+ if (isInsideTestCallback()) {
53
+ throw new DisabledFeatureDependencyError(feature);
54
+ }
55
+ return undefined;
56
+ },
57
+ set() {
58
+ if (isInsideTestCallback()) {
59
+ throw new DisabledFeatureDependencyError(feature);
60
+ }
61
+ return true;
62
+ },
63
+ has(_target, property) {
64
+ if (property === DISABLED_FEATURE_SYMBOL) {
65
+ return true;
66
+ }
67
+ if (isInsideTestCallback()) {
68
+ throw new DisabledFeatureDependencyError(feature);
69
+ }
70
+ return false;
71
+ },
72
+ ownKeys() {
73
+ if (isInsideTestCallback()) {
74
+ throw new DisabledFeatureDependencyError(feature);
75
+ }
76
+ return [];
77
+ },
78
+ getOwnPropertyDescriptor(_target, property) {
79
+ if (property === DISABLED_FEATURE_SYMBOL) {
80
+ return {
81
+ configurable: true,
82
+ enumerable: false,
83
+ writable: false,
84
+ value: feature,
85
+ };
86
+ }
87
+ if (isInsideTestCallback()) {
88
+ throw new DisabledFeatureDependencyError(feature);
89
+ }
90
+ return undefined;
91
+ },
92
+ });
93
+ exports.createDisabledFeatureValue = createDisabledFeatureValue;
94
+ //# sourceMappingURL=feature-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-policy.js","sourceRoot":"","sources":["../../../src/script/features/feature-policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ // pm.kafka — collection-runner Kafka data view + deferred-test mechanism.
3
+ //
4
+ // The data view is read-only (event/messages — both functions returning
5
+ // the snapshot value). The deferred-test mechanism uses a Proxy that
6
+ // throws PendingKafkaDependencyError on any property access; the test
7
+ // collector recognizes that error class and routes the test to the
8
+ // `deferredTestNames` output instead of recording PASS/FAIL.
9
+ //
10
+ // IMPORTANT: We preserve the exact CURRENT behavior of Sandbox D, including
11
+ // the latent issue where `allowDeferredKafkaTests && isListening` is the
12
+ // pending condition (it does not check `!event` — so a re-run where the
13
+ // event is now present still produces a pending proxy). Snapshot tests
14
+ // lock this in. Fix is tracked separately.
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.buildKafkaApi = exports.isPendingKafkaValue = exports.PendingKafkaDependencyError = void 0;
17
+ class PendingKafkaDependencyError extends Error {
18
+ constructor() {
19
+ super("Kafka-dependent test is waiting for the matched event.");
20
+ this.name = "PendingKafkaDependencyError";
21
+ }
22
+ }
23
+ exports.PendingKafkaDependencyError = PendingKafkaDependencyError;
24
+ const PENDING_KAFKA_SYMBOL = Symbol.for("callman:pending-kafka");
25
+ const isPendingKafkaValue = (value) => {
26
+ if ((typeof value === "object" && value !== null) ||
27
+ typeof value === "function") {
28
+ return Boolean(value[PENDING_KAFKA_SYMBOL]);
29
+ }
30
+ return false;
31
+ };
32
+ exports.isPendingKafkaValue = isPendingKafkaValue;
33
+ const createPendingKafkaValue = () => new Proxy(function pendingKafkaValue() {
34
+ return undefined;
35
+ }, {
36
+ get(_target, property) {
37
+ if (property === PENDING_KAFKA_SYMBOL) {
38
+ return true;
39
+ }
40
+ throw new PendingKafkaDependencyError();
41
+ },
42
+ apply() {
43
+ throw new PendingKafkaDependencyError();
44
+ },
45
+ set() {
46
+ throw new PendingKafkaDependencyError();
47
+ },
48
+ has(_target, property) {
49
+ if (property === PENDING_KAFKA_SYMBOL) {
50
+ return true;
51
+ }
52
+ throw new PendingKafkaDependencyError();
53
+ },
54
+ ownKeys() {
55
+ throw new PendingKafkaDependencyError();
56
+ },
57
+ getOwnPropertyDescriptor(_target, property) {
58
+ if (property === PENDING_KAFKA_SYMBOL) {
59
+ return {
60
+ configurable: true,
61
+ enumerable: false,
62
+ writable: false,
63
+ value: true,
64
+ };
65
+ }
66
+ throw new PendingKafkaDependencyError();
67
+ },
68
+ });
69
+ const buildKafkaApi = (kafka, allowDeferredKafkaTests) => {
70
+ const pending = allowDeferredKafkaTests && kafka?.isListening ? createPendingKafkaValue() : null;
71
+ return {
72
+ event: () => pending ?? kafka?.event ?? null,
73
+ messages: () => pending ?? kafka?.messages ?? [],
74
+ };
75
+ };
76
+ exports.buildKafkaApi = buildKafkaApi;
77
+ //# sourceMappingURL=kafka.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kafka.js","sourceRoot":"","sources":["../../../src/script/features/kafka.ts"],"names":[],"mappings":";AAAA,0EAA0E;AAC1E,EAAE;AACF,wEAAwE;AACxE,qEAAqE;AACrE,sEAAsE;AACtE,mEAAmE;AACnE,6DAA6D;AAC7D,EAAE;AACF,4EAA4E;AAC5E,yEAAyE;AACzE,wEAAwE;AACxE,uEAAuE;AACvE,2CAA2C;;;AAI3C,MAAa,2BAA4B,SAAQ,KAAK;IACpD;QACE,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;IAC5C,CAAC;CACF;AALD,kEAKC;AAED,MAAM,oBAAoB,GAAkB,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;AAEzE,MAAM,mBAAmB,GAAG,CAAC,KAAc,EAAW,EAAE;IAC7D,IACE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;QAC7C,OAAO,KAAK,KAAK,UAAU,EAC3B,CAAC;QACD,OAAO,OAAO,CAAE,KAAsC,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AARW,QAAA,mBAAmB,uBAQ9B;AAEF,MAAM,uBAAuB,GAAG,GAAW,EAAE,CAC3C,IAAI,KAAK,CACP,SAAS,iBAAiB;IACxB,OAAO,SAAS,CAAC;AACnB,CAAC,EACD;IACE,GAAG,CAAC,OAAO,EAAE,QAAQ;QACnB,IAAI,QAAQ,KAAK,oBAAoB,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,IAAI,2BAA2B,EAAE,CAAC;IAC1C,CAAC;IACD,KAAK;QACH,MAAM,IAAI,2BAA2B,EAAE,CAAC;IAC1C,CAAC;IACD,GAAG;QACD,MAAM,IAAI,2BAA2B,EAAE,CAAC;IAC1C,CAAC;IACD,GAAG,CAAC,OAAO,EAAE,QAAQ;QACnB,IAAI,QAAQ,KAAK,oBAAoB,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,IAAI,2BAA2B,EAAE,CAAC;IAC1C,CAAC;IACD,OAAO;QACL,MAAM,IAAI,2BAA2B,EAAE,CAAC;IAC1C,CAAC;IACD,wBAAwB,CAAC,OAAO,EAAE,QAAQ;QACxC,IAAI,QAAQ,KAAK,oBAAoB,EAAE,CAAC;YACtC,OAAO;gBACL,YAAY,EAAE,IAAI;gBAClB,UAAU,EAAE,KAAK;gBACjB,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,IAAI;aACZ,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,2BAA2B,EAAE,CAAC;IAC1C,CAAC;CACF,CACF,CAAC;AAOG,MAAM,aAAa,GAAG,CAC3B,KAA+C,EAC/C,uBAAgC,EACtB,EAAE;IACZ,MAAM,OAAO,GACX,uBAAuB,IAAI,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAEnF,OAAO;QACL,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,IAAI,KAAK,EAAE,KAAK,IAAI,IAAI;QAC5C,QAAQ,EAAE,GAAG,EAAE,CAAE,OAAgC,IAAI,KAAK,EAAE,QAAQ,IAAI,EAAE;KAC3E,CAAC;AACJ,CAAC,CAAC;AAXW,QAAA,aAAa,iBAWxB"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ // Log collector for pm.log + console.{log,info,warn,error,debug}.
3
+ // Captures user-script output as structured entries so callers can render
4
+ // them in scenario UIs / CLI reports without granting the script real
5
+ // access to the host's stdio.
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.createSilentLogCollector = exports.createLogCollector = void 0;
8
+ const stringifyArgument = (value) => {
9
+ if (typeof value === "string") {
10
+ return value;
11
+ }
12
+ if (typeof value === "number" || typeof value === "boolean" || value === null) {
13
+ return String(value);
14
+ }
15
+ if (typeof value === "undefined") {
16
+ return "undefined";
17
+ }
18
+ if (value instanceof Error) {
19
+ return value.stack ?? value.message;
20
+ }
21
+ try {
22
+ return JSON.stringify(value, null, 2);
23
+ }
24
+ catch {
25
+ return String(value);
26
+ }
27
+ };
28
+ const createLogCollector = () => {
29
+ const logs = [];
30
+ const append = (level, args) => {
31
+ logs.push({
32
+ level,
33
+ message: args.map((entry) => stringifyArgument(entry)).join(" "),
34
+ });
35
+ };
36
+ return {
37
+ pmLog: (...args) => append("log", args),
38
+ consoleApi: {
39
+ log: (...args) => append("log", args),
40
+ info: (...args) => append("info", args),
41
+ warn: (...args) => append("warn", args),
42
+ error: (...args) => append("error", args),
43
+ debug: (...args) => append("debug", args),
44
+ },
45
+ logs,
46
+ };
47
+ };
48
+ exports.createLogCollector = createLogCollector;
49
+ // Silent collector — used when the caller did not enable the `log` extension.
50
+ // pm.log and console.* still need to exist on the scope (so user scripts
51
+ // don't throw ReferenceError); they just become no-ops with no output.
52
+ const createSilentLogCollector = () => ({
53
+ pmLog: () => undefined,
54
+ consoleApi: {
55
+ log: () => undefined,
56
+ info: () => undefined,
57
+ warn: () => undefined,
58
+ error: () => undefined,
59
+ debug: () => undefined,
60
+ },
61
+ logs: [],
62
+ });
63
+ exports.createSilentLogCollector = createSilentLogCollector;
64
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../../src/script/features/log.ts"],"names":[],"mappings":";AAAA,kEAAkE;AAClE,0EAA0E;AAC1E,sEAAsE;AACtE,8BAA8B;;;AAI9B,MAAM,iBAAiB,GAAG,CAAC,KAAc,EAAU,EAAE;IACnD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC9E,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE,CAAC;QACjC,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC;IACtC,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC,CAAC;AAcK,MAAM,kBAAkB,GAAG,GAAiB,EAAE;IACnD,MAAM,IAAI,GAAqB,EAAE,CAAC;IAElC,MAAM,MAAM,GAAG,CAAC,KAA8B,EAAE,IAAe,EAAQ,EAAE;QACvE,IAAI,CAAC,IAAI,CAAC;YACR,KAAK;YACL,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;SACjE,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,OAAO;QACL,KAAK,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC;QAClD,UAAU,EAAE;YACV,GAAG,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC;YAChD,IAAI,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;YAClD,IAAI,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;YAClD,KAAK,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC;YACpD,KAAK,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC;SACrD;QACD,IAAI;KACL,CAAC;AACJ,CAAC,CAAC;AArBW,QAAA,kBAAkB,sBAqB7B;AAEF,8EAA8E;AAC9E,yEAAyE;AACzE,uEAAuE;AAChE,MAAM,wBAAwB,GAAG,GAAiB,EAAE,CAAC,CAAC;IAC3D,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS;IACtB,UAAU,EAAE;QACV,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS;QACpB,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS;QACrB,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS;QACrB,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS;QACtB,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS;KACvB;IACD,IAAI,EAAE,EAAE;CACT,CAAC,CAAC;AAVU,QAAA,wBAAwB,4BAUlC"}
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ // pm.node + label-as-global helpers for scenario scripts.
3
+ //
4
+ // In a scenario, each prior node's output is available under its label.
5
+ // Two access paths are exposed to the user script:
6
+ // 1. pm.node("Login") — explicit, never collides
7
+ // 2. Login.token — top-level binding (only when the label
8
+ // is a valid JS identifier and not
9
+ // reserved by the sandbox)
10
+ //
11
+ // Both paths attach `__meta` to the returned value (status/timing) when the
12
+ // caller supplies nodeMetaByLabel — this lets scripts inspect the upstream
13
+ // node's execution metadata directly (e.g., login.__meta.status === "success").
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.buildNodeApi = exports.buildLabelGlobals = exports.canExposeLabelAsGlobal = exports.attachMetaToScriptValue = void 0;
16
+ const scope_js_1 = require("../scope.js");
17
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
18
+ const cloneMeta = (meta) => meta
19
+ ? {
20
+ ...meta,
21
+ ...(meta.error ? { error: { ...meta.error } } : {}),
22
+ }
23
+ : undefined;
24
+ const attachMetaToScriptValue = (value, meta) => {
25
+ if (!meta) {
26
+ return value;
27
+ }
28
+ const normalizedMeta = cloneMeta(meta);
29
+ if (Array.isArray(value)) {
30
+ const nextValue = [...value];
31
+ nextValue.__meta = normalizedMeta;
32
+ return nextValue;
33
+ }
34
+ if (isRecord(value)) {
35
+ return { ...value, __meta: normalizedMeta };
36
+ }
37
+ if (value === null || typeof value === "undefined") {
38
+ return { __meta: normalizedMeta };
39
+ }
40
+ if (typeof value === "string") {
41
+ const boxed = new String(value);
42
+ boxed.__meta = normalizedMeta;
43
+ return boxed;
44
+ }
45
+ if (typeof value === "number") {
46
+ const boxed = new Number(value);
47
+ boxed.__meta = normalizedMeta;
48
+ return boxed;
49
+ }
50
+ if (typeof value === "boolean") {
51
+ const boxed = new Boolean(value);
52
+ boxed.__meta = normalizedMeta;
53
+ return boxed;
54
+ }
55
+ return { value, __meta: normalizedMeta };
56
+ };
57
+ exports.attachMetaToScriptValue = attachMetaToScriptValue;
58
+ const canExposeLabelAsGlobal = (label) => {
59
+ const trimmed = label.trim();
60
+ return (Boolean(trimmed) &&
61
+ scope_js_1.VALID_LABEL_IDENTIFIER_PATTERN.test(trimmed) &&
62
+ !scope_js_1.RESERVED_LABEL_NAMES.has(trimmed));
63
+ };
64
+ exports.canExposeLabelAsGlobal = canExposeLabelAsGlobal;
65
+ const buildLabelGlobals = ({ workflowContext, nodeMetaByLabel, }) => {
66
+ const labelGlobals = {};
67
+ for (const [label, value] of Object.entries(workflowContext)) {
68
+ if (!(0, exports.canExposeLabelAsGlobal)(label)) {
69
+ continue;
70
+ }
71
+ labelGlobals[label] = (0, exports.attachMetaToScriptValue)(value, nodeMetaByLabel?.[label]);
72
+ }
73
+ // The reserved key `workflow` is forwarded as-is when present (without
74
+ // __meta attachment) — backend/electron both expose this.
75
+ labelGlobals.workflow = workflowContext.workflow ?? null;
76
+ return labelGlobals;
77
+ };
78
+ exports.buildLabelGlobals = buildLabelGlobals;
79
+ const buildNodeApi = ({ workflowContext, nodeMetaByLabel, }) => {
80
+ return (label) => {
81
+ const normalizedLabel = String(label ?? "").trim();
82
+ if (!normalizedLabel) {
83
+ return null;
84
+ }
85
+ return (0, exports.attachMetaToScriptValue)(workflowContext[normalizedLabel] ?? null, nodeMetaByLabel?.[normalizedLabel]);
86
+ };
87
+ };
88
+ exports.buildNodeApi = buildNodeApi;
89
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../../src/script/features/node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ // pm.random — collection-runner random data generators.
3
+ //
4
+ // Lifted from pmanfrontend/electron/script/randomGenerators.ts so all
5
+ // runtimes (CLI, backend, electron) can use the same surface. The host can
6
+ // optionally inject a deterministic RNG (`() => number` returning [0, 1))
7
+ // for testing; the default uses crypto.getRandomValues when available, else
8
+ // Math.random.
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.buildRandomApi = void 0;
11
+ const EMAIL_DOMAINS = ["example.com", "mailinator.com", "test.dev", "pman.dev"];
12
+ const FIRST_NAMES = [
13
+ "Aylin",
14
+ "Murad",
15
+ "Laman",
16
+ "Orxan",
17
+ "Leyla",
18
+ "Kenan",
19
+ "Nigar",
20
+ "Farid",
21
+ ];
22
+ const LAST_NAMES = [
23
+ "Aliyev",
24
+ "Mammadov",
25
+ "Rahimova",
26
+ "Hasanli",
27
+ "Rustamov",
28
+ "Asadova",
29
+ "Karimli",
30
+ "Guliyev",
31
+ ];
32
+ const STRING_ALPHABET = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
33
+ const defaultRng = () => {
34
+ if (typeof crypto !== "undefined" && typeof crypto.getRandomValues === "function") {
35
+ const values = new Uint32Array(1);
36
+ crypto.getRandomValues(values);
37
+ return values[0] / 0xffffffff;
38
+ }
39
+ return Math.random();
40
+ };
41
+ const buildRandomApi = (rng = defaultRng) => {
42
+ const intBetween = (min, max) => {
43
+ const lo = Math.ceil(Math.min(min, max));
44
+ const hi = Math.floor(Math.max(min, max));
45
+ return Math.floor(rng() * (hi - lo + 1)) + lo;
46
+ };
47
+ const pick = (items) => items[intBetween(0, Math.max(0, items.length - 1))];
48
+ const pad = (value, length = 2) => String(value).padStart(length, "0");
49
+ const formatDate = (date, format) => {
50
+ const offsetMin = -date.getTimezoneOffset();
51
+ const offsetSign = offsetMin >= 0 ? "+" : "-";
52
+ const offsetH = Math.floor(Math.abs(offsetMin) / 60);
53
+ const offsetM = Math.abs(offsetMin) % 60;
54
+ return format
55
+ .replace(/YYYY/g, String(date.getFullYear()))
56
+ .replace(/MM/g, pad(date.getMonth() + 1))
57
+ .replace(/DD/g, pad(date.getDate()))
58
+ .replace(/HH/g, pad(date.getHours()))
59
+ .replace(/mm/g, pad(date.getMinutes()))
60
+ .replace(/ss/g, pad(date.getSeconds()))
61
+ .replace(/SSS/g, pad(date.getMilliseconds(), 3))
62
+ .replace(/Z/g, `${offsetSign}${pad(offsetH)}:${pad(offsetM)}`);
63
+ };
64
+ const randomString = (length = 12) => {
65
+ const n = Math.max(1, Math.min(128, Math.trunc(length)));
66
+ let out = "";
67
+ for (let i = 0; i < n; i += 1) {
68
+ out += STRING_ALPHABET[intBetween(0, STRING_ALPHABET.length - 1)];
69
+ }
70
+ return out;
71
+ };
72
+ return {
73
+ uuid() {
74
+ if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
75
+ return crypto.randomUUID();
76
+ }
77
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (token) => {
78
+ const v = Math.floor(rng() * 16);
79
+ const r = token === "x" ? v : (v & 0x3) | 0x8;
80
+ return r.toString(16);
81
+ });
82
+ },
83
+ int(min = 0, max = 999_999) {
84
+ return String(intBetween(min, max));
85
+ },
86
+ string: randomString,
87
+ email() {
88
+ const local = `${pick(FIRST_NAMES).toLowerCase()}.${randomString(6).toLowerCase()}`;
89
+ return `${local}@${pick(EMAIL_DOMAINS)}`;
90
+ },
91
+ phone() {
92
+ return `+1${intBetween(2_000_000_000, 9_999_999_999)}`;
93
+ },
94
+ name() {
95
+ return `${pick(FIRST_NAMES)} ${pick(LAST_NAMES)}`;
96
+ },
97
+ date(format = "YYYY-MM-DD") {
98
+ return formatDate(new Date(Date.now() + intBetween(-365, 365) * 24 * 60 * 60 * 1000), format);
99
+ },
100
+ boolean() {
101
+ return rng() >= 0.5 ? "true" : "false";
102
+ },
103
+ bigdecimal(min = 0, max = 100_000, scale = 6) {
104
+ const integer = intBetween(min, max);
105
+ const width = Math.max(1, Math.min(12, scale));
106
+ let fraction = "";
107
+ for (let i = 0; i < width; i += 1) {
108
+ fraction += String(intBetween(0, 9));
109
+ }
110
+ return `${integer}.${fraction}`;
111
+ },
112
+ };
113
+ };
114
+ exports.buildRandomApi = buildRandomApi;
115
+ //# sourceMappingURL=random.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"random.js","sourceRoot":"","sources":["../../../src/script/features/random.ts"],"names":[],"mappings":";AAAA,wDAAwD;AACxD,EAAE;AACF,sEAAsE;AACtE,2EAA2E;AAC3E,0EAA0E;AAC1E,4EAA4E;AAC5E,eAAe;;;AAEf,MAAM,aAAa,GAAG,CAAC,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAChF,MAAM,WAAW,GAAG;IAClB,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;CACR,CAAC;AACF,MAAM,UAAU,GAAG;IACjB,QAAQ;IACR,UAAU;IACV,UAAU;IACV,SAAS;IACT,UAAU;IACV,SAAS;IACT,SAAS;IACT,SAAS;CACV,CAAC;AACF,MAAM,eAAe,GACnB,gEAAgE,CAAC;AAEnE,MAAM,UAAU,GAAG,GAAW,EAAE;IAC9B,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,eAAe,KAAK,UAAU,EAAE,CAAC;QAClF,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC/B,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;IAChC,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;AACvB,CAAC,CAAC;AAcK,MAAM,cAAc,GAAG,CAAC,MAAoB,UAAU,EAAa,EAAE;IAC1E,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,GAAW,EAAU,EAAE;QACtD,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACzC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAChD,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,CAAI,KAAU,EAAK,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAM,CAAC;IAE5F,MAAM,GAAG,GAAG,CAAC,KAAa,EAAE,MAAM,GAAG,CAAC,EAAU,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEvF,MAAM,UAAU,GAAG,CAAC,IAAU,EAAE,MAAc,EAAU,EAAE;QACxD,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC5C,MAAM,UAAU,GAAG,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;QACzC,OAAO,MAAM;aACV,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;aAC5C,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;aACxC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;aACnC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;aACpC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;aACtC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;aACtC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC;aAC/C,OAAO,CAAC,IAAI,EAAE,GAAG,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACnE,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,MAAM,GAAG,EAAE,EAAU,EAAE;QAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACzD,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,GAAG,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC,EAAE,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEF,OAAO;QACL,IAAI;YACF,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;gBAC7E,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;YAC7B,CAAC;YACD,OAAO,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACvE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;gBACjC,MAAM,CAAC,GAAG,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;gBAC9C,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;QACL,CAAC;QACD,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO;YACxB,OAAO,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACtC,CAAC;QACD,MAAM,EAAE,YAAY;QACpB,KAAK;YACH,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACpF,OAAO,GAAG,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QAC3C,CAAC;QACD,KAAK;YACH,OAAO,KAAK,UAAU,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,CAAC;QACzD,CAAC;QACD,IAAI;YACF,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACpD,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,YAAY;YACxB,OAAO,UAAU,CACf,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,EAClE,MAAM,CACP,CAAC;QACJ,CAAC;QACD,OAAO;YACL,OAAO,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QACzC,CAAC;QACD,UAAU,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,EAAE,KAAK,GAAG,CAAC;YAC1C,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACrC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;YAC/C,IAAI,QAAQ,GAAG,EAAE,CAAC;YAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACvC,CAAC;YACD,OAAO,GAAG,OAAO,IAAI,QAAQ,EAAE,CAAC;QAClC,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAhFW,QAAA,cAAc,kBAgFzB"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ // pm.redis — collection-runner Redis data view (read-only).
3
+ //
4
+ // Values come from the host (pre-request Redis command results, populated
5
+ // outside the sandbox). The script can fetch by key via `pm.redis.get(key)`
6
+ // and inspect raw command results via `pm.redis.results.{pre, post}`.
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.buildRedisApi = void 0;
9
+ const buildRedisApi = (redis) => {
10
+ const values = redis?.values ?? {};
11
+ const pre = Array.isArray(redis?.results?.pre) ? [...redis.results.pre] : [];
12
+ const post = Array.isArray(redis?.results?.post) ? [...redis.results.post] : [];
13
+ return {
14
+ get: (key) => {
15
+ const normalizedKey = String(key ?? "").trim();
16
+ if (!normalizedKey) {
17
+ return null;
18
+ }
19
+ const value = values[normalizedKey];
20
+ return value === undefined ? null : value;
21
+ },
22
+ results: { pre, post },
23
+ };
24
+ };
25
+ exports.buildRedisApi = buildRedisApi;
26
+ //# sourceMappingURL=redis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.js","sourceRoot":"","sources":["../../../src/script/features/redis.ts"],"names":[],"mappings":";AAAA,4DAA4D;AAC5D,EAAE;AACF,0EAA0E;AAC1E,4EAA4E;AAC5E,sEAAsE;;;AAS/D,MAAM,aAAa,GAAG,CAAC,KAA+C,EAAY,EAAE;IACzF,MAAM,MAAM,GAAG,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC;IACnC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7E,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEhF,OAAO;QACL,GAAG,EAAE,CAAC,GAAY,EAAW,EAAE;YAC7B,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,KAAK,GAAI,MAAkC,CAAC,aAAa,CAAC,CAAC;YACjE,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QAC5C,CAAC;QACD,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE;KACvB,CAAC;AACJ,CAAC,CAAC;AAhBW,QAAA,aAAa,iBAgBxB"}
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ // pm.request — read + mutate request state for pre-request and tests stages.
3
+ //
4
+ // The API mirrors the backend's surface: getHeader/setHeader/unsetHeader,
5
+ // getQueryParam/setQueryParam/unsetQueryParam, setMethod/setUrl/setRawBody.
6
+ // Mutations are applied to a working copy; callers retrieve the final
7
+ // state via `toRequestState()` after the script completes.
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.buildRequestApi = void 0;
10
+ const cloneBody = (body) => ({
11
+ mode: body.mode,
12
+ raw: body.raw,
13
+ formEntries: body.formEntries.map((entry) => ({ ...entry })),
14
+ });
15
+ const toRecord = (entries) => {
16
+ const record = {};
17
+ for (const entry of entries) {
18
+ if (entry.enabled === false) {
19
+ continue;
20
+ }
21
+ const key = entry.key.trim();
22
+ if (!key) {
23
+ continue;
24
+ }
25
+ record[key] = entry.value;
26
+ }
27
+ return record;
28
+ };
29
+ const toEntries = (record) => Object.entries(record).map(([key, value]) => ({
30
+ key,
31
+ value,
32
+ enabled: true,
33
+ }));
34
+ const stringifyHeaderValue = (value) => {
35
+ if (value === undefined || value === null) {
36
+ return "";
37
+ }
38
+ return String(value);
39
+ };
40
+ const buildRequestApi = (request) => {
41
+ const headers = toRecord(request.headers);
42
+ const query = toRecord(request.query);
43
+ const body = cloneBody(request.body);
44
+ const api = {
45
+ method: request.method,
46
+ url: request.url,
47
+ headers,
48
+ query,
49
+ body,
50
+ getHeader: (key) => headers[String(key ?? "").trim()],
51
+ setHeader: (key, value) => {
52
+ const normalizedKey = String(key ?? "").trim();
53
+ if (!normalizedKey) {
54
+ return;
55
+ }
56
+ headers[normalizedKey] = stringifyHeaderValue(value);
57
+ },
58
+ unsetHeader: (key) => {
59
+ const normalizedKey = String(key ?? "").trim();
60
+ if (!normalizedKey) {
61
+ return;
62
+ }
63
+ delete headers[normalizedKey];
64
+ },
65
+ getQueryParam: (key) => query[String(key ?? "").trim()],
66
+ setQueryParam: (key, value) => {
67
+ const normalizedKey = String(key ?? "").trim();
68
+ if (!normalizedKey) {
69
+ return;
70
+ }
71
+ query[normalizedKey] = stringifyHeaderValue(value);
72
+ },
73
+ unsetQueryParam: (key) => {
74
+ const normalizedKey = String(key ?? "").trim();
75
+ if (!normalizedKey) {
76
+ return;
77
+ }
78
+ delete query[normalizedKey];
79
+ },
80
+ setMethod(nextMethod) {
81
+ const normalizedValue = String(nextMethod ?? "")
82
+ .trim()
83
+ .toUpperCase();
84
+ if (normalizedValue) {
85
+ this.method = normalizedValue;
86
+ }
87
+ },
88
+ setUrl(nextUrl) {
89
+ this.url = String(nextUrl ?? "");
90
+ },
91
+ setRawBody(value) {
92
+ this.body.mode = "raw";
93
+ this.body.raw = value === undefined || value === null ? "" : String(value);
94
+ this.body.formEntries = [];
95
+ },
96
+ };
97
+ return {
98
+ api,
99
+ toRequestState: () => ({
100
+ method: api.method,
101
+ url: api.url,
102
+ headers: toEntries(api.headers),
103
+ query: toEntries(api.query),
104
+ body: cloneBody(api.body),
105
+ }),
106
+ };
107
+ };
108
+ exports.buildRequestApi = buildRequestApi;
109
+ //# sourceMappingURL=request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/script/features/request.ts"],"names":[],"mappings":"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"}