@pax2pay/model-banking 0.1.85 → 0.1.87

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.
@@ -4,14 +4,12 @@ import { Meta } from "./Meta"
4
4
 
5
5
  export type Changeable = {
6
6
  limit?: [isoly.Currency, number]
7
- rules?: string[]
8
7
  meta?: Meta
9
8
  }
10
9
 
11
10
  export namespace Changeable {
12
11
  export const type = isly.object<Changeable>({
13
12
  limit: isly.tuple(isly.fromIs("isoly.Currency", isoly.Currency.is), isly.number()).optional(),
14
- rules: isly.string().array().optional(),
15
13
  meta: isly.fromIs("Card.Meta", Meta.is).optional(),
16
14
  })
17
15
  export const is = type.is
@@ -0,0 +1,7 @@
1
+ import { selectively } from "selectively"
2
+
3
+ export const definitions: Record<string, selectively.Definition> = {
4
+ exceedsAmount: { arguments: ["max"], definition: "amount>max" },
5
+ isInternal: { arguments: [], definition: "counterpart.type:internal" },
6
+ alwaysTrue: { arguments: [], definition: "amount>0|amount<0" },
7
+ }
package/Rule/index.ts ADDED
@@ -0,0 +1,45 @@
1
+ import { selectively } from "selectively"
2
+ import { isly } from "isly"
3
+ import { definitions } from "./definitions"
4
+
5
+ export interface Rule {
6
+ name: string
7
+ description: string
8
+ action: Rule.Action
9
+ type: Rule.Kind
10
+ condition: string
11
+ flags: string[]
12
+ }
13
+
14
+ export namespace Rule {
15
+ export const actions = ["review", "reject", "flag"] as const
16
+ export type Action = typeof actions[number]
17
+ export const kinds = ["authorization", "outbound", "inbound"] as const
18
+ export type Kind = typeof kinds[number]
19
+ export const type = isly.object<Rule>({
20
+ name: isly.string(),
21
+ description: isly.string(),
22
+ action: isly.string(actions),
23
+ type: isly.string(kinds),
24
+ condition: isly.string(),
25
+ flags: isly.string().array(),
26
+ })
27
+ export const is = type.is
28
+ export const flaw = type.flaw
29
+ export function stringify(rule: Rule): string {
30
+ return `{ label: ${rule.name}, action: ${rule.action}, type: ${rule.type}, condition: ${rule.condition}, description: ${rule.description}. }`
31
+ }
32
+ export function evaluate<S extends object>(
33
+ rules: Rule[],
34
+ state: S,
35
+ macros?: Record<string, selectively.Definition>
36
+ ): Record<Action, Rule[]> {
37
+ const result: Record<Action, Rule[]> = { review: [], reject: [], flag: [] }
38
+ rules.forEach(
39
+ r =>
40
+ selectively.resolve({ ...macros, ...definitions }, selectively.parse(r.condition)).is(state) &&
41
+ result[r.action].push(r)
42
+ )
43
+ return result
44
+ }
45
+ }
@@ -3,7 +3,6 @@ import { isly } from "isly";
3
3
  import { Meta } from "./Meta";
4
4
  export type Changeable = {
5
5
  limit?: [isoly.Currency, number];
6
- rules?: string[];
7
6
  meta?: Meta;
8
7
  };
9
8
  export declare namespace Changeable {
@@ -5,7 +5,6 @@ export var Changeable;
5
5
  (function (Changeable) {
6
6
  Changeable.type = isly.object({
7
7
  limit: isly.tuple(isly.fromIs("isoly.Currency", isoly.Currency.is), isly.number()).optional(),
8
- rules: isly.string().array().optional(),
9
8
  meta: isly.fromIs("Card.Meta", Meta.is).optional(),
10
9
  });
11
10
  Changeable.is = Changeable.type.is;
@@ -1 +1 @@
1
- {"version":3,"file":"Changeable.js","sourceRoot":"../","sources":["Card/Changeable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAQ7B,MAAM,KAAW,UAAU,CAS1B;AATD,WAAiB,UAAU;IACb,eAAI,GAAG,IAAI,CAAC,MAAM,CAAa;QAC3C,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QAC7F,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE;QACvC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;KAClD,CAAC,CAAA;IACW,aAAE,GAAG,WAAA,IAAI,CAAC,EAAE,CAAA;IACZ,eAAI,GAAG,WAAA,IAAI,CAAC,IAAI,CAAA;IAChB,cAAG,GAAG,WAAA,IAAI,CAAC,GAAG,CAAA;AAC5B,CAAC,EATgB,UAAU,KAAV,UAAU,QAS1B"}
1
+ {"version":3,"file":"Changeable.js","sourceRoot":"../","sources":["Card/Changeable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAO7B,MAAM,KAAW,UAAU,CAQ1B;AARD,WAAiB,UAAU;IACb,eAAI,GAAG,IAAI,CAAC,MAAM,CAAa;QAC3C,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QAC7F,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;KAClD,CAAC,CAAA;IACW,aAAE,GAAG,WAAA,IAAI,CAAC,EAAE,CAAA;IACZ,eAAI,GAAG,WAAA,IAAI,CAAC,IAAI,CAAA;IAChB,cAAG,GAAG,WAAA,IAAI,CAAC,GAAG,CAAA;AAC5B,CAAC,EARgB,UAAU,KAAV,UAAU,QAQ1B"}
@@ -0,0 +1,2 @@
1
+ import { selectively } from "selectively";
2
+ export declare const definitions: Record<string, selectively.Definition>;
@@ -0,0 +1,6 @@
1
+ export const definitions = {
2
+ exceedsAmount: { arguments: ["max"], definition: "amount>max" },
3
+ isInternal: { arguments: [], definition: "counterpart.type:internal" },
4
+ alwaysTrue: { arguments: [], definition: "amount>0|amount<0" },
5
+ };
6
+ //# sourceMappingURL=definitions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definitions.js","sourceRoot":"../","sources":["Rule/definitions.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAA2C;IAClE,aAAa,EAAE,EAAE,SAAS,EAAE,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE;IAC/D,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,2BAA2B,EAAE;IACtE,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,mBAAmB,EAAE;CAC9D,CAAA"}
@@ -0,0 +1,21 @@
1
+ import { selectively } from "selectively";
2
+ import { isly } from "isly";
3
+ export interface Rule {
4
+ name: string;
5
+ description: string;
6
+ action: Rule.Action;
7
+ type: Rule.Kind;
8
+ condition: string;
9
+ flags: string[];
10
+ }
11
+ export declare namespace Rule {
12
+ const actions: readonly ["review", "reject", "flag"];
13
+ type Action = typeof actions[number];
14
+ const kinds: readonly ["authorization", "outbound", "inbound"];
15
+ type Kind = typeof kinds[number];
16
+ const type: isly.object.ExtendableType<Rule>;
17
+ const is: isly.Type.IsFunction<Rule>;
18
+ const flaw: isly.Type.FlawFunction;
19
+ function stringify(rule: Rule): string;
20
+ function evaluate<S extends object>(rules: Rule[], state: S, macros?: Record<string, selectively.Definition>): Record<Action, Rule[]>;
21
+ }
@@ -0,0 +1,30 @@
1
+ import { selectively } from "selectively";
2
+ import { isly } from "isly";
3
+ import { definitions } from "./definitions";
4
+ export var Rule;
5
+ (function (Rule) {
6
+ Rule.actions = ["review", "reject", "flag"];
7
+ Rule.kinds = ["authorization", "outbound", "inbound"];
8
+ Rule.type = isly.object({
9
+ name: isly.string(),
10
+ description: isly.string(),
11
+ action: isly.string(Rule.actions),
12
+ type: isly.string(Rule.kinds),
13
+ condition: isly.string(),
14
+ flags: isly.string().array(),
15
+ });
16
+ Rule.is = Rule.type.is;
17
+ Rule.flaw = Rule.type.flaw;
18
+ function stringify(rule) {
19
+ return `{ label: ${rule.name}, action: ${rule.action}, type: ${rule.type}, condition: ${rule.condition}, description: ${rule.description}. }`;
20
+ }
21
+ Rule.stringify = stringify;
22
+ function evaluate(rules, state, macros) {
23
+ const result = { review: [], reject: [], flag: [] };
24
+ rules.forEach(r => selectively.resolve({ ...macros, ...definitions }, selectively.parse(r.condition)).is(state) &&
25
+ result[r.action].push(r));
26
+ return result;
27
+ }
28
+ Rule.evaluate = evaluate;
29
+ })(Rule || (Rule = {}));
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"../","sources":["Rule/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAW3C,MAAM,KAAW,IAAI,CA+BpB;AA/BD,WAAiB,IAAI;IACP,YAAO,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAA;IAE/C,UAAK,GAAG,CAAC,eAAe,EAAE,UAAU,EAAE,SAAS,CAAU,CAAA;IAEzD,SAAI,GAAG,IAAI,CAAC,MAAM,CAAO;QACrC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE;QACnB,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE;QAC1B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,KAAA,OAAO,CAAC;QAC5B,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAA,KAAK,CAAC;QACxB,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE;QACxB,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE;KAC5B,CAAC,CAAA;IACW,OAAE,GAAG,KAAA,IAAI,CAAC,EAAE,CAAA;IACZ,SAAI,GAAG,KAAA,IAAI,CAAC,IAAI,CAAA;IAC7B,SAAgB,SAAS,CAAC,IAAU;QACnC,OAAO,YAAY,IAAI,CAAC,IAAI,aAAa,IAAI,CAAC,MAAM,WAAW,IAAI,CAAC,IAAI,gBAAgB,IAAI,CAAC,SAAS,kBAAkB,IAAI,CAAC,WAAW,KAAK,CAAA;IAC9I,CAAC;IAFe,cAAS,YAExB,CAAA;IACD,SAAgB,QAAQ,CACvB,KAAa,EACb,KAAQ,EACR,MAA+C;QAE/C,MAAM,MAAM,GAA2B,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAA;QAC3E,KAAK,CAAC,OAAO,CACZ,CAAC,CAAC,EAAE,CACH,WAAW,CAAC,OAAO,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,WAAW,EAAE,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;YAC5F,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACzB,CAAA;QACD,OAAO,MAAM,CAAA;IACd,CAAC;IAZe,aAAQ,WAYvB,CAAA;AACF,CAAC,EA/BgB,IAAI,KAAJ,IAAI,QA+BpB"}
package/dist/pax2pay.d.ts CHANGED
@@ -13,3 +13,4 @@ export { Realm } from "./Realm";
13
13
  export { Supplier } from "./Supplier";
14
14
  export { Settlement } from "./Settlement";
15
15
  export { Merchant } from "./Merchant";
16
+ export { Rule } from "./Rule";
package/dist/pax2pay.js CHANGED
@@ -13,4 +13,5 @@ export { Realm } from "./Realm";
13
13
  export { Supplier } from "./Supplier";
14
14
  export { Settlement } from "./Settlement";
15
15
  export { Merchant } from "./Merchant";
16
+ export { Rule } from "./Rule";
16
17
  //# sourceMappingURL=pax2pay.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pax2pay.js","sourceRoot":"../","sources":["pax2pay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"pax2pay.js","sourceRoot":"../","sources":["pax2pay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pax2pay/model-banking",
3
- "version": "0.1.85",
3
+ "version": "0.1.87",
4
4
  "description": "Library containing data model types and functions for the Pax2Pay Banking API.",
5
5
  "author": "Pax2Pay Ltd",
6
6
  "license": "MIT",
@@ -29,7 +29,7 @@
29
29
  "^.+\\.(j|t)sx?$": "ts-jest"
30
30
  },
31
31
  "transformIgnorePatterns": [
32
- "<rootDir>/node_modules/(?!(cryptly|authly|isly|isoly|gracely|cloudly-http|cloudly-rest|cloudly-router|cloudly-formdata|@userwidgets)/.*)"
32
+ "<rootDir>/node_modules/(?!(cryptly|authly|isly|isoly|gracely|cloudly-http|cloudly-rest|cloudly-router|cloudly-formdata|@userwidgets|selectively)/.*)"
33
33
  ],
34
34
  "testEnvironment": "node",
35
35
  "testRegex": "((\\.|/)(test|spec))(\\.|\\/.+)(jsx?|tsx?)$",
package/pax2pay.ts CHANGED
@@ -13,3 +13,4 @@ export { Realm } from "./Realm"
13
13
  export { Supplier } from "./Supplier"
14
14
  export { Settlement } from "./Settlement"
15
15
  export { Merchant } from "./Merchant"
16
+ export { Rule } from "./Rule"