From 2c883feb05271c889a6cb77fded1fa86ca527cbd Mon Sep 17 00:00:00 2001
From: Paul Visscher
Date: Tue, 29 Nov 2022 00:16:08 +0100
Subject: [PATCH] feat: add kinesis schemas
---
src/lib/aws/kinesis/index.ts | 1 +
src/lib/aws/kinesis/kindesis.spec.ts | 8 +++
src/lib/aws/kinesis/kinesis.schema.ts | 28 +++++++++
src/lib/aws/kinesis/kinesis.type.ts | 62 +++++++++++++++++++
.../schemas/kinesis-stream-event.schema.js | 5 ++
.../schemas/kinesis-stream-record.schema.js | 5 ++
6 files changed, 109 insertions(+)
create mode 100644 src/lib/aws/kinesis/index.ts
create mode 100644 src/lib/aws/kinesis/kindesis.spec.ts
create mode 100644 src/lib/aws/kinesis/kinesis.schema.ts
create mode 100644 src/lib/aws/kinesis/kinesis.type.ts
create mode 100644 src/lib/aws/kinesis/schemas/kinesis-stream-event.schema.js
create mode 100644 src/lib/aws/kinesis/schemas/kinesis-stream-record.schema.js
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