Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 1 addition & 9 deletions src/lib/stores/schedules.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,6 @@ type ScheduleParameterArgs = {
presets: SchedulePresetsParameters;
};

// TODO: Post Beta, add support of additional fields.
// "startTime": "2022-07-04T03:18:59.668Z",
// "endTime": "2022-07-04T03:18:59.668Z",
// "jitter": "string",
// "timezoneName": "string",
// "timezoneData": "string"

const getSearchAttributes = (
attrs: (typeof setSearchAttributes.arguments)[0],
) => {
Expand Down Expand Up @@ -229,8 +222,7 @@ export const submitEditSchedule = async (
const fields = body.schedule.action.startWorkflow?.header?.fields;
if (fields && Object.keys(fields).length > 0) {
try {
const entries = Object.entries(fields);
for (const [key, value] of entries) {
for (const [key, value] of Object.entries(fields)) {
const encodedValue = await encodePayloads({
input: stringifyWithBigInt(value),
encoding: 'json/plain',
Expand Down
63 changes: 62 additions & 1 deletion src/lib/utilities/encode-payload.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,11 @@ import {
stringifyWithBigInt,
} from '$lib/utilities/parse-with-big-int';

import { encodePayloads, getSinglePayload } from './encode-payload';
import {
encodePayloads,
getSinglePayload,
isBase64EncodedPayload,
} from './encode-payload';

describe('getSinglePayload', () => {
it('should return single payload from single payload', () => {
Expand All @@ -29,7 +33,64 @@ describe('getSinglePayload', () => {
});
});

describe('isBase64EncodedPayload', () => {
it('should return true for a base64-encoded payload', () => {
expect(
isBase64EncodedPayload({
metadata: { encoding: 'anNvbi9wbGFpbg==' },
data: 'eyJmb28iOiJiYXIifQ==',
}),
).toBe(true);
});

it('should return true for a binary/null encoded payload', () => {
expect(
isBase64EncodedPayload({
metadata: { encoding: 'YmluYXJ5L251bGw=' },
data: '',
}),
).toBe(true);
});

it('should return false for a decoded payload', () => {
expect(
isBase64EncodedPayload({
metadata: { encoding: 'json/plain' },
data: { foo: 'bar' },
}),
).toBe(false);
});

it('should return false for a raw string value', () => {
expect(isBase64EncodedPayload('hello')).toBe(false);
});

it('should return false for a raw object value', () => {
expect(isBase64EncodedPayload({ foo: 'bar' })).toBe(false);
});

it('should return false for null', () => {
expect(isBase64EncodedPayload(null)).toBe(false);
});

it('should return false for undefined', () => {
expect(isBase64EncodedPayload(undefined)).toBe(false);
});
});

describe('encodePayloads', () => {
it('should return already-encoded payload as-is', async () => {
const alreadyEncoded = {
metadata: { encoding: 'anNvbi9wbGFpbg==' },
data: 'eyJmb28iOiJiYXIifQ==',
};
const payload = await encodePayloads({
input: stringifyWithBigInt(alreadyEncoded),
encoding: 'json/plain',
});
expect(payload).toEqual([alreadyEncoded]);
});

it('should encode single simple string payload', async () => {
const payload = await encodePayloads({
input: stringifyWithBigInt('cats'),
Expand Down
38 changes: 27 additions & 11 deletions src/lib/utilities/encode-payload.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,21 @@ import type { PayloadInputEncoding } from '$lib/models/payload-encoding';
import { encodePayloadsWithCodec } from '$lib/services/data-encoder';
import { dataEncoder } from '$lib/stores/data-encoder';
import type { Payload } from '$lib/types';
import { atob } from '$lib/utilities/atob';
import { btoa } from '$lib/utilities/btoa';
import {
parseWithBigInt,
stringifyWithBigInt,
} from '$lib/utilities/parse-with-big-int';

export const isBase64EncodedPayload = (value: unknown): value is Payload => {
if (!value || typeof value !== 'object') return false;
const { metadata, data } = value as Payload;
const encoding = metadata?.encoding;
if (typeof encoding !== 'string' || typeof data !== 'string') return false;
return atob(encoding) !== encoding;
};

export const getSinglePayload = (decodedValue: string): string => {
if (decodedValue) {
const parsedValue = parseWithBigInt(decodedValue);
Expand Down Expand Up @@ -58,18 +67,25 @@ export const encodePayloads = async ({
messageType = '',
encodeWithCodec = true,
}: EncodePayloads): Promise<Payload[]> => {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • ⚠️ Type 'null' is not assignable to type 'IPayload[]'.

let payloads = null;
if (!input) return null;

if (input) {
const parsedInput = parseWithBigInt(input);
payloads = [setBase64Payload(parsedInput, encoding, messageType)];
const endpoint = get(dataEncoder).endpoint;
if (endpoint && encodeWithCodec) {
const awaitData = await encodePayloadsWithCodec({
payloads: { payloads },
});
payloads = awaitData?.payloads ?? null;
}
const parsedInput = parseWithBigInt(input);
let payloads: Payload[] = isBase64EncodedPayload(parsedInput)
? [parsedInput]
: [
setBase64Payload(
parsedInput,
encoding,
messageType,
) as unknown as Payload,
];
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not a fan of ternaries


const endpoint = get(dataEncoder).endpoint;
if (endpoint && encodeWithCodec) {
const awaitData = await encodePayloadsWithCodec({
payloads: { payloads },
});
payloads = (awaitData?.payloads as Payload[]) ?? null;
}
return payloads;
};
Loading