@pwrdrvr/microapps-router-lib 0.4.0-alpha.8 → 1.0.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.
- package/dist/app-cache.d.ts +58 -0
- package/dist/app-cache.d.ts.map +1 -0
- package/dist/app-cache.js +154 -0
- package/dist/app-cache.js.map +1 -0
- package/dist/get-app-info.d.ts +9 -0
- package/dist/get-app-info.d.ts.map +1 -0
- package/dist/get-app-info.js +25 -0
- package/dist/get-app-info.js.map +1 -0
- package/dist/get-route.d.ts +83 -0
- package/dist/get-route.d.ts.map +1 -0
- package/dist/get-route.js +154 -0
- package/dist/get-route.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/log.d.ts +5 -0
- package/dist/lib/log.d.ts.map +1 -0
- package/dist/lib/log.js +11 -0
- package/dist/lib/log.js.map +1 -0
- package/dist/load-app-frame.d.ts +8 -0
- package/dist/load-app-frame.d.ts.map +1 -0
- package/dist/load-app-frame.js +38 -0
- package/dist/load-app-frame.js.map +1 -0
- package/dist/normalize-path-prefix.d.ts +8 -0
- package/dist/normalize-path-prefix.d.ts.map +1 -0
- package/dist/normalize-path-prefix.js +21 -0
- package/dist/normalize-path-prefix.js.map +1 -0
- package/dist/redirect-default-file.d.ts +18 -0
- package/dist/redirect-default-file.d.ts.map +1 -0
- package/dist/redirect-default-file.js +54 -0
- package/dist/redirect-default-file.js.map +1 -0
- package/dist/route-app.d.ts +23 -0
- package/dist/route-app.d.ts.map +1 -0
- package/dist/route-app.js +169 -0
- package/dist/route-app.js.map +1 -0
- package/package.json +5 -2
- package/src/app-cache.spec.ts +175 -0
- package/src/app-cache.ts +193 -0
- package/src/get-app-info.spec.ts +77 -0
- package/src/get-app-info.ts +31 -0
- package/src/get-route.spec.ts +585 -0
- package/src/get-route.ts +267 -0
- package/src/index.ts +5 -536
- package/src/load-app-frame.spec.ts +51 -0
- package/src/load-app-frame.ts +36 -0
- package/src/normalize-path-prefix.spec.ts +27 -0
- package/src/normalize-path-prefix.ts +18 -0
- package/src/redirect-default-file.spec.ts +98 -0
- package/src/redirect-default-file.ts +79 -0
- package/src/route-app.spec.ts +128 -0
- package/src/route-app.ts +202 -0
- package/src/index.spec.ts +0 -318
- /package/src/{index.prefix.spec.ts → get-route.prefix.spec.ts} +0 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { DBManager, Rules, Version } from '@pwrdrvr/microapps-datalib';
|
|
2
|
+
export declare class AppVersionCache {
|
|
3
|
+
private negativeAppNameCache;
|
|
4
|
+
private appRulesCache;
|
|
5
|
+
private appVersionsCache;
|
|
6
|
+
private dbManager;
|
|
7
|
+
private static instance;
|
|
8
|
+
/**
|
|
9
|
+
* Get the AppVersionCache instance or create it
|
|
10
|
+
*/
|
|
11
|
+
static GetInstance({ dbManager }: {
|
|
12
|
+
dbManager: DBManager;
|
|
13
|
+
}): AppVersionCache;
|
|
14
|
+
constructor({ dbManager }: {
|
|
15
|
+
dbManager: DBManager;
|
|
16
|
+
});
|
|
17
|
+
private get CacheIsEmpty();
|
|
18
|
+
/**
|
|
19
|
+
* Used to populate the cache when the cache is completely empty
|
|
20
|
+
* @param appName
|
|
21
|
+
*/
|
|
22
|
+
private PopulateEmptyCache;
|
|
23
|
+
ClearCache(): void;
|
|
24
|
+
/**
|
|
25
|
+
* Get Rules for an app
|
|
26
|
+
*
|
|
27
|
+
* Populates the cache if empty
|
|
28
|
+
* Freshens a cache entry if it is stale
|
|
29
|
+
* Feturns the cached value if it is fresh
|
|
30
|
+
* Fetches a single item if the cache is not empty but the item is not in the cache
|
|
31
|
+
*
|
|
32
|
+
* @param appName
|
|
33
|
+
* @returns
|
|
34
|
+
*/
|
|
35
|
+
GetRules({ key: { AppName }, }: {
|
|
36
|
+
key: {
|
|
37
|
+
AppName: string;
|
|
38
|
+
};
|
|
39
|
+
}): Promise<Rules | undefined>;
|
|
40
|
+
/**
|
|
41
|
+
* Get Version info for an app and semVer
|
|
42
|
+
*
|
|
43
|
+
* Populates the cache if empty
|
|
44
|
+
* Freshens a cache entry if it is stale
|
|
45
|
+
* Feturns the cached value if it is fresh
|
|
46
|
+
* Fetches a single item if the cache is not empty but the item is not in the cache
|
|
47
|
+
*
|
|
48
|
+
* @param appName
|
|
49
|
+
* @returns
|
|
50
|
+
*/
|
|
51
|
+
GetVersionInfo({ key: { AppName, SemVer }, }: {
|
|
52
|
+
key: {
|
|
53
|
+
AppName: string;
|
|
54
|
+
SemVer: string;
|
|
55
|
+
};
|
|
56
|
+
}): Promise<Version | undefined>;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=app-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-cache.d.ts","sourceRoot":"","sources":["../src/app-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAOpF,qBAAa,eAAe;IAC1B,OAAO,CAAC,oBAAoB,CAAsC;IAClE,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,gBAAgB,CAAiD;IACzE,OAAO,CAAC,SAAS,CAAY;IAE7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkB;IAEzC;;OAEG;WACW,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE;QAAE,SAAS,EAAE,SAAS,CAAA;KAAE,GAAG,eAAe;gBAQvE,EAAE,SAAS,EAAE,EAAE;QAAE,SAAS,EAAE,SAAS,CAAA;KAAE;IAOnD,OAAO,KAAK,YAAY,GAEvB;IAED;;;OAGG;YACW,kBAAkB;IAoCzB,UAAU,IAAI,IAAI;IAKzB;;;;;;;;;;OAUG;IACU,QAAQ,CAAC,EACpB,GAAG,EAAE,EAAE,OAAO,EAAE,GACjB,EAAE;QACD,GAAG,EAAE;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;KAC1B,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;IA+B9B;;;;;;;;;;OAUG;IACU,cAAc,CAAC,EAC1B,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GACzB,EAAE;QACD,GAAG,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;KAC1C,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;CAiDjC"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AppVersionCache = void 0;
|
|
4
|
+
const microapps_datalib_1 = require("@pwrdrvr/microapps-datalib");
|
|
5
|
+
class AppVersionCache {
|
|
6
|
+
/**
|
|
7
|
+
* Get the AppVersionCache instance or create it
|
|
8
|
+
*/
|
|
9
|
+
static GetInstance({ dbManager }) {
|
|
10
|
+
if (!AppVersionCache.instance) {
|
|
11
|
+
AppVersionCache.instance = new AppVersionCache({ dbManager });
|
|
12
|
+
}
|
|
13
|
+
return AppVersionCache.instance;
|
|
14
|
+
}
|
|
15
|
+
constructor({ dbManager }) {
|
|
16
|
+
this.negativeAppNameCache = new Map();
|
|
17
|
+
this.appRulesCache = new Map();
|
|
18
|
+
this.appVersionsCache = new Map();
|
|
19
|
+
this.dbManager = dbManager;
|
|
20
|
+
}
|
|
21
|
+
get CacheIsEmpty() {
|
|
22
|
+
return this.appRulesCache.size === 0 && this.appVersionsCache.size === 0;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Used to populate the cache when the cache is completely empty
|
|
26
|
+
* @param appName
|
|
27
|
+
*/
|
|
28
|
+
async PopulateEmptyCache({ key: { AppName }, }) {
|
|
29
|
+
const versionsAndRules = await microapps_datalib_1.Application.GetVersionsAndRules({
|
|
30
|
+
dbManager: this.dbManager,
|
|
31
|
+
key: { AppName },
|
|
32
|
+
});
|
|
33
|
+
if (!versionsAndRules || (versionsAndRules.Versions.length === 0 && !versionsAndRules.Rules)) {
|
|
34
|
+
this.negativeAppNameCache.set(AppName.toLowerCase(), {
|
|
35
|
+
timestamp: Date.now(),
|
|
36
|
+
data: undefined,
|
|
37
|
+
});
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
// Remove negative cache entry if it exists
|
|
41
|
+
this.negativeAppNameCache.delete(AppName.toLowerCase());
|
|
42
|
+
this.appRulesCache.set(AppName.toLowerCase(), {
|
|
43
|
+
timestamp: Date.now(),
|
|
44
|
+
data: versionsAndRules.Rules,
|
|
45
|
+
});
|
|
46
|
+
const versionsMap = new Map();
|
|
47
|
+
for (const version of versionsAndRules.Versions) {
|
|
48
|
+
versionsMap.set(version.SemVer, {
|
|
49
|
+
timestamp: Date.now(),
|
|
50
|
+
data: version,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
this.appVersionsCache.set(AppName.toLowerCase(), versionsMap);
|
|
54
|
+
}
|
|
55
|
+
ClearCache() {
|
|
56
|
+
this.appRulesCache.clear();
|
|
57
|
+
this.appVersionsCache.clear();
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get Rules for an app
|
|
61
|
+
*
|
|
62
|
+
* Populates the cache if empty
|
|
63
|
+
* Freshens a cache entry if it is stale
|
|
64
|
+
* Feturns the cached value if it is fresh
|
|
65
|
+
* Fetches a single item if the cache is not empty but the item is not in the cache
|
|
66
|
+
*
|
|
67
|
+
* @param appName
|
|
68
|
+
* @returns
|
|
69
|
+
*/
|
|
70
|
+
async GetRules({ key: { AppName }, }) {
|
|
71
|
+
var _a;
|
|
72
|
+
const now = Date.now();
|
|
73
|
+
// Check the negative cache first
|
|
74
|
+
const negativeCacheEntry = this.negativeAppNameCache.get(AppName.toLowerCase());
|
|
75
|
+
if (negativeCacheEntry && now - negativeCacheEntry.timestamp < 60000) {
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
else if (negativeCacheEntry) {
|
|
79
|
+
this.negativeAppNameCache.delete(AppName.toLowerCase());
|
|
80
|
+
}
|
|
81
|
+
const ruleCacheEntry = this.appRulesCache.get(AppName.toLowerCase());
|
|
82
|
+
if (ruleCacheEntry && now - ruleCacheEntry.timestamp < 60000) {
|
|
83
|
+
return ruleCacheEntry.data;
|
|
84
|
+
}
|
|
85
|
+
if (this.CacheIsEmpty || !ruleCacheEntry) {
|
|
86
|
+
await this.PopulateEmptyCache({ key: { AppName } });
|
|
87
|
+
return (_a = this.appRulesCache.get(AppName.toLowerCase())) === null || _a === void 0 ? void 0 : _a.data;
|
|
88
|
+
}
|
|
89
|
+
const versionsAndRules = await microapps_datalib_1.Application.GetVersionsAndRules({
|
|
90
|
+
dbManager: this.dbManager,
|
|
91
|
+
key: { AppName: AppName },
|
|
92
|
+
});
|
|
93
|
+
this.appRulesCache.set(AppName.toLowerCase(), { timestamp: now, data: versionsAndRules.Rules });
|
|
94
|
+
return versionsAndRules.Rules;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Get Version info for an app and semVer
|
|
98
|
+
*
|
|
99
|
+
* Populates the cache if empty
|
|
100
|
+
* Freshens a cache entry if it is stale
|
|
101
|
+
* Feturns the cached value if it is fresh
|
|
102
|
+
* Fetches a single item if the cache is not empty but the item is not in the cache
|
|
103
|
+
*
|
|
104
|
+
* @param appName
|
|
105
|
+
* @returns
|
|
106
|
+
*/
|
|
107
|
+
async GetVersionInfo({ key: { AppName, SemVer }, }) {
|
|
108
|
+
var _a, _b;
|
|
109
|
+
const now = Date.now();
|
|
110
|
+
// Check the negative cache first
|
|
111
|
+
const negativeCacheEntry = this.negativeAppNameCache.get(AppName.toLowerCase());
|
|
112
|
+
if (negativeCacheEntry && now - negativeCacheEntry.timestamp < 60000) {
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
else if (negativeCacheEntry) {
|
|
116
|
+
this.negativeAppNameCache.delete(AppName.toLowerCase());
|
|
117
|
+
}
|
|
118
|
+
// Check if we have the item cached and if it is fresh enough
|
|
119
|
+
const versionCacheEntry = this.appVersionsCache.get(AppName.toLowerCase());
|
|
120
|
+
if (versionCacheEntry) {
|
|
121
|
+
const versionInfo = versionCacheEntry.get(SemVer);
|
|
122
|
+
if (versionInfo && now - versionInfo.timestamp < 900000) {
|
|
123
|
+
return versionInfo.data;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
if (this.CacheIsEmpty || !versionCacheEntry) {
|
|
127
|
+
await this.PopulateEmptyCache({ key: { AppName } });
|
|
128
|
+
if (!this.appVersionsCache) {
|
|
129
|
+
return undefined;
|
|
130
|
+
}
|
|
131
|
+
return (_b = (_a = this.appVersionsCache.get(AppName.toLowerCase())) === null || _a === void 0 ? void 0 : _a.get(SemVer)) === null || _b === void 0 ? void 0 : _b.data;
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
// We have some data in the cache, but not for this version
|
|
135
|
+
// So we need to get the data for this version
|
|
136
|
+
const versionInfo = await microapps_datalib_1.Version.LoadVersion({
|
|
137
|
+
dbManager: this.dbManager,
|
|
138
|
+
key: { AppName, SemVer: SemVer },
|
|
139
|
+
});
|
|
140
|
+
if (!versionInfo) {
|
|
141
|
+
return undefined;
|
|
142
|
+
}
|
|
143
|
+
const versionsMap = this.appVersionsCache.get(AppName.toLowerCase());
|
|
144
|
+
if (!versionsMap) {
|
|
145
|
+
return undefined;
|
|
146
|
+
}
|
|
147
|
+
// Save the version info in the cache
|
|
148
|
+
versionsMap.set(SemVer, { timestamp: now, data: versionInfo });
|
|
149
|
+
return versionInfo;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
exports.AppVersionCache = AppVersionCache;
|
|
154
|
+
//# sourceMappingURL=app-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-cache.js","sourceRoot":"","sources":["../src/app-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DBManager } from '@pwrdrvr/microapps-datalib';
|
|
2
|
+
/**
|
|
3
|
+
* Determine if we have an appname or a catch all app
|
|
4
|
+
*/
|
|
5
|
+
export declare function GetAppInfo(opts: {
|
|
6
|
+
dbManager: DBManager;
|
|
7
|
+
appName: string;
|
|
8
|
+
}): Promise<string | undefined>;
|
|
9
|
+
//# sourceMappingURL=get-app-info.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-app-info.d.ts","sourceRoot":"","sources":["../src/get-app-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAS,MAAM,4BAA4B,CAAC;AAG9D;;GAEG;AAEH,wBAAsB,UAAU,CAAC,IAAI,EAAE;IACrC,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAoB9B"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GetAppInfo = void 0;
|
|
4
|
+
const app_cache_1 = require("./app-cache");
|
|
5
|
+
/**
|
|
6
|
+
* Determine if we have an appname or a catch all app
|
|
7
|
+
*/
|
|
8
|
+
async function GetAppInfo(opts) {
|
|
9
|
+
const { dbManager, appName } = opts;
|
|
10
|
+
let rules;
|
|
11
|
+
const appVersionCache = app_cache_1.AppVersionCache.GetInstance({ dbManager });
|
|
12
|
+
// Check if we got a matching app name
|
|
13
|
+
rules = await appVersionCache.GetRules({ key: { AppName: appName } });
|
|
14
|
+
if (rules && rules.AppName === appName.toLowerCase()) {
|
|
15
|
+
return appName;
|
|
16
|
+
}
|
|
17
|
+
// Check if we have a `[root]` app that is a catch all
|
|
18
|
+
rules = await appVersionCache.GetRules({ key: { AppName: '[root]' } });
|
|
19
|
+
if (rules && rules.AppName === '[root]') {
|
|
20
|
+
return '[root]';
|
|
21
|
+
}
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
exports.GetAppInfo = GetAppInfo;
|
|
25
|
+
//# sourceMappingURL=get-app-info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-app-info.js","sourceRoot":"","sources":["../src/get-app-info.ts"],"names":[],"mappings":";;;AACA,2CAA8C;AAE9C;;GAEG;AAEI,KAAK,UAAU,UAAU,CAAC,IAGhC;IACC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAEpC,IAAI,KAAwB,CAAC;IAE7B,MAAM,eAAe,GAAG,2BAAe,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAEnE,sCAAsC;IACtC,KAAK,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IACtE,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,WAAW,EAAE,EAAE;QACpD,OAAO,OAAO,CAAC;KAChB;IAED,sDAAsD;IACtD,KAAK,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IACvE,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE;QACvC,OAAO,QAAQ,CAAC;KACjB;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAvBD,gCAuBC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { DBManager } from '@pwrdrvr/microapps-datalib';
|
|
2
|
+
export interface IGetRouteResult {
|
|
3
|
+
/**
|
|
4
|
+
* HTTP status code for immediate response, immediate redirect, and errors
|
|
5
|
+
*/
|
|
6
|
+
readonly statusCode?: number;
|
|
7
|
+
/**
|
|
8
|
+
* Error message for errors
|
|
9
|
+
*/
|
|
10
|
+
readonly errorMessage?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Location to redirect to
|
|
13
|
+
*/
|
|
14
|
+
readonly redirectLocation?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Optional headers for immediate response, immediate redirect, and errors
|
|
17
|
+
*/
|
|
18
|
+
readonly headers?: Record<string, string>;
|
|
19
|
+
/**
|
|
20
|
+
*
|
|
21
|
+
*
|
|
22
|
+
* @example /myapp/1.0.0/index.html
|
|
23
|
+
* @example /myapp/1.0.1
|
|
24
|
+
* @example /myapp/1.0.2/some/path?query=string
|
|
25
|
+
*/
|
|
26
|
+
readonly iFrameAppVersionPath?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Name of the app if resolved
|
|
29
|
+
*/
|
|
30
|
+
readonly appName?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Version of the app if resolved
|
|
33
|
+
*/
|
|
34
|
+
readonly semVer?: string;
|
|
35
|
+
/**
|
|
36
|
+
* Type of the app
|
|
37
|
+
*/
|
|
38
|
+
readonly type?: 'apigwy' | 'lambda-url' | 'url' | 'static';
|
|
39
|
+
/**
|
|
40
|
+
* Startup type of the app (indirect with iframe or direct)
|
|
41
|
+
*/
|
|
42
|
+
readonly startupType?: 'iframe' | 'direct';
|
|
43
|
+
/**
|
|
44
|
+
* URL to the app if resolved
|
|
45
|
+
*/
|
|
46
|
+
readonly url?: string;
|
|
47
|
+
/**
|
|
48
|
+
* Does the extra app path start with /api/
|
|
49
|
+
*/
|
|
50
|
+
readonly isAPIPath?: boolean;
|
|
51
|
+
}
|
|
52
|
+
export interface IGetRouteEvent {
|
|
53
|
+
readonly dbManager: DBManager;
|
|
54
|
+
/**
|
|
55
|
+
* rawPath from the Lambda event
|
|
56
|
+
*/
|
|
57
|
+
readonly rawPath: string;
|
|
58
|
+
/**
|
|
59
|
+
* List of locale prefixes after the normalizedPathPrefix
|
|
60
|
+
*
|
|
61
|
+
* @default []
|
|
62
|
+
*/
|
|
63
|
+
readonly locales?: string[];
|
|
64
|
+
/**
|
|
65
|
+
* Configured prefix of the deployment, must start with a / and not end with a /
|
|
66
|
+
*/
|
|
67
|
+
readonly normalizedPathPrefix?: string;
|
|
68
|
+
/**
|
|
69
|
+
* Query string params, if any
|
|
70
|
+
* Checked for `appver=1.2.3` to override the app version
|
|
71
|
+
*/
|
|
72
|
+
readonly queryStringParameters?: URLSearchParams;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Get information about immediate redirect, immediate response,
|
|
76
|
+
* or which host to route the request to.
|
|
77
|
+
*
|
|
78
|
+
* @param event
|
|
79
|
+
*
|
|
80
|
+
* @returns IGetRouteResult
|
|
81
|
+
*/
|
|
82
|
+
export declare function GetRoute(event: IGetRouteEvent): Promise<IGetRouteResult>;
|
|
83
|
+
//# sourceMappingURL=get-route.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-route.d.ts","sourceRoot":"","sources":["../src/get-route.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAKvD,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAEnC;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE1C;;;;;;OAMG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAEvC;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,YAAY,GAAG,KAAK,GAAG,QAAQ,CAAC;IAE3D;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAE3C;;OAEG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAE9B;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAE5B;;OAEG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAEvC;;;OAGG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,eAAe,CAAC;CAClD;AAED;;;;;;;GAOG;AAEH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAgK9E"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GetRoute = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const log_1 = tslib_1.__importDefault(require("./lib/log"));
|
|
6
|
+
const get_app_info_1 = require("./get-app-info");
|
|
7
|
+
const route_app_1 = require("./route-app");
|
|
8
|
+
const redirect_default_file_1 = require("./redirect-default-file");
|
|
9
|
+
const app_cache_1 = require("./app-cache");
|
|
10
|
+
const log = log_1.default.Instance;
|
|
11
|
+
/**
|
|
12
|
+
* Get information about immediate redirect, immediate response,
|
|
13
|
+
* or which host to route the request to.
|
|
14
|
+
*
|
|
15
|
+
* @param event
|
|
16
|
+
*
|
|
17
|
+
* @returns IGetRouteResult
|
|
18
|
+
*/
|
|
19
|
+
async function GetRoute(event) {
|
|
20
|
+
const { dbManager, normalizedPathPrefix = '', queryStringParameters, locales = [] } = event;
|
|
21
|
+
try {
|
|
22
|
+
const appVersionCache = app_cache_1.AppVersionCache.GetInstance({ dbManager });
|
|
23
|
+
if (!!normalizedPathPrefix && !event.rawPath.startsWith(normalizedPathPrefix)) {
|
|
24
|
+
// The prefix is required if configured, if missing we cannot serve this app
|
|
25
|
+
return { statusCode: 404, errorMessage: 'Request not routable' };
|
|
26
|
+
}
|
|
27
|
+
const pathAfterPrefix = normalizedPathPrefix && event.rawPath.startsWith(normalizedPathPrefix)
|
|
28
|
+
? event.rawPath.slice(normalizedPathPrefix.length - 1)
|
|
29
|
+
: event.rawPath;
|
|
30
|
+
const pathAfterPrefixAndLocale = locales.reduce((path, locale) => {
|
|
31
|
+
if (path.startsWith(`/${locale}/`)) {
|
|
32
|
+
return path.slice(locale.length + 1);
|
|
33
|
+
}
|
|
34
|
+
return path;
|
|
35
|
+
}, pathAfterPrefix);
|
|
36
|
+
// /someapp will split into length 2 with ["", "someapp"] as results
|
|
37
|
+
// /someapp/somepath will split into length 3 with ["", "someapp", "somepath"] as results
|
|
38
|
+
// /someapp/somepath/ will split into length 3 with ["", "someapp", "somepath", ""] as results
|
|
39
|
+
// /someapp/somepath/somefile.foo will split into length 4 with ["", "someapp", "somepath", "somefile.foo", ""] as results
|
|
40
|
+
const partsAfterPrefixAndLocale = pathAfterPrefixAndLocale.split('/');
|
|
41
|
+
// Handle ${prefix}/_next/data/${semver}[/${locale}]/${appname}/route
|
|
42
|
+
let appName;
|
|
43
|
+
if (partsAfterPrefixAndLocale.length >= 4 &&
|
|
44
|
+
partsAfterPrefixAndLocale[1] === '_next' &&
|
|
45
|
+
partsAfterPrefixAndLocale[2] === 'data') {
|
|
46
|
+
// Remove locale if present after SemVer
|
|
47
|
+
const localeIsPresent = partsAfterPrefixAndLocale.length >= 5 &&
|
|
48
|
+
locales.some((locale) => partsAfterPrefixAndLocale[4] === locale);
|
|
49
|
+
const possibleAppNamePart = localeIsPresent
|
|
50
|
+
? partsAfterPrefixAndLocale[5]
|
|
51
|
+
: partsAfterPrefixAndLocale[4];
|
|
52
|
+
// if partsAfterPrefix[4] has .json suffix, strip it
|
|
53
|
+
const possibleAppName = possibleAppNamePart.endsWith('.json')
|
|
54
|
+
? possibleAppNamePart.slice(0, possibleAppNamePart.length - 5)
|
|
55
|
+
: possibleAppNamePart;
|
|
56
|
+
appName = await (0, get_app_info_1.GetAppInfo)({
|
|
57
|
+
dbManager,
|
|
58
|
+
appName: possibleAppName,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
if (!appName) {
|
|
62
|
+
appName = await (0, get_app_info_1.GetAppInfo)({
|
|
63
|
+
dbManager,
|
|
64
|
+
appName: partsAfterPrefixAndLocale.length >= 2 ? partsAfterPrefixAndLocale[1] : '[root]',
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
if (!appName) {
|
|
68
|
+
return { statusCode: 404, errorMessage: 'App not found' };
|
|
69
|
+
}
|
|
70
|
+
const isRootApp = appName === '[root]';
|
|
71
|
+
const appNameOrRootTrailingSlash = isRootApp ? '' : `${appName}/`;
|
|
72
|
+
// Strip the appName from the start of the path, if there was one
|
|
73
|
+
const pathAfterAppName = isRootApp
|
|
74
|
+
? pathAfterPrefixAndLocale
|
|
75
|
+
: pathAfterPrefixAndLocale.slice(appName.length + 1);
|
|
76
|
+
const partsAfterAppName = pathAfterAppName.split('/');
|
|
77
|
+
// Pass any parts after the appName/Version to the route handler
|
|
78
|
+
let additionalParts = '';
|
|
79
|
+
if (partsAfterAppName.length >= 2 && partsAfterAppName[1] !== '') {
|
|
80
|
+
additionalParts = partsAfterAppName.slice(1).join('/');
|
|
81
|
+
}
|
|
82
|
+
// Route an app and version (only) to include the defaultFile
|
|
83
|
+
// If the second part is not a version that exists, fall through to
|
|
84
|
+
// routing the app and glomming the rest of the path on to the end
|
|
85
|
+
if (partsAfterAppName.length === 2 ||
|
|
86
|
+
(partsAfterAppName.length === 3 && !partsAfterAppName[2])) {
|
|
87
|
+
// / semVer /
|
|
88
|
+
// ^ ^^^^^^ ^
|
|
89
|
+
// 0 1 2
|
|
90
|
+
// This may be an app and a version only
|
|
91
|
+
// If the request got here it's likely a static app that has no
|
|
92
|
+
// Lambda function
|
|
93
|
+
// Let's check if the part is a version, if it is, route to the default file
|
|
94
|
+
const versionInfo = await appVersionCache.GetVersionInfo({
|
|
95
|
+
key: { AppName: appName, SemVer: partsAfterAppName[1] },
|
|
96
|
+
});
|
|
97
|
+
if (versionInfo) {
|
|
98
|
+
const response = await (0, redirect_default_file_1.RedirectToDefaultFile)({
|
|
99
|
+
dbManager,
|
|
100
|
+
appName,
|
|
101
|
+
normalizedPathPrefix,
|
|
102
|
+
semVer: partsAfterAppName[1],
|
|
103
|
+
appNameOrRootTrailingSlash,
|
|
104
|
+
});
|
|
105
|
+
if (response) {
|
|
106
|
+
return response;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Check for a version in the path
|
|
111
|
+
// Examples
|
|
112
|
+
// / semVer / somepath
|
|
113
|
+
// / _next / data / semVer / somepath
|
|
114
|
+
// Get the version afer `/_next/data/` from partsAfterPrefix
|
|
115
|
+
const possibleSemVerPathNextDataBasePath = partsAfterAppName.length >= 4 ? partsAfterAppName[3] : '';
|
|
116
|
+
const possibleSemVerPathNextData = partsAfterPrefixAndLocale.length >= 4 &&
|
|
117
|
+
partsAfterPrefixAndLocale[1] === '_next' &&
|
|
118
|
+
partsAfterPrefixAndLocale[2] == 'data'
|
|
119
|
+
? partsAfterPrefixAndLocale[3]
|
|
120
|
+
: possibleSemVerPathNextDataBasePath;
|
|
121
|
+
const possibleSemVerPathAfterApp = partsAfterAppName.length >= 2 ? partsAfterAppName[1] : '';
|
|
122
|
+
// (/ something)?
|
|
123
|
+
// ^ ^^^^^^^^^^^^
|
|
124
|
+
// 0 1
|
|
125
|
+
// Got at least an application name, try to route it
|
|
126
|
+
const response = await (0, route_app_1.RouteApp)({
|
|
127
|
+
dbManager,
|
|
128
|
+
normalizedPathPrefix,
|
|
129
|
+
event,
|
|
130
|
+
appName,
|
|
131
|
+
possibleSemVerPathNextData,
|
|
132
|
+
possibleSemVerPathAfterApp,
|
|
133
|
+
possibleSemVerQuery: (queryStringParameters === null || queryStringParameters === void 0 ? void 0 : queryStringParameters.get('appver')) || '',
|
|
134
|
+
additionalParts,
|
|
135
|
+
appNameOrRootTrailingSlash,
|
|
136
|
+
});
|
|
137
|
+
if (response) {
|
|
138
|
+
return response;
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
statusCode: 599,
|
|
142
|
+
errorMessage: `Router - Could not route: ${event.rawPath}, no matching route`,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
log.error('unexpected exception - returning 599', { statusCode: 599, error });
|
|
147
|
+
return {
|
|
148
|
+
statusCode: 599,
|
|
149
|
+
errorMessage: `Router - Could not route: ${event.rawPath}, ${error.message}`,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
exports.GetRoute = GetRoute;
|
|
154
|
+
//# sourceMappingURL=get-route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-route.js","sourceRoot":"","sources":["../src/get-route.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { loadAppFrame } from './load-app-frame';
|
|
2
|
+
export { GetAppInfo } from './get-app-info';
|
|
3
|
+
export { normalizePathPrefix } from './normalize-path-prefix';
|
|
4
|
+
export { GetRoute, IGetRouteEvent, IGetRouteResult } from './get-route';
|
|
5
|
+
export { RedirectToDefaultFile } from './redirect-default-file';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RedirectToDefaultFile = exports.GetRoute = exports.normalizePathPrefix = exports.GetAppInfo = exports.loadAppFrame = void 0;
|
|
4
|
+
var load_app_frame_1 = require("./load-app-frame");
|
|
5
|
+
Object.defineProperty(exports, "loadAppFrame", { enumerable: true, get: function () { return load_app_frame_1.loadAppFrame; } });
|
|
6
|
+
var get_app_info_1 = require("./get-app-info");
|
|
7
|
+
Object.defineProperty(exports, "GetAppInfo", { enumerable: true, get: function () { return get_app_info_1.GetAppInfo; } });
|
|
8
|
+
var normalize_path_prefix_1 = require("./normalize-path-prefix");
|
|
9
|
+
Object.defineProperty(exports, "normalizePathPrefix", { enumerable: true, get: function () { return normalize_path_prefix_1.normalizePathPrefix; } });
|
|
10
|
+
var get_route_1 = require("./get-route");
|
|
11
|
+
Object.defineProperty(exports, "GetRoute", { enumerable: true, get: function () { return get_route_1.GetRoute; } });
|
|
12
|
+
var redirect_default_file_1 = require("./redirect-default-file");
|
|
13
|
+
Object.defineProperty(exports, "RedirectToDefaultFile", { enumerable: true, get: function () { return redirect_default_file_1.RedirectToDefaultFile; } });
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mDAAgD;AAAvC,8GAAA,YAAY,OAAA;AACrB,+CAA4C;AAAnC,0GAAA,UAAU,OAAA;AACnB,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAC5B,yCAAwE;AAA/D,qGAAA,QAAQ,OAAA;AACjB,iEAAgE;AAAvD,8HAAA,qBAAqB,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/lib/log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,CAAC,OAAO,OAAO,GAAG;IACtB,OAAc,QAAQ,YAGnB;CACJ"}
|
package/dist/lib/log.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const lambda_log_1 = require("lambda-log");
|
|
4
|
+
class Log {
|
|
5
|
+
}
|
|
6
|
+
exports.default = Log;
|
|
7
|
+
Log.Instance = new lambda_log_1.LambdaLog({
|
|
8
|
+
silent: process.env.JEST_WORKER_ID !== undefined,
|
|
9
|
+
// debug: process.env.DEBUG ? true : false,
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/lib/log.ts"],"names":[],"mappings":";;AAAA,2CAAuC;AAEvC,MAAqB,GAAG;;AAAxB,sBAKC;AAJe,YAAQ,GAAG,IAAI,sBAAS,CAAC;IACrC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,SAAS;IAChD,2CAA2C;CAC5C,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-app-frame.d.ts","sourceRoot":"","sources":["../src/load-app-frame.ts"],"names":[],"mappings":"AAMA;;;GAGG;AAEH,wBAAgB,YAAY,CAAC,EAAE,QAAc,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAwB9E"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadAppFrame = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const path_1 = tslib_1.__importDefault(require("path"));
|
|
6
|
+
const fs_extra_1 = require("fs-extra");
|
|
7
|
+
const log_1 = tslib_1.__importDefault(require("./lib/log"));
|
|
8
|
+
const log = log_1.default.Instance;
|
|
9
|
+
/**
|
|
10
|
+
* Find and load the appFrame file
|
|
11
|
+
* @returns
|
|
12
|
+
*/
|
|
13
|
+
function loadAppFrame({ basePath = '.' }) {
|
|
14
|
+
const paths = [
|
|
15
|
+
basePath,
|
|
16
|
+
path_1.default.join(basePath, '..'),
|
|
17
|
+
path_1.default.join(basePath, 'templates'),
|
|
18
|
+
basePath,
|
|
19
|
+
'/opt',
|
|
20
|
+
'/opt/templates',
|
|
21
|
+
];
|
|
22
|
+
for (const pathRoot of paths) {
|
|
23
|
+
const fullPath = path_1.default.join(pathRoot, 'appFrame.html');
|
|
24
|
+
try {
|
|
25
|
+
if ((0, fs_extra_1.pathExistsSync)(fullPath)) {
|
|
26
|
+
log.info('found html file', { fullPath });
|
|
27
|
+
return (0, fs_extra_1.readFileSync)(fullPath, 'utf-8');
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
catch (_a) {
|
|
31
|
+
// Don't care - we get here if stat throws because the file does not exist
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
log.error('appFrame.html not found');
|
|
35
|
+
throw new Error('appFrame.html not found');
|
|
36
|
+
}
|
|
37
|
+
exports.loadAppFrame = loadAppFrame;
|
|
38
|
+
//# sourceMappingURL=load-app-frame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-app-frame.js","sourceRoot":"","sources":["../src/load-app-frame.ts"],"names":[],"mappings":";;;;AAAA,wDAAwB;AACxB,uCAAwD;AACxD,4DAA4B;AAE5B,MAAM,GAAG,GAAG,aAAG,CAAC,QAAQ,CAAC;AAEzB;;;GAGG;AAEH,SAAgB,YAAY,CAAC,EAAE,QAAQ,GAAG,GAAG,EAAyB;IACpE,MAAM,KAAK,GAAG;QACZ,QAAQ;QACR,cAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;QACzB,cAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC;QAChC,QAAQ;QACR,MAAM;QACN,gBAAgB;KACjB,CAAC;IAEF,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE;QAC5B,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QACtD,IAAI;YACF,IAAI,IAAA,yBAAc,EAAC,QAAQ,CAAC,EAAE;gBAC5B,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC1C,OAAO,IAAA,uBAAY,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;aACxC;SACF;QAAC,WAAM;YACN,0EAA0E;SAC3E;KACF;IAED,GAAG,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACrC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;AAC7C,CAAC;AAxBD,oCAwBC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize-path-prefix.d.ts","sourceRoot":"","sources":["../src/normalize-path-prefix.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAU9D"}
|