@xylabs/express 4.3.14
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/LICENSE +165 -0
- package/README.md +62 -0
- package/dist/node/AWS/getEnvFromAws.d.ts +2 -0
- package/dist/node/AWS/getEnvFromAws.d.ts.map +1 -0
- package/dist/node/AWS/index.d.ts +2 -0
- package/dist/node/AWS/index.d.ts.map +1 -0
- package/dist/node/Handler/StatusCodeHandlers/index.d.ts +2 -0
- package/dist/node/Handler/StatusCodeHandlers/index.d.ts.map +1 -0
- package/dist/node/Handler/StatusCodeHandlers/notImplemented.d.ts +3 -0
- package/dist/node/Handler/StatusCodeHandlers/notImplemented.d.ts.map +1 -0
- package/dist/node/Handler/asyncHandler.d.ts +11 -0
- package/dist/node/Handler/asyncHandler.d.ts.map +1 -0
- package/dist/node/Handler/errorToJsonHandler.d.ts +4 -0
- package/dist/node/Handler/errorToJsonHandler.d.ts.map +1 -0
- package/dist/node/Handler/index.d.ts +4 -0
- package/dist/node/Handler/index.d.ts.map +1 -0
- package/dist/node/HttpUtil/getHttpHeader.d.ts +12 -0
- package/dist/node/HttpUtil/getHttpHeader.d.ts.map +1 -0
- package/dist/node/HttpUtil/index.d.ts +2 -0
- package/dist/node/HttpUtil/index.d.ts.map +1 -0
- package/dist/node/Logger/LogFormats/LocalDev/index.d.ts +2 -0
- package/dist/node/Logger/LogFormats/LocalDev/index.d.ts.map +1 -0
- package/dist/node/Logger/LogFormats/LocalDev/logFormatLocalDev.d.ts +2 -0
- package/dist/node/Logger/LogFormats/LocalDev/logFormatLocalDev.d.ts.map +1 -0
- package/dist/node/Logger/LogFormats/Rollbar/index.d.ts +2 -0
- package/dist/node/Logger/LogFormats/Rollbar/index.d.ts.map +1 -0
- package/dist/node/Logger/LogFormats/Rollbar/logFormatRollbar.d.ts +2 -0
- package/dist/node/Logger/LogFormats/Rollbar/logFormatRollbar.d.ts.map +1 -0
- package/dist/node/Logger/LogFormats/Structured/index.d.ts +2 -0
- package/dist/node/Logger/LogFormats/Structured/index.d.ts.map +1 -0
- package/dist/node/Logger/LogFormats/Structured/logFormatStructured.d.ts +2 -0
- package/dist/node/Logger/LogFormats/Structured/logFormatStructured.d.ts.map +1 -0
- package/dist/node/Logger/LogFormats/index.d.ts +4 -0
- package/dist/node/Logger/LogFormats/index.d.ts.map +1 -0
- package/dist/node/Logger/Logger.d.ts +13 -0
- package/dist/node/Logger/Logger.d.ts.map +1 -0
- package/dist/node/Logger/LoggerMeta.d.ts +2 -0
- package/dist/node/Logger/LoggerMeta.d.ts.map +1 -0
- package/dist/node/Logger/LoggerOptions.d.ts +7 -0
- package/dist/node/Logger/LoggerOptions.d.ts.map +1 -0
- package/dist/node/Logger/LoggerVerbosity.d.ts +2 -0
- package/dist/node/Logger/LoggerVerbosity.d.ts.map +1 -0
- package/dist/node/Logger/Transports/Rollbar/RollbarTransport.d.ts +11 -0
- package/dist/node/Logger/Transports/Rollbar/RollbarTransport.d.ts.map +1 -0
- package/dist/node/Logger/Transports/Rollbar/canGetDefaultRollbarTransport.d.ts +4 -0
- package/dist/node/Logger/Transports/Rollbar/canGetDefaultRollbarTransport.d.ts.map +1 -0
- package/dist/node/Logger/Transports/Rollbar/getDefaultRollbarTransport.d.ts +5 -0
- package/dist/node/Logger/Transports/Rollbar/getDefaultRollbarTransport.d.ts.map +1 -0
- package/dist/node/Logger/Transports/Rollbar/index.d.ts +4 -0
- package/dist/node/Logger/Transports/Rollbar/index.d.ts.map +1 -0
- package/dist/node/Logger/Transports/index.d.ts +2 -0
- package/dist/node/Logger/Transports/index.d.ts.map +1 -0
- package/dist/node/Logger/WinstonVerbosity.d.ts +6 -0
- package/dist/node/Logger/WinstonVerbosity.d.ts.map +1 -0
- package/dist/node/Logger/WrappedWinstonLogger.d.ts +16 -0
- package/dist/node/Logger/WrappedWinstonLogger.d.ts.map +1 -0
- package/dist/node/Logger/getDefaultLogger.d.ts +3 -0
- package/dist/node/Logger/getDefaultLogger.d.ts.map +1 -0
- package/dist/node/Logger/getLogger.d.ts +4 -0
- package/dist/node/Logger/getLogger.d.ts.map +1 -0
- package/dist/node/Logger/index.d.ts +7 -0
- package/dist/node/Logger/index.d.ts.map +1 -0
- package/dist/node/Logger/toWinstonVerbosity.d.ts +4 -0
- package/dist/node/Logger/toWinstonVerbosity.d.ts.map +1 -0
- package/dist/node/Model/ExpressError.d.ts +4 -0
- package/dist/node/Model/ExpressError.d.ts.map +1 -0
- package/dist/node/Model/index.d.ts +2 -0
- package/dist/node/Model/index.d.ts.map +1 -0
- package/dist/node/Performance/Counters.d.ts +8 -0
- package/dist/node/Performance/Counters.d.ts.map +1 -0
- package/dist/node/Performance/Profiler.d.ts +5 -0
- package/dist/node/Performance/Profiler.d.ts.map +1 -0
- package/dist/node/Performance/index.d.ts +3 -0
- package/dist/node/Performance/index.d.ts.map +1 -0
- package/dist/node/Util/compactObject.d.ts +2 -0
- package/dist/node/Util/compactObject.d.ts.map +1 -0
- package/dist/node/Util/index.d.ts +3 -0
- package/dist/node/Util/index.d.ts.map +1 -0
- package/dist/node/Util/tryParse.d.ts +5 -0
- package/dist/node/Util/tryParse.d.ts.map +1 -0
- package/dist/node/index.d.ts +9 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.mjs +408 -0
- package/dist/node/index.mjs.map +1 -0
- package/dist/node/middleware/caseInsensitiveRouting/caseInsensitiveRouting.d.ts +14 -0
- package/dist/node/middleware/caseInsensitiveRouting/caseInsensitiveRouting.d.ts.map +1 -0
- package/dist/node/middleware/caseInsensitiveRouting/index.d.ts +2 -0
- package/dist/node/middleware/caseInsensitiveRouting/index.d.ts.map +1 -0
- package/dist/node/middleware/customPoweredByHeader/customPoweredByHeader.d.ts +15 -0
- package/dist/node/middleware/customPoweredByHeader/customPoweredByHeader.d.ts.map +1 -0
- package/dist/node/middleware/customPoweredByHeader/index.d.ts +2 -0
- package/dist/node/middleware/customPoweredByHeader/index.d.ts.map +1 -0
- package/dist/node/middleware/index.d.ts +6 -0
- package/dist/node/middleware/index.d.ts.map +1 -0
- package/dist/node/middleware/jsonBodyParser/index.d.ts +2 -0
- package/dist/node/middleware/jsonBodyParser/index.d.ts.map +1 -0
- package/dist/node/middleware/jsonBodyParser/jsonBodyParser.d.ts +33 -0
- package/dist/node/middleware/jsonBodyParser/jsonBodyParser.d.ts.map +1 -0
- package/dist/node/middleware/metrics/counters.d.ts +3 -0
- package/dist/node/middleware/metrics/counters.d.ts.map +1 -0
- package/dist/node/middleware/metrics/index.d.ts +3 -0
- package/dist/node/middleware/metrics/index.d.ts.map +1 -0
- package/dist/node/middleware/metrics/responseProfiler.d.ts +15 -0
- package/dist/node/middleware/metrics/responseProfiler.d.ts.map +1 -0
- package/dist/node/middleware/standardResponses/getResponseMetadata.d.ts +3 -0
- package/dist/node/middleware/standardResponses/getResponseMetadata.d.ts.map +1 -0
- package/dist/node/middleware/standardResponses/index.d.ts +5 -0
- package/dist/node/middleware/standardResponses/index.d.ts.map +1 -0
- package/dist/node/middleware/standardResponses/jsonApi/error.d.ts +51 -0
- package/dist/node/middleware/standardResponses/jsonApi/error.d.ts.map +1 -0
- package/dist/node/middleware/standardResponses/jsonApi/index.d.ts +6 -0
- package/dist/node/middleware/standardResponses/jsonApi/index.d.ts.map +1 -0
- package/dist/node/middleware/standardResponses/jsonApi/links.d.ts +7 -0
- package/dist/node/middleware/standardResponses/jsonApi/links.d.ts.map +1 -0
- package/dist/node/middleware/standardResponses/jsonApi/relationship.d.ts +38 -0
- package/dist/node/middleware/standardResponses/jsonApi/relationship.d.ts.map +1 -0
- package/dist/node/middleware/standardResponses/jsonApi/resourceIdentifier.d.ts +16 -0
- package/dist/node/middleware/standardResponses/jsonApi/resourceIdentifier.d.ts.map +1 -0
- package/dist/node/middleware/standardResponses/jsonApi/response.d.ts +44 -0
- package/dist/node/middleware/standardResponses/jsonApi/response.d.ts.map +1 -0
- package/dist/node/middleware/standardResponses/standardErrors.d.ts +4 -0
- package/dist/node/middleware/standardResponses/standardErrors.d.ts.map +1 -0
- package/dist/node/middleware/standardResponses/standardResponses.d.ts +18 -0
- package/dist/node/middleware/standardResponses/standardResponses.d.ts.map +1 -0
- package/package.json +101 -0
- package/src/AWS/getEnvFromAws.ts +24 -0
- package/src/AWS/index.ts +1 -0
- package/src/AWS/spec/getEnvFromAws.spec.ts +16 -0
- package/src/Handler/StatusCodeHandlers/index.ts +1 -0
- package/src/Handler/StatusCodeHandlers/notImplemented.ts +6 -0
- package/src/Handler/asyncHandler.ts +21 -0
- package/src/Handler/errorToJsonHandler.ts +14 -0
- package/src/Handler/index.ts +3 -0
- package/src/HttpUtil/getHttpHeader.ts +26 -0
- package/src/HttpUtil/index.ts +1 -0
- package/src/Logger/LogFormats/LocalDev/index.ts +1 -0
- package/src/Logger/LogFormats/LocalDev/logFormatLocalDev.ts +11 -0
- package/src/Logger/LogFormats/LocalDev/spec/logFormatLocalDev.spec.ts +13 -0
- package/src/Logger/LogFormats/Rollbar/index.ts +1 -0
- package/src/Logger/LogFormats/Rollbar/logFormatRollbar.ts +5 -0
- package/src/Logger/LogFormats/Rollbar/spec/logFormatRollbar.spec.ts +13 -0
- package/src/Logger/LogFormats/Structured/index.ts +1 -0
- package/src/Logger/LogFormats/Structured/logFormatStructured.ts +7 -0
- package/src/Logger/LogFormats/Structured/spec/logFormatStructured.spec.ts +13 -0
- package/src/Logger/LogFormats/index.ts +3 -0
- package/src/Logger/Logger.ts +15 -0
- package/src/Logger/LoggerMeta.ts +1 -0
- package/src/Logger/LoggerOptions.ts +7 -0
- package/src/Logger/LoggerVerbosity.ts +1 -0
- package/src/Logger/Transports/Rollbar/RollbarTransport.ts +22 -0
- package/src/Logger/Transports/Rollbar/canGetDefaultRollbarTransport.ts +3 -0
- package/src/Logger/Transports/Rollbar/getDefaultRollbarTransport.ts +10 -0
- package/src/Logger/Transports/Rollbar/index.ts +3 -0
- package/src/Logger/Transports/Rollbar/spec/RollbarTransport.spec.ts +30 -0
- package/src/Logger/Transports/Rollbar/spec/canGetDefaultRollbarTransport.spec.ts +18 -0
- package/src/Logger/Transports/Rollbar/spec/getDefaultRollbarTransport.spec.ts +16 -0
- package/src/Logger/Transports/index.ts +1 -0
- package/src/Logger/WinstonVerbosity.ts +5 -0
- package/src/Logger/WrappedWinstonLogger.ts +16 -0
- package/src/Logger/getDefaultLogger.ts +13 -0
- package/src/Logger/getLogger.ts +55 -0
- package/src/Logger/index.ts +6 -0
- package/src/Logger/spec/getDefaultLogger.spec.ts +14 -0
- package/src/Logger/spec/getLogger.spec.ts +25 -0
- package/src/Logger/spec/toWinstonVerbosity.spec.ts +17 -0
- package/src/Logger/toWinstonVerbosity.ts +6 -0
- package/src/Model/ExpressError.ts +3 -0
- package/src/Model/index.ts +1 -0
- package/src/Performance/Counters.ts +36 -0
- package/src/Performance/Profiler.ts +10 -0
- package/src/Performance/index.ts +2 -0
- package/src/Util/compactObject.ts +9 -0
- package/src/Util/index.ts +2 -0
- package/src/Util/tryParse.ts +21 -0
- package/src/index.ts +8 -0
- package/src/middleware/caseInsensitiveRouting/caseInsensitiveRouting.ts +21 -0
- package/src/middleware/caseInsensitiveRouting/index.ts +1 -0
- package/src/middleware/customPoweredByHeader/customPoweredByHeader.ts +29 -0
- package/src/middleware/customPoweredByHeader/index.ts +1 -0
- package/src/middleware/index.ts +5 -0
- package/src/middleware/jsonBodyParser/index.ts +1 -0
- package/src/middleware/jsonBodyParser/jsonBodyParser.ts +57 -0
- package/src/middleware/jsonBodyParser/spec/jsonBodyParser.spec.ts +26 -0
- package/src/middleware/metrics/counters.ts +25 -0
- package/src/middleware/metrics/index.ts +2 -0
- package/src/middleware/metrics/responseProfiler.ts +23 -0
- package/src/middleware/standardResponses/getResponseMetadata.ts +18 -0
- package/src/middleware/standardResponses/index.ts +4 -0
- package/src/middleware/standardResponses/jsonApi/README.md +4 -0
- package/src/middleware/standardResponses/jsonApi/error.ts +52 -0
- package/src/middleware/standardResponses/jsonApi/index.ts +5 -0
- package/src/middleware/standardResponses/jsonApi/links.ts +6 -0
- package/src/middleware/standardResponses/jsonApi/relationship.ts +43 -0
- package/src/middleware/standardResponses/jsonApi/resourceIdentifier.ts +15 -0
- package/src/middleware/standardResponses/jsonApi/response.ts +49 -0
- package/src/middleware/standardResponses/standardErrors.ts +25 -0
- package/src/middleware/standardResponses/standardResponses.ts +23 -0
- package/xy.config.ts +10 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responseProfiler.d.ts","sourceRoot":"","sources":["../../../../src/middleware/metrics/responseProfiler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EAAE,OAAO,EAAE,QAAQ,EAChC,MAAM,SAAS,CAAA;AAEhB;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gBAAgB,SAAU,OAAO,OAAO,QAAQ,QAAQ,YAAY,SAMhF,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getResponseMetadata.d.ts","sourceRoot":"","sources":["../../../../src/middleware/standardResponses/getResponseMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC,eAAO,MAAM,mBAAmB,QAAS,QAAQ,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAezE,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/middleware/standardResponses/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,wBAAwB,CAAA"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { ApiLinks } from './links.ts';
|
|
2
|
+
/**
|
|
3
|
+
* An object containing references to the source of the error
|
|
4
|
+
*/
|
|
5
|
+
export interface Source {
|
|
6
|
+
/**
|
|
7
|
+
* A string indicating which URI query parameter caused the error.
|
|
8
|
+
*/
|
|
9
|
+
parameter?: string;
|
|
10
|
+
/**
|
|
11
|
+
* A JSON Pointer [RFC6901] to the associated entity in the request document [e.g. "/data" for a primary data object,
|
|
12
|
+
* or "/data/attributes/title" for a specific attribute].
|
|
13
|
+
*/
|
|
14
|
+
pointer?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface ApiError {
|
|
17
|
+
/**
|
|
18
|
+
* An application-specific error code, expressed as a string value.
|
|
19
|
+
*/
|
|
20
|
+
code?: string;
|
|
21
|
+
/**
|
|
22
|
+
* A human-readable explanation specific to this occurrence of the problem. Like title, this field's value can be localized.
|
|
23
|
+
*/
|
|
24
|
+
detail?: string;
|
|
25
|
+
/**
|
|
26
|
+
* A unique identifier for this particular occurrence of the problem.
|
|
27
|
+
*/
|
|
28
|
+
id?: string;
|
|
29
|
+
/**
|
|
30
|
+
* A links object containing the following members:
|
|
31
|
+
* about: a link that leads to further details about this particular occurrence of the problem
|
|
32
|
+
*/
|
|
33
|
+
links?: ApiLinks;
|
|
34
|
+
/**
|
|
35
|
+
* A meta object containing non-standard meta-information about the error.
|
|
36
|
+
*/
|
|
37
|
+
meta?: Record<string, unknown>;
|
|
38
|
+
/**
|
|
39
|
+
* An object containing references to the source of the error, optionally including any of the following members:
|
|
40
|
+
*/
|
|
41
|
+
source?: Source;
|
|
42
|
+
/**
|
|
43
|
+
* The HTTP status code applicable to this problem, expressed as a string value.
|
|
44
|
+
*/
|
|
45
|
+
status?: string;
|
|
46
|
+
/**
|
|
47
|
+
* A short, human-readable summary of the problem that SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization.
|
|
48
|
+
*/
|
|
49
|
+
title?: string;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/standardResponses/jsonApi/error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE1C;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;OAEG;IACH,EAAE,CAAC,EAAE,MAAM,CAAA;IACX;;;OAGG;IACH,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/standardResponses/jsonApi/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA;AACvC,cAAc,eAAe,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/standardResponses/jsonApi/links.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC9B;AACD,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,YAAY,CAAA;AAC3C,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { ApiResourceIdentifierObject } from './resourceIdentifier.ts';
|
|
2
|
+
export interface IRelationshipSelfLink {
|
|
3
|
+
/**
|
|
4
|
+
* A link for the relationship itself (a "relationship link"). This link allows the client to directly manipulate the relationship.
|
|
5
|
+
* For example, removing an author through an article’s relationship URL would disconnect the person from the article without
|
|
6
|
+
* deleting the people resource itself. When fetched successfully, this link returns the linkage for the related resources as its primary data.
|
|
7
|
+
*/
|
|
8
|
+
self: string;
|
|
9
|
+
}
|
|
10
|
+
export interface IRelationshipRelatedLink {
|
|
11
|
+
/**
|
|
12
|
+
* A related resource link
|
|
13
|
+
*/
|
|
14
|
+
related: string;
|
|
15
|
+
}
|
|
16
|
+
export interface IRelationshipLinks {
|
|
17
|
+
links: IRelationshipRelatedLink | IRelationshipSelfLink;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Resource linkage in a compound document allows a client to link together all of the included resource objects without having to GET any URLs via links.
|
|
21
|
+
* Resource linkage MUST be represented as one of the following:
|
|
22
|
+
* • null for empty to-one relationships.
|
|
23
|
+
* • an empty array ([]) for empty to-many relationships.
|
|
24
|
+
* • a single resource identifier object for non-empty to-one relationships.
|
|
25
|
+
* • an array of resource identifier objects for non-empty to-many relationships.
|
|
26
|
+
*/
|
|
27
|
+
export type ResourceLinkage = null | [] | ApiResourceIdentifierObject | ApiResourceIdentifierObject[];
|
|
28
|
+
export interface IRelationshipData {
|
|
29
|
+
data: ResourceLinkage;
|
|
30
|
+
}
|
|
31
|
+
export type RelationshipMeta = Record<string, unknown>;
|
|
32
|
+
/**
|
|
33
|
+
* The value of the relationships key MUST be an object (a "relationships object"). Members of the relationships object ("relationships")
|
|
34
|
+
* represent references from the resource object in which it’s defined to other resource objects.
|
|
35
|
+
* Relationships may be to-one or to-many.
|
|
36
|
+
*/
|
|
37
|
+
export type Relationship = IRelationshipLinks | IRelationshipData | RelationshipMeta;
|
|
38
|
+
//# sourceMappingURL=relationship.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relationship.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/standardResponses/jsonApi/relationship.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAA;AAE1E,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,wBAAwB,GAAG,qBAAqB,CAAA;CACxD;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,EAAE,GAAG,2BAA2B,GAAG,2BAA2B,EAAE,CAAA;AACrG,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,eAAe,CAAA;CACtB;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAEtD;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Within a given API, each resource object's type and id pair MUST identify a single, unique resource.
|
|
3
|
+
* (The set of URIs controlled by a server, or multiple servers acting as one, constitute an API.)
|
|
4
|
+
*/
|
|
5
|
+
export interface ApiResourceIdentifierObject {
|
|
6
|
+
/**
|
|
7
|
+
* The id member is not required when the resource object originates at the client and represents a new resource to be created on the server.
|
|
8
|
+
*/
|
|
9
|
+
id: string;
|
|
10
|
+
/**
|
|
11
|
+
* The type member is used to describe resource objects that share common attributes and relationships.
|
|
12
|
+
* The values of type members MUST adhere to the same constraints as member names.
|
|
13
|
+
*/
|
|
14
|
+
type: string;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=resourceIdentifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resourceIdentifier.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/standardResponses/jsonApi/resourceIdentifier.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,EAAE,EAAE,MAAM,CAAA;IACV;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAA;CACb"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loosely following the JSON API 1.0 formats and conventions
|
|
3
|
+
* https://jsonapi.org/format/
|
|
4
|
+
*/
|
|
5
|
+
import type { ApiError } from './error.ts';
|
|
6
|
+
import type { ApiLinks } from './links.ts';
|
|
7
|
+
import type { Relationship } from './relationship.ts';
|
|
8
|
+
import type { ApiResourceIdentifierObject } from './resourceIdentifier.ts';
|
|
9
|
+
export interface ApiResourceObject extends ApiResourceIdentifierObject {
|
|
10
|
+
/**
|
|
11
|
+
* An attributes object representing some of the resource's data.
|
|
12
|
+
*/
|
|
13
|
+
attributes?: Record<string, unknown>;
|
|
14
|
+
/**
|
|
15
|
+
* A links object containing links related to the resource.
|
|
16
|
+
*/
|
|
17
|
+
links?: ApiLinks;
|
|
18
|
+
/**
|
|
19
|
+
* A meta object containing non-standard meta-information about a resource that can not be represented as an attribute or relationship.
|
|
20
|
+
*/
|
|
21
|
+
meta?: Record<string, unknown>;
|
|
22
|
+
/**
|
|
23
|
+
* A relationships object describing relationships between the resource and other JSON:API resources.
|
|
24
|
+
*/
|
|
25
|
+
relationships?: Record<string, Relationship>;
|
|
26
|
+
}
|
|
27
|
+
export interface JsonApi {
|
|
28
|
+
meta?: Record<string, unknown>;
|
|
29
|
+
version?: '1.0' | '1.1';
|
|
30
|
+
}
|
|
31
|
+
export interface ApiResponseBase {
|
|
32
|
+
jsonapi?: JsonApi;
|
|
33
|
+
links?: ApiLinks;
|
|
34
|
+
meta?: Record<string, unknown>;
|
|
35
|
+
}
|
|
36
|
+
export interface ApiDataResponse<T extends ApiResourceIdentifierObject> extends ApiResponseBase {
|
|
37
|
+
data: T;
|
|
38
|
+
included?: ApiResourceObject[];
|
|
39
|
+
}
|
|
40
|
+
export interface ApiErrorResponse extends ApiResponseBase {
|
|
41
|
+
errors: ApiError[];
|
|
42
|
+
}
|
|
43
|
+
export type ApiResponse<T extends ApiResourceIdentifierObject> = ApiDataResponse<T> | ApiErrorResponse;
|
|
44
|
+
//# sourceMappingURL=response.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../../../../src/middleware/standardResponses/jsonApi/response.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAA;AAE1E,MAAM,WAAW,iBAAkB,SAAQ,2BAA2B;IACpE;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC;;OAEG;IACH,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;CAC7C;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,OAAO,CAAC,EAAE,KAAK,GAAG,KAAK,CAAA;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,2BAA2B,CAAE,SAAQ,eAAe;IAC7F,IAAI,EAAE,CAAC,CAAA;IACP,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAA;CAC/B;AACD,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACvD,MAAM,EAAE,QAAQ,EAAE,CAAA;CACnB;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,2BAA2B,IAAI,eAAe,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { NextFunction, Request, Response } from 'express';
|
|
2
|
+
import type { ExpressError } from '../../Model/index.ts';
|
|
3
|
+
export declare const standardErrors: (err: ExpressError, req: Request, res: Response, next: NextFunction) => void;
|
|
4
|
+
//# sourceMappingURL=standardErrors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standardErrors.d.ts","sourceRoot":"","sources":["../../../../src/middleware/standardResponses/standardErrors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EAAE,OAAO,EAAE,QAAQ,EAChC,MAAM,SAAS,CAAA;AAEhB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGxD,eAAO,MAAM,cAAc,QAAS,YAAY,OAAO,OAAO,OAAO,QAAQ,QAAQ,YAAY,SAiBhG,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Request, Response } from 'express';
|
|
2
|
+
/**
|
|
3
|
+
* Transforms each response to conform to the standard response format (compatible with JSON API)
|
|
4
|
+
* @param body The original request body
|
|
5
|
+
* @param _req The request
|
|
6
|
+
* @param res The response
|
|
7
|
+
* @returns The transformed response body
|
|
8
|
+
*/
|
|
9
|
+
export declare const transformResponse: (body: unknown, _req: Request, res: Response) => {
|
|
10
|
+
data: unknown;
|
|
11
|
+
meta: Record<string, unknown>;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Connect middleware to enable the transform of all responses to match
|
|
15
|
+
* the standard response format (compatible with JSON API)
|
|
16
|
+
*/
|
|
17
|
+
export declare const standardResponses: import(".store/@types-express-npm-5.0.0-a645691cd5/package").RequestHandler<import(".store/@types-express-serve-static-core-npm-5.0.1-32d5354816/package").ParamsDictionary, any, any, import(".store/@types-qs-npm-6.9.17-f0eceee63c/package").ParsedQs, Record<string, any>>;
|
|
18
|
+
//# sourceMappingURL=standardResponses.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standardResponses.d.ts","sourceRoot":"","sources":["../../../../src/middleware/standardResponses/standardResponses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAKhD;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,SAAU,OAAO,QAAQ,OAAO,OAAO,QAAQ;;;CAG5E,CAAA;AAED;;;GAGG;AAEH,eAAO,MAAM,iBAAiB,gRAAqD,CAAA"}
|
package/package.json
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@xylabs/express",
|
|
3
|
+
"version": "4.3.14",
|
|
4
|
+
"description": "SDK for base code for Api repos that use express and deploy on AWS ECS",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"xylabs",
|
|
7
|
+
"typescript",
|
|
8
|
+
"esm",
|
|
9
|
+
"aws",
|
|
10
|
+
"ecs",
|
|
11
|
+
"api",
|
|
12
|
+
"express"
|
|
13
|
+
],
|
|
14
|
+
"homepage": "https://xylabs.com",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/xylabs/sdk-api-express-ecs-js/issues",
|
|
17
|
+
"email": "support@xylabs.com"
|
|
18
|
+
},
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": "https://github.com/xylabs/sdk-api-express-ecs-js.git"
|
|
22
|
+
},
|
|
23
|
+
"license": "LGPL-3.0",
|
|
24
|
+
"author": {
|
|
25
|
+
"name": "XY Labs Development Team",
|
|
26
|
+
"email": "support@xylabs.com",
|
|
27
|
+
"url": "https://xylabs.com"
|
|
28
|
+
},
|
|
29
|
+
"sideEffects": false,
|
|
30
|
+
"type": "module",
|
|
31
|
+
"exports": {
|
|
32
|
+
".": {
|
|
33
|
+
"node": {
|
|
34
|
+
"types": "./dist/node/index.d.ts",
|
|
35
|
+
"default": "./dist/node/index.mjs"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"./package.json": "./package.json",
|
|
39
|
+
"./README.md": "./README.md"
|
|
40
|
+
},
|
|
41
|
+
"main": "dist/node/index.mjs",
|
|
42
|
+
"module": "dist/node/index.mjs",
|
|
43
|
+
"types": "dist/node/index.d.ts",
|
|
44
|
+
"scripts": {
|
|
45
|
+
"coverage": "jest --coverage",
|
|
46
|
+
"package-compile": "tsup && publint",
|
|
47
|
+
"package-recompile": "tsup && publint"
|
|
48
|
+
},
|
|
49
|
+
"resolutions": {
|
|
50
|
+
"eslint": "9.14.0",
|
|
51
|
+
"uuid": "^8"
|
|
52
|
+
},
|
|
53
|
+
"dependencies": {
|
|
54
|
+
"@aws-sdk/client-secrets-manager": "^3.693.0",
|
|
55
|
+
"@xylabs/assert": "^4.3.14",
|
|
56
|
+
"body-parser": "^1.20.3",
|
|
57
|
+
"connect": "^3.7.0",
|
|
58
|
+
"express-mung": "^0.5.1",
|
|
59
|
+
"http-status-codes": "^2.3.0",
|
|
60
|
+
"node-cache": "^5.1.2",
|
|
61
|
+
"rollbar": "^2.26.4",
|
|
62
|
+
"winston": "^3.17.0",
|
|
63
|
+
"winston-transport": "^4.9.0"
|
|
64
|
+
},
|
|
65
|
+
"devDependencies": {
|
|
66
|
+
"@types/body-parser": "^1.19.5",
|
|
67
|
+
"@types/connect": "^3.4.38",
|
|
68
|
+
"@types/express": "^4.17.21",
|
|
69
|
+
"@types/express-mung": "^0.5.5",
|
|
70
|
+
"@types/express-serve-static-core": "^4.19.6",
|
|
71
|
+
"@types/node": "^22.9.0",
|
|
72
|
+
"@xylabs/ts-scripts-yarn3": "^4.2.4",
|
|
73
|
+
"@xylabs/tsconfig": "^4.2.4",
|
|
74
|
+
"@xylabs/tsconfig-jest": "^4.1.0",
|
|
75
|
+
"@xylabs/vitest-extended": "^4.3.14",
|
|
76
|
+
"body-parser": "^1.20.3",
|
|
77
|
+
"express": "^4.21.1",
|
|
78
|
+
"express-mung": "^0.5.1",
|
|
79
|
+
"http-status-codes": "^2.3.0",
|
|
80
|
+
"node-cache": "^5.1.2",
|
|
81
|
+
"publint": "^0.2.12",
|
|
82
|
+
"rollbar": "^2.26.4",
|
|
83
|
+
"typescript": "^5.6.3",
|
|
84
|
+
"vitest": "^2.1.5",
|
|
85
|
+
"vitest-mock-extended": "^2.0.2",
|
|
86
|
+
"winston": "^3.17.0",
|
|
87
|
+
"winston-transport": "^4.9.0"
|
|
88
|
+
},
|
|
89
|
+
"peerDependencies": {
|
|
90
|
+
"express": "^4"
|
|
91
|
+
},
|
|
92
|
+
"packageManager": "yarn@4.5.1",
|
|
93
|
+
"volta": {
|
|
94
|
+
"node": "18.19.0",
|
|
95
|
+
"yarn": "1.22.19"
|
|
96
|
+
},
|
|
97
|
+
"publishConfig": {
|
|
98
|
+
"access": "public"
|
|
99
|
+
},
|
|
100
|
+
"docs": "dist/docs.json"
|
|
101
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { SecretsManager } from '@aws-sdk/client-secrets-manager'
|
|
2
|
+
import NodeCache from 'node-cache'
|
|
3
|
+
|
|
4
|
+
const region = 'us-east-1'
|
|
5
|
+
const envCache = new NodeCache({ stdTTL: 3600 * 24 })
|
|
6
|
+
|
|
7
|
+
export const getEnvFromAws = async (secretId: string) => {
|
|
8
|
+
const cacheResult = envCache.get<Record<string, string>>(secretId)
|
|
9
|
+
if (cacheResult) {
|
|
10
|
+
return cacheResult
|
|
11
|
+
} else {
|
|
12
|
+
const client = new SecretsManager({ region })
|
|
13
|
+
const awsResult = await client.getSecretValue({ SecretId: secretId })
|
|
14
|
+
console.log(`ENV read from AWS Success [${awsResult?.Name}, ${!!awsResult?.SecretString}, ${!!awsResult?.SecretBinary}]`)
|
|
15
|
+
if (awsResult?.SecretString) {
|
|
16
|
+
const secretObject = JSON.parse(awsResult?.SecretString) as Record<string, string>
|
|
17
|
+
console.log(`ENV read from AWS [${Object.entries(secretObject).length}]`)
|
|
18
|
+
envCache.set(secretId, secretObject)
|
|
19
|
+
return secretObject
|
|
20
|
+
} else {
|
|
21
|
+
throw new Error('Missing SecretString')
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
package/src/AWS/index.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './getEnvFromAws.ts'
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import '@xylabs/vitest-extended'
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
describe, expect, it,
|
|
5
|
+
} from 'vitest'
|
|
6
|
+
|
|
7
|
+
import { getEnvFromAws } from '../getEnvFromAws.ts'
|
|
8
|
+
|
|
9
|
+
const nonExistentSecret = 'does-not-exist'
|
|
10
|
+
const errorMessage = "Secrets Manager can't find the specified secret."
|
|
11
|
+
|
|
12
|
+
describe('getEnvFromAws', () => {
|
|
13
|
+
it('gets the ENV from AWS', async () => {
|
|
14
|
+
await expect(async () => await getEnvFromAws(nonExistentSecret)).rejects.toThrow(errorMessage)
|
|
15
|
+
})
|
|
16
|
+
})
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './notImplemented.ts'
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { RequestHandler } from 'express'
|
|
2
|
+
import { ReasonPhrases, StatusCodes } from 'http-status-codes'
|
|
3
|
+
|
|
4
|
+
export const notImplemented: RequestHandler = (_req, _res, next) => {
|
|
5
|
+
next({ message: ReasonPhrases.NOT_IMPLEMENTED, statusCode: StatusCodes.NOT_IMPLEMENTED })
|
|
6
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
NextFunction, Request, RequestHandler, Response,
|
|
3
|
+
} from 'express'
|
|
4
|
+
import type { ParamsDictionary, Query } from 'express-serve-static-core'
|
|
5
|
+
|
|
6
|
+
export function asyncHandler<P = NoReqParams, ResBody = NoResBody, ReqBody = NoReqBody, ReqQuery = NoReqQuery, Locals extends NoLocals = NoLocals>(
|
|
7
|
+
fn: RequestHandler<P, ResBody, ReqBody, ReqQuery, Locals>,
|
|
8
|
+
) {
|
|
9
|
+
return (req: Request<P, ResBody, ReqBody, ReqQuery, Locals>, res: Response<ResBody, Locals>, next: NextFunction) => {
|
|
10
|
+
return Promise.resolve(fn(req, res, next)).catch(next)
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface Empty {}
|
|
15
|
+
|
|
16
|
+
export type NoReqParams = ParamsDictionary
|
|
17
|
+
export type NoResBody = Empty
|
|
18
|
+
export type NoReqBody = Empty
|
|
19
|
+
export type NoReqQuery = Query
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
21
|
+
export type NoLocals = Record<string, any>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
NextFunction, Request, Response,
|
|
3
|
+
} from 'express'
|
|
4
|
+
|
|
5
|
+
import type { ExpressError } from '../Model/index.ts'
|
|
6
|
+
|
|
7
|
+
export const errorToJsonHandler = (error: ExpressError, req: Request, res: Response, next: NextFunction) => {
|
|
8
|
+
if (error) {
|
|
9
|
+
console.error(error.message)
|
|
10
|
+
if (!error.statusCode) error.statusCode = 500
|
|
11
|
+
res.status(error.statusCode).send({ error: error.message })
|
|
12
|
+
}
|
|
13
|
+
next(error)
|
|
14
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Request } from 'express-serve-static-core'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Since there can be multiple of certain HTTP headers or
|
|
5
|
+
* to prevent ugliness if someone did send us multiple
|
|
6
|
+
* instances of a header we only expect one of, this
|
|
7
|
+
* method grabs the 1st/only one of the desired header
|
|
8
|
+
* @param header The header to find
|
|
9
|
+
* @param req The received HTTP request (with headers)
|
|
10
|
+
* @returns The first or only occurrence of the specified HTTP header
|
|
11
|
+
*/
|
|
12
|
+
export const getHttpHeader = (header: string, req: Request): string | undefined => {
|
|
13
|
+
const headerValue = req.headers[header]
|
|
14
|
+
const value
|
|
15
|
+
// If the header exists
|
|
16
|
+
= headerValue
|
|
17
|
+
// If there's multiple of the same header
|
|
18
|
+
? Array.isArray(headerValue)
|
|
19
|
+
// Grab the first one
|
|
20
|
+
? (headerValue as string[]).shift()
|
|
21
|
+
// Otherwise grab the only one
|
|
22
|
+
: (headerValue as string)
|
|
23
|
+
// Otherwise undefined
|
|
24
|
+
: undefined
|
|
25
|
+
return value
|
|
26
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './getHttpHeader.ts'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './logFormatLocalDev.ts'
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import '@xylabs/vitest-extended'
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
describe, expect, it,
|
|
5
|
+
} from 'vitest'
|
|
6
|
+
|
|
7
|
+
import { logFormatLocalDev } from '../logFormatLocalDev.ts'
|
|
8
|
+
|
|
9
|
+
describe('logFormatLocalDev', () => {
|
|
10
|
+
it('provides a logger format', () => {
|
|
11
|
+
expect(logFormatLocalDev).toBeObject()
|
|
12
|
+
})
|
|
13
|
+
})
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './logFormatRollbar.ts'
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import '@xylabs/vitest-extended'
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
describe, expect, it,
|
|
5
|
+
} from 'vitest'
|
|
6
|
+
|
|
7
|
+
import { logFormatRollbar } from '../logFormatRollbar.ts'
|
|
8
|
+
|
|
9
|
+
describe('logFormatRollbar', () => {
|
|
10
|
+
it('provides a logger format', () => {
|
|
11
|
+
expect(logFormatRollbar).toBeObject()
|
|
12
|
+
})
|
|
13
|
+
})
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './logFormatStructured.ts'
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import '@xylabs/vitest-extended'
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
describe, expect, it,
|
|
5
|
+
} from 'vitest'
|
|
6
|
+
|
|
7
|
+
import { logFormatStructured } from '../logFormatStructured.ts'
|
|
8
|
+
|
|
9
|
+
describe('logFormatStructured', () => {
|
|
10
|
+
it('provides a logger format', () => {
|
|
11
|
+
expect(logFormatStructured).toBeObject()
|
|
12
|
+
})
|
|
13
|
+
})
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2
|
+
export type LogFunction = (message?: any) => void
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Interface to handle overlap between Winston &
|
|
6
|
+
* `console` with as much congruency as possible.
|
|
7
|
+
*/
|
|
8
|
+
export interface Logger {
|
|
9
|
+
debug: LogFunction
|
|
10
|
+
error: LogFunction
|
|
11
|
+
info: LogFunction
|
|
12
|
+
log: LogFunction
|
|
13
|
+
// trace: LogFunction
|
|
14
|
+
warn: LogFunction
|
|
15
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type LoggerMeta = Record<string, string | number>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type LoggerVerbosity = 'error' | 'warn' | 'info' | 'debug' | 'all'
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type Rollbar from 'rollbar'
|
|
2
|
+
import type { TransportStreamOptions } from 'winston-transport'
|
|
3
|
+
import Transport from 'winston-transport'
|
|
4
|
+
|
|
5
|
+
import { logFormatRollbar } from '../../LogFormats'
|
|
6
|
+
|
|
7
|
+
export class RollbarTransport extends Transport {
|
|
8
|
+
constructor(
|
|
9
|
+
opts: TransportStreamOptions,
|
|
10
|
+
protected readonly rollbar?: Rollbar,
|
|
11
|
+
) {
|
|
12
|
+
super({
|
|
13
|
+
...opts, format: logFormatRollbar, level: 'error',
|
|
14
|
+
})
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
override log(info: { message?: string }, next: () => void) {
|
|
18
|
+
this.rollbar?.error(info?.message)
|
|
19
|
+
this.emit('logged', info?.message)
|
|
20
|
+
next()
|
|
21
|
+
}
|
|
22
|
+
}
|