diff --git a/package-lock.json b/package-lock.json index 95766e3506..107c1b5384 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1125,6 +1125,11 @@ "@types/node": "*" } }, + "@types/luxon": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-1.27.0.tgz", + "integrity": "sha512-rr2lNXsErnA/ARtgFn46NtQjUa66cuwZYeo/2K7oqqxhJErhXgHBPyNKCo+pfOC3L7HFwtao8ebViiU9h4iAxA==" + }, "@types/mime": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", @@ -5355,6 +5360,11 @@ "yallist": "^4.0.0" } }, + "luxon": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.27.0.tgz", + "integrity": "sha512-VKsFsPggTA0DvnxtJdiExAucKdAnwbCCNlMM5ENvHlxubqWd0xhZcdb4XgZ7QFNhaRhilXCFxHuoObP5BNA4PA==" + }, "macos-release": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.4.1.tgz", diff --git a/package.json b/package.json index 2e44bedde2..1930e1cf44 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aries-framework", - "version": "0.0.5-unstable.0", + "version": "0.0.5-unstable.0-datatransfer.5", "license": "Apache-2.0", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -23,12 +23,14 @@ "prepare": "husky install" }, "dependencies": { + "@types/luxon": "^1.27.0", "bn.js": "^5.2.0", "buffer": "^6.0.3", "class-transformer": "^0.4.0", "class-validator": "^0.13.1", "events": "^3.3.0", "js-sha256": "^0.9.0", + "luxon": "^1.27.0", "reflect-metadata": "^0.1.13", "uuid": "^8.3.0" }, @@ -83,6 +85,6 @@ } }, "engines": { - "node": "^12" + "node": ">= 12" } } diff --git a/src/modules/basic-messages/messages/BasicMessage.ts b/src/modules/basic-messages/messages/BasicMessage.ts index bf3641bc11..d765bac423 100644 --- a/src/modules/basic-messages/messages/BasicMessage.ts +++ b/src/modules/basic-messages/messages/BasicMessage.ts @@ -1,7 +1,8 @@ import { Equals, IsDate, IsString } from 'class-validator' -import { Expose, Type } from 'class-transformer' +import { Expose, Transform } from 'class-transformer' import { AgentMessage } from '../../../agent/AgentMessage' +import { DateParser } from '../../../utils/transformers' import { MessageType } from './BasicMessageMessageType' export class BasicMessage extends AgentMessage { @@ -26,7 +27,7 @@ export class BasicMessage extends AgentMessage { public static readonly type = MessageType.BasicMessage @Expose({ name: 'sent_time' }) - @Type(() => Date) + @Transform(({ value }) => DateParser(value)) @IsDate() public sentTime!: Date diff --git a/src/utils/transformers.ts b/src/utils/transformers.ts index 0f2e2d608b..74d99a979d 100644 --- a/src/utils/transformers.ts +++ b/src/utils/transformers.ts @@ -1,6 +1,8 @@ import { Transform, TransformationType } from 'class-transformer' import { JsonTransformer } from './JsonTransformer' +import { DateTime } from 'luxon' + /** * Decorator that transforms json to and from corresponding record. * @@ -36,3 +38,19 @@ export function RecordTransformer(Class: { new (...args: any[]): T }) { } }) } +/* + * Function that parses date from multiple formats + * including SQL formats. + */ + +export function DateParser(value: string): Date { + const parsedDate = new Date(value) + if (parsedDate instanceof Date && !isNaN(parsedDate.getTime())) { + return parsedDate + } + const luxonDate = DateTime.fromSQL(value) + if (luxonDate.isValid) { + return new Date(luxonDate.toString()) + } + return new Date() +} diff --git a/yarn.lock b/yarn.lock index f0f0f30845..8fdc50b695 100644 --- a/yarn.lock +++ b/yarn.lock @@ -817,6 +817,11 @@ dependencies: "@types/node" "*" +"@types/luxon@^1.27.0": + version "1.27.0" + resolved "https://registry.yarnpkg.com/@types/luxon/-/luxon-1.27.0.tgz#1e3b5a7f8ca6944349c43498b4442b742c71ab0b" + integrity sha512-rr2lNXsErnA/ARtgFn46NtQjUa66cuwZYeo/2K7oqqxhJErhXgHBPyNKCo+pfOC3L7HFwtao8ebViiU9h4iAxA== + "@types/mime@^1": version "1.3.2" resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz" @@ -4274,6 +4279,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +luxon@^1.27.0: + version "1.27.0" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.27.0.tgz#ae10c69113d85dab8f15f5e8390d0cbeddf4f00f" + integrity sha512-VKsFsPggTA0DvnxtJdiExAucKdAnwbCCNlMM5ENvHlxubqWd0xhZcdb4XgZ7QFNhaRhilXCFxHuoObP5BNA4PA== + macos-release@^2.2.0: version "2.4.1" resolved "https://registry.npmjs.org/macos-release/-/macos-release-2.4.1.tgz"