diff --git a/src/lib/aws/kinesis/index.ts b/src/lib/aws/kinesis/index.ts new file mode 100644 index 0000000..196a6d3 --- /dev/null +++ b/src/lib/aws/kinesis/index.ts @@ -0,0 +1 @@ +export * from './kinesis.type' diff --git a/src/lib/aws/kinesis/kindesis.spec.ts b/src/lib/aws/kinesis/kindesis.spec.ts new file mode 100644 index 0000000..4d3ab1f --- /dev/null +++ b/src/lib/aws/kinesis/kindesis.spec.ts @@ -0,0 +1,8 @@ +import type { KinesisStreamEvent } from './kinesis.type' + +import type { KinesisStreamEvent as LambdaKinesisStreamEvent } from 'aws-lambda' + +test('type is compatible', () => { + const _test: KinesisStreamEvent = {} as unknown as LambdaKinesisStreamEvent + const _test2: LambdaKinesisStreamEvent = {} as unknown as KinesisStreamEvent +}) diff --git a/src/lib/aws/kinesis/kinesis.schema.ts b/src/lib/aws/kinesis/kinesis.schema.ts new file mode 100644 index 0000000..8679301 --- /dev/null +++ b/src/lib/aws/kinesis/kinesis.schema.ts @@ -0,0 +1,28 @@ +import { $array, $ref, $string, $validator, $number, $object } from '@skyleague/therefore' + +export const kinesisStreamRecordPayload = $object({ + approximateArrivalTimestamp: $number, + data: $string, + kinesisSchemaVersion: $string, + partitionKey: $string, + sequenceNumber: $string, +}) + +export const kinesisStreamRecord = $validator( + $object({ + awsRegion: $string, + eventID: $string, + eventName: $string, + eventSource: $string, + eventSourceARN: $string, + eventVersion: $string, + invokeIdentityArn: $string, + kinesis: $ref(kinesisStreamRecordPayload), + }) +) + +export const kinesisStreamEvent = $validator( + $object({ + Records: $array($ref(kinesisStreamRecord)), + }) +) diff --git a/src/lib/aws/kinesis/kinesis.type.ts b/src/lib/aws/kinesis/kinesis.type.ts new file mode 100644 index 0000000..2003342 --- /dev/null +++ b/src/lib/aws/kinesis/kinesis.type.ts @@ -0,0 +1,62 @@ +/** + * Generated by @skyleague/therefore@v1.0.0-local + * Do not manually touch this + */ +/* eslint-disable */ +import AjvValidator from 'ajv' +import type { ValidateFunction } from 'ajv' + +export interface KinesisStreamRecordPayload { + approximateArrivalTimestamp: number + data: string + kinesisSchemaVersion: string + partitionKey: string + sequenceNumber: string +} + +export interface KinesisStreamRecord { + awsRegion: string + eventID: string + eventName: string + eventSource: string + eventSourceARN: string + eventVersion: string + invokeIdentityArn: string + kinesis: KinesisStreamRecordPayload +} + +export const KinesisStreamRecord = { + validate: require('./schemas/kinesis-stream-record.schema.js') as ValidateFunction, + get schema() { + return KinesisStreamRecord.validate.schema + }, + get errors() { + return KinesisStreamRecord.validate.errors ?? undefined + }, + is: (o: unknown): o is KinesisStreamRecord => KinesisStreamRecord.validate(o) === true, + assert: (o: unknown) => { + if (!KinesisStreamRecord.validate(o)) { + throw new AjvValidator.ValidationError(KinesisStreamRecord.errors ?? []) + } + }, +} as const + +export interface KinesisStreamEvent { + Records: KinesisStreamRecord[] +} + +export const KinesisStreamEvent = { + validate: require('./schemas/kinesis-stream-event.schema.js') as ValidateFunction, + get schema() { + return KinesisStreamEvent.validate.schema + }, + get errors() { + return KinesisStreamEvent.validate.errors ?? undefined + }, + is: (o: unknown): o is KinesisStreamEvent => KinesisStreamEvent.validate(o) === true, + assert: (o: unknown) => { + if (!KinesisStreamEvent.validate(o)) { + throw new AjvValidator.ValidationError(KinesisStreamEvent.errors ?? []) + } + }, +} as const diff --git a/src/lib/aws/kinesis/schemas/kinesis-stream-event.schema.js b/src/lib/aws/kinesis/schemas/kinesis-stream-event.schema.js new file mode 100644 index 0000000..ccddb20 --- /dev/null +++ b/src/lib/aws/kinesis/schemas/kinesis-stream-event.schema.js @@ -0,0 +1,5 @@ +/** + * Generated by @skyleague/therefore + * eslint-disable + */ +"use strict";module.exports = validate10;module.exports.default = validate10;const schema11 = {"$schema":"http://json-schema.org/draft-07/schema#","title":"KinesisStreamEvent","type":"object","properties":{"Records":{"type":"array","items":{"$ref":"#/$defs/KinesisStreamRecord"}}},"required":["Records"],"additionalProperties":true,"$defs":{"KinesisStreamRecord":{"type":"object","properties":{"awsRegion":{"type":"string"},"eventID":{"type":"string"},"eventName":{"type":"string"},"eventSource":{"type":"string"},"eventSourceARN":{"type":"string"},"eventVersion":{"type":"string"},"invokeIdentityArn":{"type":"string"},"kinesis":{"$ref":"#/$defs/KinesisStreamRecordPayload"}},"required":["awsRegion","eventID","eventName","eventSource","eventSourceARN","eventVersion","invokeIdentityArn","kinesis"],"additionalProperties":true,"title":"KinesisStreamRecord"},"KinesisStreamRecordPayload":{"type":"object","properties":{"approximateArrivalTimestamp":{"type":"number"},"data":{"type":"string"},"kinesisSchemaVersion":{"type":"string"},"partitionKey":{"type":"string"},"sequenceNumber":{"type":"string"}},"required":["approximateArrivalTimestamp","data","kinesisSchemaVersion","partitionKey","sequenceNumber"],"additionalProperties":true,"title":"KinesisStreamRecordPayload"}}};const schema12 = {"type":"object","properties":{"awsRegion":{"type":"string"},"eventID":{"type":"string"},"eventName":{"type":"string"},"eventSource":{"type":"string"},"eventSourceARN":{"type":"string"},"eventVersion":{"type":"string"},"invokeIdentityArn":{"type":"string"},"kinesis":{"$ref":"#/$defs/KinesisStreamRecordPayload"}},"required":["awsRegion","eventID","eventName","eventSource","eventSourceARN","eventVersion","invokeIdentityArn","kinesis"],"additionalProperties":true,"title":"KinesisStreamRecord"};const schema13 = {"type":"object","properties":{"approximateArrivalTimestamp":{"type":"number"},"data":{"type":"string"},"kinesisSchemaVersion":{"type":"string"},"partitionKey":{"type":"string"},"sequenceNumber":{"type":"string"}},"required":["approximateArrivalTimestamp","data","kinesisSchemaVersion","partitionKey","sequenceNumber"],"additionalProperties":true,"title":"KinesisStreamRecordPayload"};function validate11(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;let valid0 = true;for( missing0 of schema12.required){valid0 = data[missing0] !== undefined;if(!valid0){validate11.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;break;}}if(valid0){if(data.awsRegion !== undefined){const _errs2 = errors;if(typeof data.awsRegion !== "string"){validate11.errors = [{instancePath:instancePath+"/awsRegion",schemaPath:"#/properties/awsRegion/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid1 = _errs2 === errors;}else {var valid1 = true;}if(valid1){if(data.eventID !== undefined){const _errs4 = errors;if(typeof data.eventID !== "string"){validate11.errors = [{instancePath:instancePath+"/eventID",schemaPath:"#/properties/eventID/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid1 = _errs4 === errors;}else {var valid1 = true;}if(valid1){if(data.eventName !== undefined){const _errs6 = errors;if(typeof data.eventName !== "string"){validate11.errors = [{instancePath:instancePath+"/eventName",schemaPath:"#/properties/eventName/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid1 = _errs6 === errors;}else {var valid1 = true;}if(valid1){if(data.eventSource !== undefined){const _errs8 = errors;if(typeof data.eventSource !== "string"){validate11.errors = [{instancePath:instancePath+"/eventSource",schemaPath:"#/properties/eventSource/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid1 = _errs8 === errors;}else {var valid1 = true;}if(valid1){if(data.eventSourceARN !== undefined){const _errs10 = errors;if(typeof data.eventSourceARN !== "string"){validate11.errors = [{instancePath:instancePath+"/eventSourceARN",schemaPath:"#/properties/eventSourceARN/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid1 = _errs10 === errors;}else {var valid1 = true;}if(valid1){if(data.eventVersion !== undefined){const _errs12 = errors;if(typeof data.eventVersion !== "string"){validate11.errors = [{instancePath:instancePath+"/eventVersion",schemaPath:"#/properties/eventVersion/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid1 = _errs12 === errors;}else {var valid1 = true;}if(valid1){if(data.invokeIdentityArn !== undefined){const _errs14 = errors;if(typeof data.invokeIdentityArn !== "string"){validate11.errors = [{instancePath:instancePath+"/invokeIdentityArn",schemaPath:"#/properties/invokeIdentityArn/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid1 = _errs14 === errors;}else {var valid1 = true;}if(valid1){if(data.kinesis !== undefined){let data7 = data.kinesis;const _errs16 = errors;const _errs17 = errors;if(errors === _errs17){if(data7 && typeof data7 == "object" && !Array.isArray(data7)){let missing1;let valid3 = true;for( missing1 of schema13.required){valid3 = data7[missing1] !== undefined;if(!valid3){validate11.errors = [{instancePath:instancePath+"/kinesis",schemaPath:"#/$defs/KinesisStreamRecordPayload/required",keyword:"required",params:{missingProperty: missing1},message:"must have required property '"+missing1+"'"}];return false;break;}}if(valid3){if(data7.approximateArrivalTimestamp !== undefined){let data8 = data7.approximateArrivalTimestamp;const _errs20 = errors;if(!((typeof data8 == "number") && (isFinite(data8)))){validate11.errors = [{instancePath:instancePath+"/kinesis/approximateArrivalTimestamp",schemaPath:"#/$defs/KinesisStreamRecordPayload/properties/approximateArrivalTimestamp/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid4 = _errs20 === errors;}else {var valid4 = true;}if(valid4){if(data7.data !== undefined){const _errs22 = errors;if(typeof data7.data !== "string"){validate11.errors = [{instancePath:instancePath+"/kinesis/data",schemaPath:"#/$defs/KinesisStreamRecordPayload/properties/data/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid4 = _errs22 === errors;}else {var valid4 = true;}if(valid4){if(data7.kinesisSchemaVersion !== undefined){const _errs24 = errors;if(typeof data7.kinesisSchemaVersion !== "string"){validate11.errors = [{instancePath:instancePath+"/kinesis/kinesisSchemaVersion",schemaPath:"#/$defs/KinesisStreamRecordPayload/properties/kinesisSchemaVersion/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid4 = _errs24 === errors;}else {var valid4 = true;}if(valid4){if(data7.partitionKey !== undefined){const _errs26 = errors;if(typeof data7.partitionKey !== "string"){validate11.errors = [{instancePath:instancePath+"/kinesis/partitionKey",schemaPath:"#/$defs/KinesisStreamRecordPayload/properties/partitionKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid4 = _errs26 === errors;}else {var valid4 = true;}if(valid4){if(data7.sequenceNumber !== undefined){const _errs28 = errors;if(typeof data7.sequenceNumber !== "string"){validate11.errors = [{instancePath:instancePath+"/kinesis/sequenceNumber",schemaPath:"#/$defs/KinesisStreamRecordPayload/properties/sequenceNumber/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid4 = _errs28 === errors;}else {var valid4 = true;}}}}}}}else {validate11.errors = [{instancePath:instancePath+"/kinesis",schemaPath:"#/$defs/KinesisStreamRecordPayload/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid1 = _errs16 === errors;}else {var valid1 = true;}}}}}}}}}}else {validate11.errors = [{instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}validate11.errors = vErrors;return errors === 0;}function validate10(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if((data.Records === undefined) && (missing0 = "Records")){validate10.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.Records !== undefined){let data0 = data.Records;const _errs2 = errors;if(errors === _errs2){if(Array.isArray(data0)){var valid1 = true;const len0 = data0.length;for(let i0=0; i0