Skip to content
Open
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
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
"@clack/prompts": "1.3.0",
"ajv": "^6.12.6",
"chalk": "5.6.2",
"auth0": "^5.9.0",
"auth0": "^5.11.0",
"dot-prop": "^5.3.0",
"fs-extra": "^10.1.0",
"js-yaml": "^4.1.1",
Expand Down
2 changes: 2 additions & 0 deletions src/context/directory/handlers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ import userAttributeProfiles from './userAttributeProfiles';
import connectionProfiles from './connectionProfiles';
import tokenExchangeProfiles from './tokenExchangeProfiles';
import supplementalSignals from './supplementalSignals';
import rateLimitPolicies from './rateLimitPolicies';

import DirectoryContext from '..';
import { AssetTypes, Asset } from '../../../types';
Expand Down Expand Up @@ -92,6 +93,7 @@ const directoryHandlers: {
connectionProfiles,
tokenExchangeProfiles,
supplementalSignals,
rateLimitPolicies,
};

export default directoryHandlers;
63 changes: 63 additions & 0 deletions src/context/directory/handlers/rateLimitPolicies.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import path from 'path';
import fs from 'fs-extra';
import { constants } from '../../../tools';
import { getFiles, existsMustBeDir, dumpJSON, loadJSON, sanitize } from '../../../utils';
import { DirectoryHandler } from '.';
import DirectoryContext from '..';
import { ParsedAsset } from '../../../types';
import { RateLimitPolicy } from '../../../tools/auth0/handlers/rateLimitPolicies';

type ParsedRateLimitPolicies = ParsedAsset<'rateLimitPolicies', RateLimitPolicy[]>;

function parse(context: DirectoryContext): ParsedRateLimitPolicies {
const rateLimitPoliciesDirectory = path.join(
context.filePath,
constants.RATE_LIMIT_POLICIES_DIRECTORY
);
if (!existsMustBeDir(rateLimitPoliciesDirectory)) return { rateLimitPolicies: null }; // Skip

const foundFiles = getFiles(rateLimitPoliciesDirectory, ['.json']);

const rateLimitPolicies = foundFiles
.map((f) =>
loadJSON(f, {
mappings: context.mappings,
disableKeywordReplacement: context.disableKeywordReplacement,
})
)
.filter((p) => Object.keys(p).length > 0);

return { rateLimitPolicies };
}

async function dump(context: DirectoryContext): Promise<void> {
const { rateLimitPolicies } = context.assets;

if (!rateLimitPolicies) return; // Skip, nothing to dump

const rateLimitPoliciesDirectory = path.join(
context.filePath,
constants.RATE_LIMIT_POLICIES_DIRECTORY
);
fs.ensureDirSync(rateLimitPoliciesDirectory);

const removeKeysFromOutput = ['id', 'created_at', 'updated_at'];

rateLimitPolicies.forEach((policy) => {
const policyToWrite = { ...policy };
removeKeysFromOutput.forEach((key) => {
delete policyToWrite[key];
});

const fileName = sanitize(policy.consumer_selector);
const filePath = path.join(rateLimitPoliciesDirectory, `${fileName}.json`);
dumpJSON(filePath, policyToWrite);
});
}

const rateLimitPoliciesHandler: DirectoryHandler<ParsedRateLimitPolicies> = {
parse,
dump,
};

export default rateLimitPoliciesHandler;
2 changes: 2 additions & 0 deletions src/context/yaml/handlers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ import userAttributeProfiles from './userAttributeProfiles';
import connectionProfiles from './connectionProfiles';
import tokenExchangeProfiles from './tokenExchangeProfiles';
import supplementalSignals from './supplementalSignals';
import rateLimitPolicies from './rateLimitPolicies';

import YAMLContext from '..';
import { AssetTypes } from '../../../types';
Expand Down Expand Up @@ -90,6 +91,7 @@ const yamlHandlers: { [key in AssetTypes]: YAMLHandler<{ [key: string]: unknown
connectionProfiles,
tokenExchangeProfiles,
supplementalSignals,
rateLimitPolicies,
};

export default yamlHandlers;
39 changes: 39 additions & 0 deletions src/context/yaml/handlers/rateLimitPolicies.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import { YAMLHandler } from '.';
import YAMLContext from '..';
import { ParsedAsset } from '../../../types';
import { RateLimitPolicy } from '../../../tools/auth0/handlers/rateLimitPolicies';

type ParsedRateLimitPolicies = ParsedAsset<'rateLimitPolicies', RateLimitPolicy[]>;

async function parse(context: YAMLContext): Promise<ParsedRateLimitPolicies> {
const { rateLimitPolicies } = context.assets;

if (!rateLimitPolicies) return { rateLimitPolicies: null };

return { rateLimitPolicies };
}

async function dump(context: YAMLContext): Promise<ParsedRateLimitPolicies> {
const { rateLimitPolicies } = context.assets;

if (!rateLimitPolicies) return { rateLimitPolicies: null };

const removeKeysFromOutput = ['id', 'created_at', 'updated_at'];

const cleaned = rateLimitPolicies.map((policy) => {
const policyToWrite = { ...policy };
removeKeysFromOutput.forEach((key) => {
delete policyToWrite[key];
});
return policyToWrite;
});

return { rateLimitPolicies: cleaned };
}

const rateLimitPoliciesHandler: YAMLHandler<ParsedRateLimitPolicies> = {
parse,
dump,
};

export default rateLimitPoliciesHandler;
2 changes: 2 additions & 0 deletions src/tools/auth0/handlers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import * as userAttributeProfiles from './userAttributeProfiles';
import * as connectionProfiles from './connectionProfiles';
import * as tokenExchangeProfiles from './tokenExchangeProfiles';
import * as supplementalSignals from './supplementalSignals';
import * as rateLimitPolicies from './rateLimitPolicies';

import { AssetTypes } from '../../../types';
import APIHandler from './default';
Expand Down Expand Up @@ -86,6 +87,7 @@ const auth0ApiHandlers: { [key in AssetTypes]: any } = {
connectionProfiles,
tokenExchangeProfiles,
supplementalSignals,
rateLimitPolicies,
};

export default auth0ApiHandlers as {
Expand Down
Loading