@rest-vir/define-service 0.15.1 → 0.16.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.
@@ -56,3 +56,27 @@ export declare const originRequirementShape: import("object-shape-tester").Shape
56
56
  }]>, import("object-shape-tester").ShapeClass<[RegExpConstructor]>, () => void, import("object-shape-tester").ShapeOr<[string, import("object-shape-tester").ShapeExact<readonly [{
57
57
  anyOrigin: boolean;
58
58
  }]>, import("object-shape-tester").ShapeClass<[RegExpConstructor]>, () => void]>[]]>, false>;
59
+ /**
60
+ * - `boolean`: the origin was explicitly checked and passed (`true`) or failed (`false`)
61
+ * - `undefined`: no origin checking occurred
62
+ * - `AnyOrigin`: requirements explicitly allow any origin.
63
+ */
64
+ export type OriginRequirementResult = boolean | undefined | AnyOrigin;
65
+ /**
66
+ * Checks the given origin against the given origin requirement and determine if the origin matches.
67
+ * See {@link OriginRequirementResult} for details on what each possible return value means.
68
+ *
69
+ * @category Internal
70
+ * @category Package : @rest-vir/define-service
71
+ * @package [`@rest-vir/define-service`](https://www.npmjs.com/package/@rest-vir/define-service)
72
+ */
73
+ export declare function checkOriginRequirement(origin: string | undefined, originRequirement: OriginRequirement): Promise<OriginRequirementResult>;
74
+ /**
75
+ * Narrower version of {@link checkOriginRequirement} that simply returns `true` if the origin
76
+ * matched or `false` otherwise.
77
+ *
78
+ * @category Internal
79
+ * @category Package : @rest-vir/define-service
80
+ * @package [`@rest-vir/define-service`](https://www.npmjs.com/package/@rest-vir/define-service)
81
+ */
82
+ export declare function matchesOriginRequirement(origin: string | undefined, originRequirement: NonNullable<OriginRequirement>): Promise<boolean>;
@@ -31,3 +31,53 @@ export function isAnyOrigin(input) {
31
31
  export const originRequirementShape = defineShape(or(undefined, '', exact(AnyOrigin), classShape(RegExp), () => { }, [
32
32
  or('', exact(AnyOrigin), classShape(RegExp), () => { }),
33
33
  ]));
34
+ /**
35
+ * Checks the given origin against the given origin requirement and determine if the origin matches.
36
+ * See {@link OriginRequirementResult} for details on what each possible return value means.
37
+ *
38
+ * @category Internal
39
+ * @category Package : @rest-vir/define-service
40
+ * @package [`@rest-vir/define-service`](https://www.npmjs.com/package/@rest-vir/define-service)
41
+ */
42
+ export async function checkOriginRequirement(origin, originRequirement) {
43
+ if (isAnyOrigin(originRequirement)) {
44
+ /** Any origin has been explicitly allowed. */
45
+ return AnyOrigin;
46
+ }
47
+ else if (originRequirement === undefined) {
48
+ /** No checking occurred. */
49
+ return undefined;
50
+ }
51
+ else if (!origin) {
52
+ /** If there is an origin requirement but no origin then the origin automatically fails. */
53
+ return false;
54
+ }
55
+ else if (check.isString(originRequirement)) {
56
+ return origin === originRequirement;
57
+ }
58
+ else if (check.instanceOf(originRequirement, RegExp)) {
59
+ return !!originRequirement.exec(origin);
60
+ }
61
+ else if (check.isArray(originRequirement)) {
62
+ for (const requirement of originRequirement) {
63
+ if (await checkOriginRequirement(origin, requirement)) {
64
+ return true;
65
+ }
66
+ }
67
+ return false;
68
+ }
69
+ else {
70
+ return await originRequirement(origin);
71
+ }
72
+ }
73
+ /**
74
+ * Narrower version of {@link checkOriginRequirement} that simply returns `true` if the origin
75
+ * matched or `false` otherwise.
76
+ *
77
+ * @category Internal
78
+ * @category Package : @rest-vir/define-service
79
+ * @package [`@rest-vir/define-service`](https://www.npmjs.com/package/@rest-vir/define-service)
80
+ */
81
+ export async function matchesOriginRequirement(origin, originRequirement) {
82
+ return !!(await checkOriginRequirement(origin, originRequirement));
83
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rest-vir/define-service",
3
- "version": "0.15.1",
3
+ "version": "0.16.0",
4
4
  "description": "Define an connect to a declarative and type safe REST and WebSocket service.",
5
5
  "keywords": [
6
6
  "rest",