-
- The product development kit for makers
-
-
- Skip straight to the good stuff - providing valuable
- features to your customers. Miller has all of your
- technology sorted.
-
-
-
- Get a demo today
-
+
+
+
+
+ A Nest JS and React SaaS kit for busy devs
+
+
+ Setup a new project with NestJs,Postgres,
+ React, Tailwind, Stripe and Auth0 in
+ minutes. Save months of time and skip
+ straight to the good stuff - providing
+ valuable features to your customers.
+
+
+
+
+
+
+ Buy now
+
+
+ View the code
+
+
-
-
+
+
+ What is Miller?
+
+
+ Miller is a frontend app, backend app, marketing
+ app, a collection of scripts and NestJs libraries
+ that are all integrated with Stripe and Auth0.
+ Miller is months of dev work already completed, for
+ people with lots of ideas, but not a lot of time.
+
+
+ Miller focuses on four main things:
+
+
+
+ Fast setup. Miller is designed
+ to get you up and running locally in minutes.
+ We've already integrated everything. We've
+ written the scripts to automate initialisation.
+
+
+ Leverage services. Managed
+ services like Stripe and Auth0 provide
+ extraordinary value to developers. Our terraform
+ scripts will configure and manage these for you
+ in seconds. They are already integrated into the
+ frontend and backend apps.
+
+
+
+ Avoid chasing the latest technology.
+ {" "}
+ You probably don't need Kubernetes for your
+ first 10 customers. Your customers don't care,
+ they want their problem solved. Just start
+ shipping.
+
+
+ Convention over configuration. {" "}
+ Miller comes with sensible defaults for a
+ production ready application but you can
+ override them if you want. Nothing is hidden.
+
+
+
+
+
What you get
{features.map((feature, key) => (
{feature}
))}
+
+
+ Buy now
+
+
+ View the code
+
+
diff --git a/apps/marketing/src/components/Pricing.tsx b/apps/marketing/src/components/Pricing.tsx
new file mode 100644
index 00000000..9cb16bcf
--- /dev/null
+++ b/apps/marketing/src/components/Pricing.tsx
@@ -0,0 +1,59 @@
+import { colorVariants } from "@use-miller/shared-frontend-tooling";
+import StyledLink from "./StyledLink";
+import { Container } from "./Container";
+
+export function Pricing() {
+ console.log(colorVariants["cyan"]);
+ return (
+
+
+
+
+
+
+ Pricing
+
+
+ Simple pricing, pay once and use forever.
+
+
+
+ All the features
+
+
+ All the time-saving
+
+
+ Updates for 1 year
+
+
+ Access to chat forum
+
+
+
+ $199USD
+
+
+
+ Buy now
+
+
+
+
+
+
+ );
+}
diff --git a/apps/marketing/src/components/StyledLink.tsx b/apps/marketing/src/components/StyledLink.tsx
new file mode 100644
index 00000000..2713777b
--- /dev/null
+++ b/apps/marketing/src/components/StyledLink.tsx
@@ -0,0 +1,33 @@
+import { colorVariants } from "@use-miller/shared-frontend-tooling";
+import clsx from "clsx";
+import Link from "next/link";
+import { PropsWithChildren } from "react";
+
+const StyledLink = ({
+ href,
+ className,
+ children,
+ color,
+}: PropsWithChildren & {
+ href: string;
+ color: "green" | "cyan" | "amber" | "red" | "violet" | "pink";
+ className?: string;
+}) => {
+ return (
+
+ {children}
+
+ );
+};
+
+export default StyledLink;
diff --git a/apps/marketing/src/diagrams/miller.drawio.svg b/apps/marketing/src/diagrams/miller.drawio.svg
new file mode 100644
index 00000000..388f5e01
--- /dev/null
+++ b/apps/marketing/src/diagrams/miller.drawio.svg
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Main app
+
+
+
+
+
+
+
+
+
+
+
+
+ Prebuilt integrations
+
+
+
+
+
+ Prebuilt integrations
+
+
+
+
+
+
+
+
+
+
+
+
+ Backend APi
+
+
+
+
+
+
+
+
+
+
+
+
+ Marketing Site
+
+
+
+
+
+
+
+
+
+
+
+
+ Auth0
+
+
+
+
+
+
+
+
+ Text is not SVG - cannot display
+
+
+
+
\ No newline at end of file
diff --git a/apps/marketing/src/intro-media/admin.png b/apps/marketing/src/intro-media/admin.png
new file mode 100644
index 00000000..73c05d70
Binary files /dev/null and b/apps/marketing/src/intro-media/admin.png differ
diff --git a/apps/marketing/src/intro-media/code.png b/apps/marketing/src/intro-media/code.png
new file mode 100644
index 00000000..ea35efd3
Binary files /dev/null and b/apps/marketing/src/intro-media/code.png differ
diff --git a/apps/marketing/src/intro-media/product.png b/apps/marketing/src/intro-media/product.png
new file mode 100644
index 00000000..deb7bd5f
Binary files /dev/null and b/apps/marketing/src/intro-media/product.png differ
diff --git a/apps/marketing/src/pages/index.tsx b/apps/marketing/src/pages/index.tsx
index 89b3a9ec..565c31e4 100644
--- a/apps/marketing/src/pages/index.tsx
+++ b/apps/marketing/src/pages/index.tsx
@@ -2,6 +2,7 @@ import Head from "next/head";
import { Footer } from "../components/Footer";
import { Header } from "../components/Header";
import { Hero } from "../components/Hero";
+import { Pricing } from "../components/Pricing";
export default function Home() {
return (
@@ -16,6 +17,7 @@ export default function Home() {
+
>
diff --git a/apps/marketing/src/styles/tailwind.css b/apps/marketing/src/styles/tailwind.css
index 596dc52b..a3309678 100644
--- a/apps/marketing/src/styles/tailwind.css
+++ b/apps/marketing/src/styles/tailwind.css
@@ -5,3 +5,10 @@
#__next {
min-height: 100%;
}
+
+.intro-image-rotation {
+ transform: perspective(1260px) rotateY(-20.2deg) rotateX(10.6deg) scale(1);
+}
+.intro-image {
+ box-shadow: 0 2px 50px 0 rgb(68 125 232 / 50%);
+}
\ No newline at end of file
diff --git a/apps/marketing/tailwind.config.js b/apps/marketing/tailwind.config.js
index ca6e9087..de03d2e5 100644
--- a/apps/marketing/tailwind.config.js
+++ b/apps/marketing/tailwind.config.js
@@ -6,6 +6,49 @@ module.exports = {
variants: {
animation: ["motion-safe"],
},
+ safelist: [
+ "focus:ring-amber-400",
+ "hover:shadow-amber-500/30",
+ "text-amber-500",
+ "bg-amber-500",
+ "hover:text-amber-500",
+ "hover:bg-amber-600",
+
+ "focus:ring-red-400",
+ "hover:shadow-red-500/30",
+ "text-red-500",
+ "bg-red-500",
+ "hover:text-red-500",
+ "hover:bg-red-600",
+
+ "hover:shadow-green-500/30",
+ "focus:ring-green-400",
+ "text-green-500",
+ "bg-green-500",
+ "hover:text-green-500",
+ "hover:bg-green-600",
+
+ "focus:ring-cyan-400",
+ "hover:shadow-cyan-500/30",
+ "text-cyan-500",
+ "bg-cyan-500",
+ "hover:text-cyan-500",
+ "hover:bg-cyan-600",
+
+ "focus:ring-violet-400",
+ "hover:shadow-violet-500/30",
+ "text-violet-500",
+ "bg-violet-500",
+ "hover:text-violet-500",
+ "hover:bg-violet-600",
+
+ "focus:ring-pink-400",
+ "hover:shadow-pink-500/30",
+ "text-pink-500",
+ "bg-pink-500",
+ "hover:text-pink-500",
+ "hover:bg-pink-600",
+ ],
theme: {
fontSize: {
xs: ["0.75rem", { lineHeight: "1rem" }],
diff --git a/infrastructure/local-dev/auth0-dev/auth0-resources.tf b/infrastructure/local-dev/auth0-dev/auth0-resources.tf
index 38749a49..7b9ee053 100644
--- a/infrastructure/local-dev/auth0-dev/auth0-resources.tf
+++ b/infrastructure/local-dev/auth0-dev/auth0-resources.tf
@@ -1,5 +1,5 @@
resource "auth0_tenant" "dev_tenant" {
- friendly_name = "Miller App (Development)"
+ friendly_name = "use-miller app (Development)"
default_directory = "Username-Password-Authentication"
}
diff --git a/infrastructure/production/auth0-prod/.gitignore b/infrastructure/production/auth0-prod/.gitignore
new file mode 100644
index 00000000..c5928807
--- /dev/null
+++ b/infrastructure/production/auth0-prod/.gitignore
@@ -0,0 +1,34 @@
+# Local .terraform directories
+**/.terraform/*
+
+# .tfstate files
+*.tfstate
+*.tfstate.*
+
+# Crash log files
+crash.log
+crash.*.log
+
+# Exclude all .tfvars files, which are likely to contain sensitive data, such as
+# password, private keys, and other secrets. These should not be part of version
+# control as they are data points which are potentially sensitive and subject
+# to change depending on the environment.
+*.tfvars
+*.tfvars.json
+
+# Ignore override files as they are usually used to override resources locally and so
+# are not checked in
+override.tf
+override.tf.json
+*_override.tf
+*_override.tf.json
+
+# Include override files you do wish to add to version control using negated pattern
+
+
+# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan
+# example: *tfplan*
+
+# Ignore CLI configuration files
+.terraformrc
+terraform.rc
\ No newline at end of file
diff --git a/infrastructure/production/auth0-prod/.terraform.lock.hcl b/infrastructure/production/auth0-prod/.terraform.lock.hcl
new file mode 100644
index 00000000..6f1d60db
--- /dev/null
+++ b/infrastructure/production/auth0-prod/.terraform.lock.hcl
@@ -0,0 +1,23 @@
+# This file is maintained automatically by "terraform init".
+# Manual edits may be lost in future updates.
+
+provider "registry.terraform.io/auth0/auth0" {
+ version = "0.42.0"
+ hashes = [
+ "h1:ZLYB6zOJDwDQWmGqXLi5ZrNnsnqJoAR2ziyFqItruEY=",
+ "zh:1295e3eb0b86991fca12fccc68d48446020f3f437882d30e08d37b1ccbeca415",
+ "zh:6489cf2097db949acd36a37a99d2a3e63a3a19e31d980dbcd3f18d9e49e32b0b",
+ "zh:753449510e34311983475da083b8c31dd39b8e198964e5441b358110b1609db1",
+ "zh:7839a8460e6ab8e4101eb06dc0bf2cecda3e31127446b48c38ed504f79475fac",
+ "zh:7aabe944565753b5164257b9b5c08e99fd8752ab8d8668d55407be16b8f19fe6",
+ "zh:8c03e4fb7a81df44f457944030873c53091b4cf521cbebaf92bd0b29894fca11",
+ "zh:a96255e7a6d8c6e4ba9e781a6802dbdfdc3a7b831760b17783f6fbb8d2f25988",
+ "zh:b84ecd919f8bd05e01c9705d9a48830bfa4fb5a41416f9f92d61c72f4d75ea6b",
+ "zh:be9d2e0081b170b0f3af36cefa4151b765a57d9b0af7f34f3e4ab7543e95c1f4",
+ "zh:c07fb13527dc183658413d75c8b26c9397418d07a050a8402cdec10108cb926c",
+ "zh:c4867d07b252f158cca12349c764f48414bd79b7c3b1fdb28149bde3338ae698",
+ "zh:c975927c7a5d0f71eb0a4a992a4b3ed9b99884b3108084755e02c671a410a89a",
+ "zh:d88601a036f6cb6c27115efef41f11131dccd6cc9cfa513231d7de2a332a93e4",
+ "zh:e28eb1d63b245079de77b741200fb6f28b5f43b2223df1c1a14ff547470bbcda",
+ ]
+}
diff --git a/infrastructure/production/auth0-prod/auth0-resources.tf b/infrastructure/production/auth0-prod/auth0-resources.tf
new file mode 100644
index 00000000..44ca43ee
--- /dev/null
+++ b/infrastructure/production/auth0-prod/auth0-resources.tf
@@ -0,0 +1,116 @@
+resource "auth0_tenant" "prod_tenant" {
+ friendly_name = "use-miller App (Production)"
+ default_directory = "Username-Password-Authentication"
+}
+
+resource "auth0_client" "frontend_spa_app" {
+ name = "Frontend App"
+ description = "The frontend client application"
+ app_type = "spa"
+ callbacks = ["http://localhost:3000", "http://localhost:3001", "http://localhost"]
+ oidc_conformant = true
+ allowed_origins = ["http://localhost:3000", "http://localhost:3001", "http://localhost"]
+ allowed_logout_urls = ["http://localhost:3000", "http://localhost:3001", "http://localhost"]
+ web_origins = ["http://localhost:3000", "http://localhost:3001", "http://localhost"]
+ token_endpoint_auth_method = "none"
+ grant_types = [
+ "authorization_code",
+ "implicit",
+ "password",
+ "refresh_token"
+ ]
+
+ jwt_configuration {
+ alg = "RS256"
+ }
+ refresh_token {
+ leeway = 0
+ token_lifetime = 2592000
+ rotation_type = "rotating"
+ expiration_type = "expiring"
+ }
+}
+
+resource "auth0_resource_server" "backend_api_app" {
+ name = "Backend API"
+ identifier = "backend-api-audience"
+ signing_alg = "RS256"
+ allow_offline_access = true
+ token_lifetime = 86400
+ skip_consent_for_verifiable_first_party_clients = true
+ enforce_policies = true
+ token_dialect = "access_token_authz"
+
+ scopes {
+ value = "read:own"
+ description = "Read own records"
+ }
+ scopes {
+ value = "read:org"
+ description = "Read all organisation records"
+ }
+ scopes {
+ value = "read:all"
+ description = "Read all records in the system (Super power!)"
+ }
+ scopes {
+ value = "modify:own"
+ description = "Modify own records"
+ }
+ scopes {
+ value = "modify:org"
+ description = "Modify all organisation records"
+ }
+ scopes {
+ value = "modify:all"
+ description = "Modify all records in the system (Super power!)"
+ }
+}
+
+resource "auth0_role" "super_user_role" {
+ name = "SuperUserDeveloper"
+ description = "This role is able to do everything"
+
+ permissions {
+ name = "read:own"
+ resource_server_identifier = auth0_resource_server.backend_api_app.identifier
+ }
+ permissions {
+ name = "read:org"
+ resource_server_identifier = auth0_resource_server.backend_api_app.identifier
+ }
+ permissions {
+ name = "read:all"
+ resource_server_identifier = auth0_resource_server.backend_api_app.identifier
+ }
+ permissions {
+ name = "modify:own"
+ resource_server_identifier = auth0_resource_server.backend_api_app.identifier
+ }
+ permissions {
+ name = "modify:org"
+ resource_server_identifier = auth0_resource_server.backend_api_app.identifier
+ }
+ permissions {
+ name = "modify:all"
+ resource_server_identifier = auth0_resource_server.backend_api_app.identifier
+ }
+}
+
+output "auth0_client_id" {
+ value = auth0_client.frontend_spa_app.client_id
+}
+output "app_auth0_prod_domain" {
+ value = var.app_auth0_prod_domain
+}
+output "app_auth0_prod_management_client_id" {
+ value = var.app_auth0_prod_management_client_id
+}
+output "app_auth0_prod_management_client_secret" {
+ value = var.app_auth0_prod_management_client_secret
+ sensitive = true
+}
+output "auth0_client_secret" {
+ value = auth0_client.frontend_spa_app.client_secret
+ sensitive = true
+}
diff --git a/infrastructure/production/auth0-prod/provider.tf b/infrastructure/production/auth0-prod/provider.tf
new file mode 100644
index 00000000..3b6f3caa
--- /dev/null
+++ b/infrastructure/production/auth0-prod/provider.tf
@@ -0,0 +1,176 @@
+terraform {
+ required_providers {
+ auth0 = {
+ source = "auth0/auth0"
+ }
+ }
+ # You don't need this if you're a solo dev. When you're ready you can create a
+ # digital ocean spaces account and store your terraform state there safely
+ # by doing a terraform init again
+ backend "s3" {
+ endpoint = "https://sfo3.digitaloceanspaces.com/"
+ bucket = "darragh-com"
+ key = "miller-app-terraform-state/apps/use-miller-auth0-prod"
+ region = "us-east-1"
+ skip_credentials_validation = true
+ skip_metadata_api_check = true
+ profile = "digitaloceanspaces-terraform"
+ }
+}
+
+variable "app_auth0_prod_domain" {
+ type = string
+ description = "The auth0 domain for prod account"
+}
+variable "app_auth0_prod_management_client_id" {
+ type = string
+ description = "The auth0 client ID for prod Management API"
+}
+variable "app_auth0_prod_management_client_secret" {
+ type = string
+ sensitive = true
+ description = "The auth0 client secret for prod Management API"
+}
+
+provider "auth0" {
+ domain = var.app_auth0_prod_domain
+ client_id = var.app_auth0_prod_management_client_id
+ client_secret = var.app_auth0_prod_management_client_secret
+ # scopes = ["read:client_grants",
+ # "create:client_grants",
+ # "delete:client_grants",
+ # "update:client_grants",
+ # "read:users",
+ # "update:users",
+ # "delete:users",
+ # "create:users",
+ # "read:users_app_metadata",
+ # "update:users_app_metadata",
+ # "delete:users_app_metadata",
+ # "create:users_app_metadata",
+ # "read:user_custom_blocks",
+ # "create:user_custom_blocks",
+ # "delete:user_custom_blocks",
+ # "create:user_tickets",
+ # "read:clients",
+ # "update:clients",
+ # "delete:clients",
+ # "create:clients",
+ # "read:client_keys",
+ # "update:client_keys",
+ # "delete:client_keys",
+ # "create:client_keys",
+ # "read:connections",
+ # "update:connections",
+ # "delete:connections",
+ # "create:connections",
+ # "read:resource_servers",
+ # "update:resource_servers",
+ # "delete:resource_servers",
+ # "create:resource_servers",
+ # "read:device_credentials",
+ # "update:device_credentials",
+ # "delete:device_credentials",
+ # "create:device_credentials",
+ # "read:rules",
+ # "update:rules",
+ # "delete:rules",
+ # "create:rules",
+ # "read:rules_configs",
+ # "update:rules_configs",
+ # "delete:rules_configs",
+ # "read:hooks",
+ # "update:hooks",
+ # "delete:hooks",
+ # "create:hooks",
+ # "read:actions",
+ # "update:actions",
+ # "delete:actions",
+ # "create:actions",
+ # "read:email_provider",
+ # "update:email_provider",
+ # "delete:email_provider",
+ # "create:email_provider",
+ # "blacklist:tokens",
+ # "read:stats",
+ # "read:insights",
+ # "read:tenant_settings",
+ # "update:tenant_settings",
+ # "read:logs",
+ # "read:logs_users",
+ # "read:shields",
+ # "create:shields",
+ # "update:shields",
+ # "delete:shields",
+ # "read:anomaly_blocks",
+ # "delete:anomaly_blocks",
+ # "update:triggers",
+ # "read:triggers",
+ # "read:grants",
+ # "delete:grants",
+ # "read:guardian_factors",
+ # "update:guardian_factors",
+ # "read:guardian_enrollments",
+ # "delete:guardian_enrollments",
+ # "create:guardian_enrollment_tickets",
+ # "read:user_idp_tokens",
+ # "create:passwords_checking_job",
+ # "delete:passwords_checking_job",
+ # "read:custom_domains",
+ # "delete:custom_domains",
+ # "create:custom_domains",
+ # "update:custom_domains",
+ # "read:email_templates",
+ # "create:email_templates",
+ # "update:email_templates",
+ # "read:mfa_policies",
+ # "update:mfa_policies",
+ # "read:roles",
+ # "create:roles",
+ # "delete:roles",
+ # "update:roles",
+ # "read:prompts",
+ # "update:prompts",
+ # "read:branding",
+ # "update:branding",
+ # "delete:branding",
+ # "read:log_streams",
+ # "create:log_streams",
+ # "delete:log_streams",
+ # "update:log_streams",
+ # "create:signing_keys",
+ # "read:signing_keys",
+ # "update:signing_keys",
+ # "read:limits",
+ # "update:limits",
+ # "create:role_members",
+ # "read:role_members",
+ # "delete:role_members",
+ # "read:entitlements",
+ # "read:attack_protection",
+ # "update:attack_protection",
+ # "read:organizations",
+ # "update:organizations",
+ # "create:organizations",
+ # "delete:organizations",
+ # "create:organization_members",
+ # "read:organization_members",
+ # "delete:organization_members",
+ # "create:organization_connections",
+ # "read:organization_connections",
+ # "update:organization_connections",
+ # "delete:organization_connections",
+ # "create:organization_member_roles",
+ # "read:organization_member_roles",
+ # "delete:organization_member_roles",
+ # "create:organization_invitations",
+ # "read:organization_invitations",
+ # "delete:organization_invitations",
+ # "read:organizations_summary",
+ # "create:actions_log_sessions",
+ # "create:authentication_methods",
+ # "read:authentication_methods",
+ # "update:authentication_methods",
+ # "delete:authentication_methods"
+ # ]
+}
diff --git a/infrastructure/production/auth0-prod/terraform.tfvars.template b/infrastructure/production/auth0-prod/terraform.tfvars.template
new file mode 100644
index 00000000..c0294450
--- /dev/null
+++ b/infrastructure/production/auth0-prod/terraform.tfvars.template
@@ -0,0 +1,3 @@
+app_auth0_dev_domain = "myapp.au.auth0.com"
+app_auth0_dev_management_client_id = "ABC123"
+app_auth0_dev_management_client_secret = "ABC123"
\ No newline at end of file
diff --git a/infrastructure/production/stripe-prod/.gitignore b/infrastructure/production/stripe-prod/.gitignore
new file mode 100644
index 00000000..c5928807
--- /dev/null
+++ b/infrastructure/production/stripe-prod/.gitignore
@@ -0,0 +1,34 @@
+# Local .terraform directories
+**/.terraform/*
+
+# .tfstate files
+*.tfstate
+*.tfstate.*
+
+# Crash log files
+crash.log
+crash.*.log
+
+# Exclude all .tfvars files, which are likely to contain sensitive data, such as
+# password, private keys, and other secrets. These should not be part of version
+# control as they are data points which are potentially sensitive and subject
+# to change depending on the environment.
+*.tfvars
+*.tfvars.json
+
+# Ignore override files as they are usually used to override resources locally and so
+# are not checked in
+override.tf
+override.tf.json
+*_override.tf
+*_override.tf.json
+
+# Include override files you do wish to add to version control using negated pattern
+
+
+# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan
+# example: *tfplan*
+
+# Ignore CLI configuration files
+.terraformrc
+terraform.rc
\ No newline at end of file
diff --git a/infrastructure/production/stripe-prod/.terraform.lock.hcl b/infrastructure/production/stripe-prod/.terraform.lock.hcl
new file mode 100644
index 00000000..7ef3c3b2
--- /dev/null
+++ b/infrastructure/production/stripe-prod/.terraform.lock.hcl
@@ -0,0 +1,23 @@
+# This file is maintained automatically by "terraform init".
+# Manual edits may be lost in future updates.
+
+provider "registry.terraform.io/lukasaron/stripe" {
+ version = "1.6.0"
+ hashes = [
+ "h1:Ito1PlormjkifC7lRtCswDBMtOWaUbfWCbJ/Rah+Bpc=",
+ "zh:05ce12609d4ffe3253b09772ffdfa7772cc8e19483fa9b6f6e2717c4c8cf51ea",
+ "zh:0a181cc4b50f216ce334a05323c66fe318adea777ba7093728e848189b5d2351",
+ "zh:11888aed639cb81f5b9569f43744b716bce0a4bb1e0752bae90b291a3692d9b9",
+ "zh:44b19a6d5ea0cba887839456d7a1fa42e7a7f61da0f89505efbd869d7348b8d3",
+ "zh:48265873fc39e3faa2430f0e54c883d6b4a87a688dc521c3fa3d16fb35a080b7",
+ "zh:4ba6828eeeca0a2cb5e23449e3bf1acbb621c846ee65a9fc36e6513c6ff1d792",
+ "zh:79f4a19c4c3752f529ef691e31d19bdb69cb125f25f70c91235e88cd22aad68d",
+ "zh:95655c37cbc191de764e898de4b60866ece6301c0ee9a1c42aebbfa78ea074dc",
+ "zh:986c6b924b4a7489577beea09abbc4def3e68a8678a5ddee90217245a81156b6",
+ "zh:a89486540d50d180b9836ff0db5b89d8ad3d3ca6b23b11e94ec85ca8924eb180",
+ "zh:a8f4a1dc5fea7eea3548c04eb127fea5cfa76204292b1122a1d271b28a79405a",
+ "zh:dae149d44b8eb19aed8763499600049aafac0e1fcbb6697ac2428439bd38d52f",
+ "zh:f0c4a1f5358c19d7a2a4be66450601a55f925d8853681cc0eea31268613370e1",
+ "zh:f603e6ff64596f22b04968bd07528dc275d05473b379199f2b2b22095abb0471",
+ ]
+}
diff --git a/infrastructure/production/stripe-prod/provider.tf b/infrastructure/production/stripe-prod/provider.tf
new file mode 100644
index 00000000..d00a1a90
--- /dev/null
+++ b/infrastructure/production/stripe-prod/provider.tf
@@ -0,0 +1,59 @@
+terraform {
+ required_providers {
+ stripe = {
+ source = "lukasaron/stripe"
+ }
+ }
+ # You don't need this if you're a solo dev. When you're ready you can create a
+ # digital ocean spaces account and store your terraform state there safely
+ # by doing a terraform init again
+ backend "s3" {
+ endpoint = "https://sfo3.digitaloceanspaces.com/"
+ bucket = "darragh-com"
+ key = "miller-app-terraform-state/apps/use-miller-stripe-prod"
+ region = "us-east-1"
+ skip_credentials_validation = true
+ skip_metadata_api_check = true
+ profile = "digitaloceanspaces-terraform"
+ }
+}
+
+variable "app_stripe_api_token" {
+ type = string
+ sensitive = true
+ description = "The stripe API token"
+}
+variable "app_stripe_webhook_verification_key" {
+ type = string
+ sensitive = true
+ description = "The stripe webhook verification key"
+}
+variable "app_stripe_webhook_url" {
+ type = string
+ sensitive = true
+ description = "The URL in your app to send the webhook to"
+}
+variable "app_stripe_customer_portal_privacy_url" {
+ type = string
+ sensitive = true
+ description = "The url to the privacy policy in your application"
+}
+variable "app_stripe_customer_portal_header" {
+ type = string
+ sensitive = true
+ description = "The text for the header of the customer portal"
+}
+variable "app_stripe_customer_portal_terms_conditions_url" {
+ type = string
+ sensitive = true
+ description = "The url to the terms and conditions in your application"
+}
+variable "app_stripe_customer_portal_return_url" {
+ type = string
+ sensitive = true
+ description = "The url in your app to return to after the customer leaves the stripe portal"
+}
+
+provider "stripe" {
+ api_key = var.app_stripe_api_token
+}
diff --git a/infrastructure/production/stripe-prod/stripe-resources.tf b/infrastructure/production/stripe-prod/stripe-resources.tf
new file mode 100644
index 00000000..49d39054
--- /dev/null
+++ b/infrastructure/production/stripe-prod/stripe-resources.tf
@@ -0,0 +1,117 @@
+resource "stripe_product" "regular_product" {
+ name = "A Regular product"
+ description = "Web product kit with 1 year of updates"
+ shippable = false
+ active = true
+}
+
+resource "stripe_price" "regular_price" {
+ product = stripe_product.regular_product.id
+ unit_amount = 34900
+ currency = "usd"
+ recurring {
+ interval = "year"
+ interval_count = 1
+ usage_type = "licensed"
+ }
+ billing_scheme = "per_unit"
+ tax_behaviour = "inclusive"
+}
+
+resource "stripe_webhook_endpoint" "webhook_endpoint" {
+ url = var.app_stripe_webhook_url
+ disabled = false
+ enabled_events = [
+ "checkout.session.completed",
+ "checkout.session.async_payment_succeeded",
+ "checkout.session.async_payment_failed",
+ "charge.succeeded",
+ "payment_intent.succeeded",
+ "payment_intent.created",
+ "invoice.paid",
+ "customer.subscription.trial_will_end",
+ "invoice.payment_failed",
+ "customer.subscription.created",
+ "customer.subscription.deleted",
+ "customer.subscription.updated",
+ ]
+}
+
+resource "stripe_portal_configuration" "portal_configuration" {
+ business_profile {
+ headline = var.app_stripe_customer_portal_header
+ privacy_policy_url = var.app_stripe_customer_portal_privacy_url
+ terms_of_service_url = var.app_stripe_customer_portal_terms_conditions_url
+ }
+ default_return_url = var.app_stripe_customer_portal_return_url
+ features {
+ customer_update {
+ enabled = true
+ allowed_updates = ["email", "address", "shipping", "phone", "tax_id"]
+ }
+ invoice_history {
+ enabled = true
+ }
+ payment_method_update {
+ enabled = true
+ }
+ subscription_cancel {
+ enabled = true
+ cancellation_reason {
+ enabled = true
+ options = ["too_expensive", "missing_features", "switched_service", "unused", "customer_service", "too_complex", "low_quality", "other"]
+ }
+ mode = "at_period_end"
+ proration_behavior = "none"
+ }
+ subscription_pause {
+ enabled = true
+ }
+ subscription_update {
+ enabled = true
+ default_allowed_updates = ["price", "quantity", "promotion_code"]
+ proration_behavior = "none"
+ products {
+ product = stripe_product.regular_product.id
+ prices = [stripe_price.regular_price.id]
+ }
+ }
+ }
+}
+
+output "regular_price_id" {
+ value = stripe_price.regular_price.id
+ sensitive = false
+}
+
+output "app_stripe_webhook_verification_key" {
+ value = var.app_stripe_webhook_verification_key
+ sensitive = true
+}
+
+output "app_stripe_api_token" {
+ value = var.app_stripe_api_token
+ sensitive = true
+}
+
+# we output all the variables so that we can restore them from the state store
+output "app_stripe_customer_portal_header" {
+ value = var.app_stripe_customer_portal_header
+ sensitive = true
+}
+output "app_stripe_webhook_url" {
+ value = var.app_stripe_webhook_url
+ sensitive = true
+}
+output "app_stripe_customer_portal_privacy_url" {
+ value = var.app_stripe_customer_portal_privacy_url
+ sensitive = true
+}
+output "app_stripe_customer_portal_terms_conditions_url" {
+ value = var.app_stripe_customer_portal_terms_conditions_url
+ sensitive = true
+}
+output "app_stripe_customer_portal_return_url" {
+ value = var.app_stripe_customer_portal_return_url
+ sensitive = true
+}
diff --git a/infrastructure/production/stripe-prod/terraform.tfvars.template b/infrastructure/production/stripe-prod/terraform.tfvars.template
new file mode 100644
index 00000000..9b8bf183
--- /dev/null
+++ b/infrastructure/production/stripe-prod/terraform.tfvars.template
@@ -0,0 +1,7 @@
+app_stripe_api_token = "thetoken"
+app_stripe_webhook_verification_key = "the key"
+app_stripe_webhook_url = "http://localhost:34522/payments/stripe/webhook-receiver"
+app_stripe_customer_portal_privacy_url = "http://localhost:3001/privacy"
+app_stripe_customer_portal_header = "Use Miller Billing"
+app_stripe_customer_portal_terms_conditions_url = "http://localhost:3001/termsconditions"
+app_stripe_customer_portal_return_url = "http://localhost:3000/profile"
\ No newline at end of file
diff --git a/libs/shared-frontend-tooling/dist/index.d.ts b/libs/shared-frontend-tooling/dist/index.d.ts
index 088895d6..51d833c6 100644
--- a/libs/shared-frontend-tooling/dist/index.d.ts
+++ b/libs/shared-frontend-tooling/dist/index.d.ts
@@ -1,2 +1,3 @@
export * from "./api";
export * from "./components";
+export * from "./themeColors";
diff --git a/libs/shared-frontend-tooling/dist/index.js b/libs/shared-frontend-tooling/dist/index.js
index 9c047bc4..9063b77e 100644
--- a/libs/shared-frontend-tooling/dist/index.js
+++ b/libs/shared-frontend-tooling/dist/index.js
@@ -1,3 +1,4 @@
export * from "./api";
export * from "./components";
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxPQUFPLENBQUM7QUFDdEIsY0FBYyxjQUFjLENBQUMifQ==
\ No newline at end of file
+export * from "./themeColors";
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxPQUFPLENBQUM7QUFDdEIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxlQUFlLENBQUMifQ==
\ No newline at end of file
diff --git a/libs/shared-frontend-tooling/dist/themeColors.d.ts b/libs/shared-frontend-tooling/dist/themeColors.d.ts
new file mode 100644
index 00000000..59359835
--- /dev/null
+++ b/libs/shared-frontend-tooling/dist/themeColors.d.ts
@@ -0,0 +1,50 @@
+export declare const colorVariants: {
+ green: {
+ hoverShadow: string;
+ hoverFocusRing: string;
+ foreground: string;
+ background: string;
+ hoverForeground: string;
+ hoverBackground: string;
+ };
+ red: {
+ hoverFocusRing: string;
+ hoverShadow: string;
+ foreground: string;
+ background: string;
+ hoverForeground: string;
+ hoverBackground: string;
+ };
+ amber: {
+ hoverFocusRing: string;
+ hoverShadow: string;
+ foreground: string;
+ background: string;
+ hoverForeground: string;
+ hoverBackground: string;
+ };
+ cyan: {
+ hoverFocusRing: string;
+ hoverShadow: string;
+ foreground: string;
+ background: string;
+ hoverForeground: string;
+ hoverBackground: string;
+ };
+ violet: {
+ hoverFocusRing: string;
+ hoverShadow: string;
+ foreground: string;
+ background: string;
+ hoverForeground: string;
+ hoverBackground: string;
+ };
+ pink: {
+ hoverFocusRing: string;
+ hoverShadow: string;
+ foreground: string;
+ background: string;
+ hoverForeground: string;
+ hoverBackground: string;
+ };
+};
diff --git a/libs/shared-frontend-tooling/dist/themeColors.js b/libs/shared-frontend-tooling/dist/themeColors.js
new file mode 100644
index 00000000..be67a7da
--- /dev/null
+++ b/libs/shared-frontend-tooling/dist/themeColors.js
@@ -0,0 +1,51 @@
+export const colorVariants = {
+ green: {
+ hoverShadow: "hover:shadow-green-500/30",
+ hoverFocusRing: "focus:ring-green-400",
+ foreground: "text-green-500",
+ background: "bg-green-500",
+ hoverForeground: "hover:text-green-500",
+ hoverBackground: "hover:bg-green-600",
+ },
+ red: {
+ hoverFocusRing: "focus:ring-red-400",
+ hoverShadow: "hover:shadow-red-500/30",
+ foreground: "text-red-500",
+ background: "bg-red-500",
+ hoverForeground: "hover:text-red-500",
+ hoverBackground: "hover:bg-red-600",
+ },
+ amber: {
+ hoverFocusRing: "focus:ring-amber-400",
+ hoverShadow: "hover:shadow-amber-500/30",
+ foreground: "text-amber-500",
+ background: "bg-amber-500",
+ hoverForeground: "hover:text-amber-500",
+ hoverBackground: "hover:bg-amber-600",
+ },
+ cyan: {
+ hoverFocusRing: "focus:ring-cyan-400",
+ hoverShadow: "hover:shadow-cyan-500/30",
+ foreground: "text-cyan-500",
+ background: "bg-cyan-500",
+ hoverForeground: "hover:text-cyan-500",
+ hoverBackground: "hover:bg-cyan-600",
+ },
+ violet: {
+ hoverFocusRing: "focus:ring-violet-400",
+ hoverShadow: "hover:shadow-violet-500/30",
+ foreground: "text-violet-500",
+ background: "bg-violet-500",
+ hoverForeground: "hover:text-violet-500",
+ hoverBackground: "hover:bg-violet-600",
+ },
+ pink: {
+ hoverFocusRing: "focus:ring-pink-400",
+ hoverShadow: "hover:shadow-pink-500/30",
+ foreground: "text-pink-500",
+ background: "bg-pink-500",
+ hoverForeground: "hover:text-pink-500",
+ hoverBackground: "hover:bg-pink-600",
+ },
+};
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWVDb2xvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdGhlbWVDb2xvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHO0lBQ3pCLEtBQUssRUFBRTtRQUNILFdBQVcsRUFBRSwyQkFBMkI7UUFDeEMsY0FBYyxFQUFFLHNCQUFzQjtRQUN0QyxVQUFVLEVBQUUsZ0JBQWdCO1FBQzVCLFVBQVUsRUFBRSxjQUFjO1FBQzFCLGVBQWUsRUFBRSxzQkFBc0I7UUFDdkMsZUFBZSxFQUFFLG9CQUFvQjtLQUN4QztJQUNELEdBQUcsRUFBRTtRQUNELGNBQWMsRUFBRSxvQkFBb0I7UUFDcEMsV0FBVyxFQUFFLHlCQUF5QjtRQUN0QyxVQUFVLEVBQUUsY0FBYztRQUMxQixVQUFVLEVBQUUsWUFBWTtRQUN4QixlQUFlLEVBQUUsb0JBQW9CO1FBQ3JDLGVBQWUsRUFBRSxrQkFBa0I7S0FDdEM7SUFDRCxLQUFLLEVBQUU7UUFDSCxjQUFjLEVBQUUsc0JBQXNCO1FBQ3RDLFdBQVcsRUFBRSwyQkFBMkI7UUFDeEMsVUFBVSxFQUFFLGdCQUFnQjtRQUM1QixVQUFVLEVBQUUsY0FBYztRQUMxQixlQUFlLEVBQUUsc0JBQXNCO1FBQ3ZDLGVBQWUsRUFBRSxvQkFBb0I7S0FDeEM7SUFDRCxJQUFJLEVBQUU7UUFDRixjQUFjLEVBQUUscUJBQXFCO1FBQ3JDLFdBQVcsRUFBRSwwQkFBMEI7UUFDdkMsVUFBVSxFQUFFLGVBQWU7UUFDM0IsVUFBVSxFQUFFLGFBQWE7UUFDekIsZUFBZSxFQUFFLHFCQUFxQjtRQUN0QyxlQUFlLEVBQUUsbUJBQW1CO0tBQ3ZDO0lBQ0QsTUFBTSxFQUFFO1FBQ0osY0FBYyxFQUFFLHVCQUF1QjtRQUN2QyxXQUFXLEVBQUUsNEJBQTRCO1FBQ3pDLFVBQVUsRUFBRSxpQkFBaUI7UUFDN0IsVUFBVSxFQUFFLGVBQWU7UUFDM0IsZUFBZSxFQUFFLHVCQUF1QjtRQUN4QyxlQUFlLEVBQUUscUJBQXFCO0tBQ3pDO0lBQ0QsSUFBSSxFQUFFO1FBQ0YsY0FBYyxFQUFFLHFCQUFxQjtRQUNyQyxXQUFXLEVBQUUsMEJBQTBCO1FBQ3ZDLFVBQVUsRUFBRSxlQUFlO1FBQzNCLFVBQVUsRUFBRSxhQUFhO1FBQ3pCLGVBQWUsRUFBRSxxQkFBcUI7UUFDdEMsZUFBZSxFQUFFLG1CQUFtQjtLQUN2QztDQUNKLENBQUMifQ==
\ No newline at end of file
diff --git a/libs/shared-frontend-tooling/src/index.ts b/libs/shared-frontend-tooling/src/index.ts
index 088895d6..51d833c6 100644
--- a/libs/shared-frontend-tooling/src/index.ts
+++ b/libs/shared-frontend-tooling/src/index.ts
@@ -1,2 +1,3 @@
export * from "./api";
export * from "./components";
+export * from "./themeColors";
diff --git a/libs/shared-frontend-tooling/src/themeColors.ts b/libs/shared-frontend-tooling/src/themeColors.ts
new file mode 100644
index 00000000..4fcf56b2
--- /dev/null
+++ b/libs/shared-frontend-tooling/src/themeColors.ts
@@ -0,0 +1,50 @@
+export const colorVariants = {
+ green: {
+ hoverShadow: "hover:shadow-green-500/30",
+ hoverFocusRing: "focus:ring-green-400",
+ foreground: "text-green-500",
+ background: "bg-green-500",
+ hoverForeground: "hover:text-green-500",
+ hoverBackground: "hover:bg-green-600",
+ },
+ red: {
+ hoverFocusRing: "focus:ring-red-400",
+ hoverShadow: "hover:shadow-red-500/30",
+ foreground: "text-red-500",
+ background: "bg-red-500",
+ hoverForeground: "hover:text-red-500",
+ hoverBackground: "hover:bg-red-600",
+ },
+ amber: {
+ hoverFocusRing: "focus:ring-amber-400",
+ hoverShadow: "hover:shadow-amber-500/30",
+ foreground: "text-amber-500",
+ background: "bg-amber-500",
+ hoverForeground: "hover:text-amber-500",
+ hoverBackground: "hover:bg-amber-600",
+ },
+ cyan: {
+ hoverFocusRing: "focus:ring-cyan-400",
+ hoverShadow: "hover:shadow-cyan-500/30",
+ foreground: "text-cyan-500",
+ background: "bg-cyan-500",
+ hoverForeground: "hover:text-cyan-500",
+ hoverBackground: "hover:bg-cyan-600",
+ },
+ violet: {
+ hoverFocusRing: "focus:ring-violet-400",
+ hoverShadow: "hover:shadow-violet-500/30",
+ foreground: "text-violet-500",
+ background: "bg-violet-500",
+ hoverForeground: "hover:text-violet-500",
+ hoverBackground: "hover:bg-violet-600",
+ },
+ pink: {
+ hoverFocusRing: "focus:ring-pink-400",
+ hoverShadow: "hover:shadow-pink-500/30",
+ foreground: "text-pink-500",
+ background: "bg-pink-500",
+ hoverForeground: "hover:text-pink-500",
+ hoverBackground: "hover:bg-pink-600",
+ },
+};
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 837ab45e..b57d12d7 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -72,7 +72,7 @@ importers:
apps/backend:
specifiers:
'@darraghor/eslint-plugin-nestjs-typed': 3.18.1
- '@darraghor/nest-backend-libs': link:../../../nest-backend-libs
+ '@darraghor/nest-backend-libs': 2.21.4
'@nestjs/bull': 0.6.3
'@nestjs/cli': 9.2.0
'@nestjs/common': 9.3.9
@@ -134,7 +134,7 @@ importers:
typeorm: 0.3.12
typescript: 4.9.5
dependencies:
- '@darraghor/nest-backend-libs': link:../../../nest-backend-libs
+ '@darraghor/nest-backend-libs': 2.21.4_726vgeczvuu3wre5b4a3qsow2y
'@nestjs/bull': 0.6.3_jsdxn6vypp2tcyo3cxrak5wh2u
'@nestjs/cli': 9.2.0
'@nestjs/common': 9.3.9_welcnyot5bzd5wa2aovbkxpi4i
@@ -388,6 +388,7 @@ importers:
specifiers:
'@auth0/nextjs-auth0': 2.2.1
'@headlessui/react': 1.7.12
+ '@heroicons/react': 2.0.16
'@nrwl/eslint-plugin-nx': 15.7.2
'@nrwl/jest': 15.7.2
'@nrwl/linter': 15.7.2
@@ -424,6 +425,7 @@ importers:
dependencies:
'@auth0/nextjs-auth0': 2.2.1_next@13.2.1
'@headlessui/react': 1.7.12_biqbaboplfbrettd7655fr4n2y
+ '@heroicons/react': 2.0.16_react@18.2.0
'@tailwindcss/forms': 0.5.3_tailwindcss@3.2.7
'@use-miller/shared-api-client': link:../../libs/shared-api-client
'@use-miller/shared-frontend-tooling': link:../../libs/shared-frontend-tooling
@@ -2437,6 +2439,93 @@ packages:
- typescript
dev: true
+ /@darraghor/nest-backend-libs/2.21.4_726vgeczvuu3wre5b4a3qsow2y:
+ resolution: {integrity: sha512-uWwrOSaDOXpNwAciERlhoVz0POBcZuphShSUkQGiucVVrXMoJQZCDSwze6MMrHWLfDqDzQYx7hjeqOzeC2tSfA==}
+ engines: {node: '>=18'}
+ hasBin: true
+ peerDependencies:
+ '@nestjs/common': ^9.0.0
+ '@nestjs/config': ^2.2.0
+ '@nestjs/core': ^9.0.0
+ '@nestjs/passport': ^9.0.0
+ '@nestjs/platform-express': ^9.0.0
+ '@nestjs/swagger': ^6.0.0
+ '@nestjs/typeorm': ^9.0.0
+ dependencies:
+ '@nestjs/axios': 2.0.0_jrq2rdgfp2sx67wmylmrqliwxe
+ '@nestjs/common': 9.3.9_welcnyot5bzd5wa2aovbkxpi4i
+ '@nestjs/config': 2.3.1_jrq2rdgfp2sx67wmylmrqliwxe
+ '@nestjs/core': 9.3.9_q6agyr4hwia55oswpsa7zjxcpm
+ '@nestjs/microservices': 9.3.9_xap76i5unmrgcq3fgd6nhqgyvy
+ '@nestjs/passport': 9.0.3_v3ijvyhfbmibt6kvwmic262qla
+ '@nestjs/platform-express': 9.3.9_77foi4w27ghy47yutmnzv7krjy
+ '@nestjs/swagger': 6.2.1_ldzmua2hsw2tga2e42i6lmmdty
+ '@nestjs/terminus': 9.2.0_hcxpoxfqgl64svbrwd2exr6vjy
+ '@nestjs/typeorm': 9.0.1_rfqdnwiybzocqbxtj3lzfvraga
+ auth0: 3.2.0
+ bull: 4.10.4
+ chalk: 5.2.0
+ class-transformer: 0.5.1
+ class-validator: 0.14.0
+ date-fns: 2.29.3
+ dotenv: 16.0.3
+ helmet: 6.0.1
+ jwks-rsa: 3.0.1
+ nestjs-pino: 3.1.2_atacoy3e24brwbzjtinj7jrj3e
+ nodemailer: 6.9.1
+ passport: 0.6.0
+ passport-jwt: 4.0.1
+ pg: 8.9.0
+ pino-http: 8.3.3
+ pino-pretty: 9.2.0
+ reflect-metadata: 0.1.13
+ res: 0.4.0
+ resource: 0.8.1
+ rimraf: 4.1.2
+ rxjs: 7.8.0
+ stripe: 11.10.0
+ swagger-ui-express: 4.6.0
+ twitter-api-v2: 1.14.1
+ typeorm: 0.3.12_pg@8.9.0+ts-node@10.9.1
+ transitivePeerDependencies:
+ - '@google-cloud/spanner'
+ - '@grpc/grpc-js'
+ - '@grpc/proto-loader'
+ - '@mikro-orm/core'
+ - '@mikro-orm/nestjs'
+ - '@nestjs/mongoose'
+ - '@nestjs/sequelize'
+ - '@nestjs/websockets'
+ - '@sap/hana-client'
+ - amqp-connection-manager
+ - amqplib
+ - axios
+ - better-sqlite3
+ - cache-manager
+ - debug
+ - express
+ - hdb-pool
+ - ioredis
+ - kafkajs
+ - mongodb
+ - mongoose
+ - mqtt
+ - mssql
+ - mysql2
+ - nats
+ - oracledb
+ - pg-native
+ - pg-query-stream
+ - redis
+ - sequelize
+ - sql.js
+ - sqlite3
+ - superagent-proxy
+ - supports-color
+ - ts-node
+ - typeorm-aurora-data-api-driver
+ dev: false
+
/@es-joy/jsdoccomment/0.36.1:
resolution: {integrity: sha512-922xqFsTpHs6D0BUiG4toiyPOMc8/jafnWKxz1KWgS4XzKPy2qXf1Pe6UFuNSCQqt6tOuhAWXBNuuyUhJmw9Vg==}
engines: {node: ^14 || ^16 || ^17 || ^18 || ^19}
@@ -3336,6 +3425,19 @@ packages:
requiresBuild: true
optional: true
+ /@nestjs/axios/2.0.0_jrq2rdgfp2sx67wmylmrqliwxe:
+ resolution: {integrity: sha512-F6oceoQLEn031uun8NiommeMkRIojQqVryxQy/mK7fx0CI0KbgkJL3SloCQcsOD+agoEnqKJKXZpEvL6FNswJg==}
+ peerDependencies:
+ '@nestjs/common': ^7.0.0 || ^8.0.0 || ^9.0.0
+ axios: ^1.3.1
+ reflect-metadata: ^0.1.12
+ rxjs: ^6.0.0 || ^7.0.0
+ dependencies:
+ '@nestjs/common': 9.3.9_welcnyot5bzd5wa2aovbkxpi4i
+ reflect-metadata: 0.1.13
+ rxjs: 7.8.0
+ dev: false
+
/@nestjs/bull-shared/0.1.3_77foi4w27ghy47yutmnzv7krjy:
resolution: {integrity: sha512-K0a1ERpnl/ZnTmm0UtYSSClDlDkQwNNwJYM6PogzpeflD64oqwVIn8Pj8rdS+BOYUxqdDy55q3p67ytO5oaVDA==}
peerDependencies:
@@ -3486,6 +3588,50 @@ packages:
reflect-metadata: 0.1.13
dev: false
+ /@nestjs/microservices/9.3.9_xap76i5unmrgcq3fgd6nhqgyvy:
+ resolution: {integrity: sha512-G4EsQpOS3l2dWjJID+z/YyDPTx+SEq/5YQ/cC8XV9Hap1S0rEmo+Z1R2OdlUt+ZnkcJp7H0GIHiB0EjaYanmjA==}
+ peerDependencies:
+ '@grpc/grpc-js': '*'
+ '@nestjs/common': ^9.0.0
+ '@nestjs/core': ^9.0.0
+ '@nestjs/websockets': ^9.0.0
+ amqp-connection-manager: '*'
+ amqplib: '*'
+ cache-manager: '*'
+ ioredis: '*'
+ kafkajs: '*'
+ mqtt: '*'
+ nats: '*'
+ reflect-metadata: ^0.1.12
+ rxjs: ^7.1.0
+ peerDependenciesMeta:
+ '@grpc/grpc-js':
+ optional: true
+ '@nestjs/websockets':
+ optional: true
+ amqp-connection-manager:
+ optional: true
+ amqplib:
+ optional: true
+ cache-manager:
+ optional: true
+ ioredis:
+ optional: true
+ kafkajs:
+ optional: true
+ mqtt:
+ optional: true
+ nats:
+ optional: true
+ dependencies:
+ '@nestjs/common': 9.3.9_welcnyot5bzd5wa2aovbkxpi4i
+ '@nestjs/core': 9.3.9_q6agyr4hwia55oswpsa7zjxcpm
+ iterare: 1.2.1
+ reflect-metadata: 0.1.13
+ rxjs: 7.8.0
+ tslib: 2.5.0
+ dev: false
+
/@nestjs/passport/9.0.3_v3ijvyhfbmibt6kvwmic262qla:
resolution: {integrity: sha512-HplSJaimEAz1IOZEu+pdJHHJhQyBOPAYWXYHfAPQvRqWtw4FJF1VXl1Qtk9dcXQX1eKytDtH+qBzNQc19GWNEg==}
peerDependencies:
@@ -3571,6 +3717,63 @@ packages:
swagger-ui-dist: 4.15.5
dev: false
+ /@nestjs/terminus/9.2.0_hcxpoxfqgl64svbrwd2exr6vjy:
+ resolution: {integrity: sha512-U3UR3qv3qY1i47JLxGQZfV8qkS4jlCtMWf/BJrUowSjNkBV/EkwOL9sUTHOROHPsEBZKjR6Ekwh9ymFARNhrfg==}
+ peerDependencies:
+ '@grpc/grpc-js': '*'
+ '@grpc/proto-loader': '*'
+ '@mikro-orm/core': '*'
+ '@mikro-orm/nestjs': '*'
+ '@nestjs/axios': '*'
+ '@nestjs/common': 9.x
+ '@nestjs/core': 9.x
+ '@nestjs/microservices': '*'
+ '@nestjs/mongoose': '*'
+ '@nestjs/sequelize': '*'
+ '@nestjs/typeorm': '*'
+ mongoose: '*'
+ reflect-metadata: 0.1.x
+ rxjs: 7.x
+ sequelize: '*'
+ typeorm: '*'
+ peerDependenciesMeta:
+ '@grpc/grpc-js':
+ optional: true
+ '@grpc/proto-loader':
+ optional: true
+ '@mikro-orm/core':
+ optional: true
+ '@mikro-orm/nestjs':
+ optional: true
+ '@nestjs/axios':
+ optional: true
+ '@nestjs/microservices':
+ optional: true
+ '@nestjs/mongoose':
+ optional: true
+ '@nestjs/sequelize':
+ optional: true
+ '@nestjs/typeorm':
+ optional: true
+ mongoose:
+ optional: true
+ sequelize:
+ optional: true
+ typeorm:
+ optional: true
+ dependencies:
+ '@nestjs/axios': 2.0.0_jrq2rdgfp2sx67wmylmrqliwxe
+ '@nestjs/common': 9.3.9_welcnyot5bzd5wa2aovbkxpi4i
+ '@nestjs/core': 9.3.9_q6agyr4hwia55oswpsa7zjxcpm
+ '@nestjs/microservices': 9.3.9_xap76i5unmrgcq3fgd6nhqgyvy
+ '@nestjs/typeorm': 9.0.1_rfqdnwiybzocqbxtj3lzfvraga
+ boxen: 5.1.2
+ check-disk-space: 3.3.1
+ reflect-metadata: 0.1.13
+ rxjs: 7.8.0
+ typeorm: 0.3.12_pg@8.9.0+ts-node@10.9.1
+ dev: false
+
/@nestjs/testing/9.3.9_yqmogfxzeu633isbftgaoi4ho4:
resolution: {integrity: sha512-+mPvSVvSC2SAkYgZZv1mOI2xsdGc1pmq7/sem7iin/JDoFtlvoGSK+pfZHD3IV3EpYtq1v/8/5gi+UFH9yZnDg==}
peerDependencies:
@@ -5637,6 +5840,13 @@ packages:
resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
dev: true
+ /abort-controller/3.0.0:
+ resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
+ engines: {node: '>=6.5'}
+ dependencies:
+ event-target-shim: 5.0.1
+ dev: false
+
/accepts/1.3.8:
resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
engines: {node: '>= 0.6'}
@@ -5785,6 +5995,12 @@ packages:
require-from-string: 2.0.2
uri-js: 4.4.1
+ /ansi-align/3.0.1:
+ resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
+ dependencies:
+ string-width: 4.2.3
+ dev: false
+
/ansi-colors/4.1.3:
resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
engines: {node: '>=6'}
@@ -6036,6 +6252,11 @@ packages:
hasBin: true
dev: true
+ /atomic-sleep/1.0.0:
+ resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
+ engines: {node: '>=8.0.0'}
+ dev: false
+
/auth0/3.2.0:
resolution: {integrity: sha512-yc0SWBYKD097X21d0vCc1NDrhCi+OM96/VlziDJeYMv6OlfUJPyWf8u9pthMkQxjmvq+BKu2fwxoMXDx0XRdUQ==}
engines: {node: '>=14'}
@@ -6486,6 +6707,20 @@ packages:
hoek: 0.9.1
dev: false
+ /boxen/5.1.2:
+ resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-align: 3.0.1
+ camelcase: 6.3.0
+ chalk: 4.1.2
+ cli-boxes: 2.2.1
+ string-width: 4.2.3
+ type-fest: 0.20.2
+ widest-line: 3.1.0
+ wrap-ansi: 7.0.0
+ dev: false
+
/brace-expansion/1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
dependencies:
@@ -6674,7 +6909,6 @@ packages:
/camelcase/6.3.0:
resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
engines: {node: '>=10'}
- dev: true
/caniuse-api/3.0.0:
resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==}
@@ -6737,7 +6971,6 @@ packages:
/chalk/5.2.0:
resolution: {integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==}
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
- dev: true
/change-case/2.3.1:
resolution: {integrity: sha512-3HE5jrTqqn9jeKzD0+yWi7FU4OMicLbwB57ph4bpwEn5jGi3hZug5WjZjnBD2RY7YyTKAAck86ACfShXUWJKLg==}
@@ -6768,6 +7001,11 @@ packages:
/chardet/0.7.0:
resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
+ /check-disk-space/3.3.1:
+ resolution: {integrity: sha512-iOrT8yCZjSnyNZ43476FE2rnssvgw5hnuwOM0hm8Nj1qa0v4ieUUEbCyxxsEliaoDUb/75yCOL71zkDiDBLbMQ==}
+ engines: {node: '>=12'}
+ dev: false
+
/check-error/1.0.2:
resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==}
dev: true
@@ -6835,6 +7073,11 @@ packages:
engines: {node: '>=6'}
dev: true
+ /cli-boxes/2.2.1:
+ resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==}
+ engines: {node: '>=6'}
+ dev: false
+
/cli-cursor/2.1.0:
resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==}
engines: {node: '>=4'}
@@ -6999,7 +7242,6 @@ packages:
/colorette/2.0.19:
resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==}
- dev: true
/columnify/1.6.0:
resolution: {integrity: sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==}
@@ -7632,6 +7874,10 @@ packages:
resolution: {integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==}
dev: true
+ /dateformat/4.6.3:
+ resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==}
+ dev: false
+
/debug/0.7.4:
resolution: {integrity: sha512-EohAb3+DSHSGx8carOSKJe8G0ayV5/i609OD0J2orCkuyae7SyZSz2aoLmQF2s0Pj5gITDebwPH7GFBlqOUQ1Q==}
peerDependencies:
@@ -9048,6 +9294,11 @@ packages:
resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
engines: {node: '>= 0.6'}
+ /event-target-shim/5.0.1:
+ resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
+ engines: {node: '>=6'}
+ dev: false
+
/eventemitter3/4.0.7:
resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
dev: true
@@ -9189,6 +9440,10 @@ packages:
iconv-lite: 0.4.24
tmp: 0.0.33
+ /fast-copy/3.0.1:
+ resolution: {integrity: sha512-Knr7NOtK3HWRYGtHoJrjkaWepqT8thIVGAwt0p0aUs1zqkAzXZV4vo9fFNwyb5fcqK1GKYFYxldQdIDVKhUAfA==}
+ dev: false
+
/fast-deep-equal/3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
@@ -9220,6 +9475,11 @@ packages:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
dev: true
+ /fast-redact/3.1.2:
+ resolution: {integrity: sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw==}
+ engines: {node: '>=6'}
+ dev: false
+
/fast-safe-stringify/2.1.1:
resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==}
@@ -9975,6 +10235,18 @@ packages:
sntp: 0.2.4
dev: false
+ /helmet/6.0.1:
+ resolution: {integrity: sha512-8wo+VdQhTMVBMCITYZaGTbE4lvlthelPYSvoyNvk4RECTmrVjMerp9RfUOQXZWLvCcAn1pKj7ZRxK4lI9Alrcw==}
+ engines: {node: '>=14.0.0'}
+ dev: false
+
+ /help-me/4.2.0:
+ resolution: {integrity: sha512-TAOnTB8Tz5Dw8penUuzHVrKNKlCIbwwbHnXraNJxPwf8LRtE2HlM84RYuezMFcwOJmoYOCWVDyJ8TQGxn9PgxA==}
+ dependencies:
+ glob: 8.1.0
+ readable-stream: 3.6.1
+ dev: false
+
/hexoid/1.0.0:
resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==}
engines: {node: '>=8'}
@@ -11804,6 +12076,11 @@ packages:
resolution: {integrity: sha512-njj0VL2TsIxCtgzhO+9RRobBvws4oYyCM8TpvoUQwl/MbIM3NFJRR9+e6x0sS5xXaP1t6OCBkaBME98OV9zU5A==}
dev: false
+ /joycon/3.1.1:
+ resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
+ engines: {node: '>=10'}
+ dev: false
+
/js-sdsl/4.3.0:
resolution: {integrity: sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==}
dev: true
@@ -12948,6 +13225,18 @@ packages:
/neo-async/2.6.2:
resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
+ /nestjs-pino/3.1.2_atacoy3e24brwbzjtinj7jrj3e:
+ resolution: {integrity: sha512-Rxt9v/OlHwurE2GPyBlHVjzCLCnxIPxGa+Esligij412zEcqqB6kka5MhKAk3l61u1jyTLx3Mzol+HQrR6/f9w==}
+ engines: {node: '>= 14'}
+ requiresBuild: true
+ peerDependencies:
+ '@nestjs/common': ^8.0.0 || ^9.0.0
+ pino-http: ^6.4.0 || ^7.0.0 || ^8.0.0
+ dependencies:
+ '@nestjs/common': 9.3.9_welcnyot5bzd5wa2aovbkxpi4i
+ pino-http: 8.3.3
+ dev: false
+
/next/13.2.1_biqbaboplfbrettd7655fr4n2y:
resolution: {integrity: sha512-qhgJlDtG0xidNViJUPeQHLGJJoT4zDj/El7fP3D3OzpxJDUfxsm16cK4WTMyvSX1ciIfAq05u+0HqFAa+VJ+Hg==}
engines: {node: '>=14.6.0'}
@@ -13419,6 +13708,10 @@ packages:
engines: {node: ^10.13.0 || >=12.0.0}
dev: false
+ /on-exit-leak-free/2.1.0:
+ resolution: {integrity: sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==}
+ dev: false
+
/on-finished/2.4.1:
resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
engines: {node: '>= 0.8'}
@@ -13953,6 +14246,63 @@ packages:
engines: {node: '>=10'}
dev: true
+ /pino-abstract-transport/1.0.0:
+ resolution: {integrity: sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==}
+ dependencies:
+ readable-stream: 4.3.0
+ split2: 4.1.0
+ dev: false
+
+ /pino-http/8.3.3:
+ resolution: {integrity: sha512-p4umsNIXXVu95HD2C8wie/vXH7db5iGRpc+yj1/ZQ3sRtTQLXNjoS6Be5+eI+rQbqCRxen/7k/KSN+qiZubGDw==}
+ dependencies:
+ get-caller-file: 2.0.5
+ pino: 8.11.0
+ pino-std-serializers: 6.1.0
+ process-warning: 2.1.0
+ dev: false
+
+ /pino-pretty/9.2.0:
+ resolution: {integrity: sha512-7CeszmFqrUD08+JvtYcFXowNE7duFlE1XScmR41qTMbwQOhn7gijYYrRb5udH+z8xq4+A8vN8rQNYVPCTfzmGw==}
+ hasBin: true
+ dependencies:
+ colorette: 2.0.19
+ dateformat: 4.6.3
+ fast-copy: 3.0.1
+ fast-safe-stringify: 2.1.1
+ help-me: 4.2.0
+ joycon: 3.1.1
+ minimist: 1.2.8
+ on-exit-leak-free: 2.1.0
+ pino-abstract-transport: 1.0.0
+ pump: 3.0.0
+ readable-stream: 4.3.0
+ secure-json-parse: 2.7.0
+ sonic-boom: 3.2.1
+ strip-json-comments: 3.1.1
+ dev: false
+
+ /pino-std-serializers/6.1.0:
+ resolution: {integrity: sha512-KO0m2f1HkrPe9S0ldjx7za9BJjeHqBku5Ch8JyxETxT8dEFGz1PwgrHaOQupVYitpzbFSYm7nnljxD8dik2c+g==}
+ dev: false
+
+ /pino/8.11.0:
+ resolution: {integrity: sha512-Z2eKSvlrl2rH8p5eveNUnTdd4AjJk8tAsLkHYZQKGHP4WTh2Gi1cOSOs3eWPqaj+niS3gj4UkoreoaWgF3ZWYg==}
+ hasBin: true
+ dependencies:
+ atomic-sleep: 1.0.0
+ fast-redact: 3.1.2
+ on-exit-leak-free: 2.1.0
+ pino-abstract-transport: 1.0.0
+ pino-std-serializers: 6.1.0
+ process-warning: 2.1.0
+ quick-format-unescaped: 4.0.4
+ real-require: 0.2.0
+ safe-stable-stringify: 2.4.2
+ sonic-boom: 3.2.1
+ thread-stream: 2.3.0
+ dev: false
+
/pirates/4.0.5:
resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==}
engines: {node: '>= 6'}
@@ -14469,6 +14819,15 @@ packages:
/process-nextick-args/2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
+ /process-warning/2.1.0:
+ resolution: {integrity: sha512-9C20RLxrZU/rFnxWncDkuF6O999NdIf3E1ws4B0ZeY3sRVPzWBMsYDE2lxjxhiXxg464cQTgKUGm8/i6y2YGXg==}
+ dev: false
+
+ /process/0.11.10:
+ resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
+ engines: {node: '>= 0.6.0'}
+ dev: false
+
/progress/2.0.3:
resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
engines: {node: '>=0.4.0'}
@@ -14589,6 +14948,10 @@ packages:
/queue-microtask/1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+ /quick-format-unescaped/4.0.4:
+ resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
+ dev: false
+
/quick-lru/4.0.1:
resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==}
engines: {node: '>=8'}
@@ -14841,7 +15204,16 @@ packages:
inherits: 2.0.4
string_decoder: 1.3.0
util-deprecate: 1.0.2
- dev: true
+
+ /readable-stream/4.3.0:
+ resolution: {integrity: sha512-MuEnA0lbSi7JS8XM+WNJlWZkHAAdm7gETHdFK//Q/mChGyj2akEFtdLZh32jSdkWGbRwCW9pn6g3LWDdDeZnBQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ abort-controller: 3.0.0
+ buffer: 6.0.3
+ events: 3.3.0
+ process: 0.11.10
+ dev: false
/readdir-scoped-modules/1.1.0:
resolution: {integrity: sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==}
@@ -14859,6 +15231,11 @@ packages:
dependencies:
picomatch: 2.3.1
+ /real-require/0.2.0:
+ resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
+ engines: {node: '>= 12.13.0'}
+ dev: false
+
/rechoir/0.6.2:
resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==}
engines: {node: '>= 0.10'}
@@ -15195,6 +15572,11 @@ packages:
regexp-tree: 0.1.24
dev: true
+ /safe-stable-stringify/2.4.2:
+ resolution: {integrity: sha512-gMxvPJYhP0O9n2pvcfYfIuYgbledAOJFcqRThtPRmjscaipiwcwPPKLytpVzMkG2HAN87Qmo2d4PtGiri1dSLA==}
+ engines: {node: '>=10'}
+ dev: false
+
/safer-buffer/2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
@@ -15266,6 +15648,10 @@ packages:
ajv-keywords: 5.1.0_ajv@8.12.0
dev: true
+ /secure-json-parse/2.7.0:
+ resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==}
+ dev: false
+
/select-hose/2.0.0:
resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==}
dev: true
@@ -15530,6 +15916,12 @@ packages:
smart-buffer: 4.2.0
dev: true
+ /sonic-boom/3.2.1:
+ resolution: {integrity: sha512-iITeTHxy3B9FGu8aVdiDXUVAcHMF9Ss0cCsAOo2HfCrmVGT3/DT5oYaeu0M/YKZDlKTvChEyPq0zI9Hf33EX6A==}
+ dependencies:
+ atomic-sleep: 1.0.0
+ dev: false
+
/sort-keys/2.0.0:
resolution: {integrity: sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==}
engines: {node: '>=4'}
@@ -15869,7 +16261,6 @@ packages:
/strip-json-comments/3.1.1:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
- dev: true
/strip-literal/1.0.1:
resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==}
@@ -15877,6 +16268,14 @@ packages:
acorn: 8.8.2
dev: true
+ /stripe/11.10.0:
+ resolution: {integrity: sha512-uzQuj/Vangpp8fgkaEr6oRNfPToo5xamOhc7wxFGF/RUm7VKm/IGzoZ0cCtnGHCs5/O1AjMQsTZApgUARRVHOw==}
+ engines: {node: '>=12.*'}
+ dependencies:
+ '@types/node': 18.14.1
+ qs: 6.11.0
+ dev: false
+
/strong-log-transformer/2.1.0:
resolution: {integrity: sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==}
engines: {node: '>=4'}
@@ -16049,6 +16448,15 @@ packages:
resolution: {integrity: sha512-V3eIa28lwB6gg7/wfNvAbjwJYmDXy1Jo1POjyTzlB6wPcHiGlRxq39TSjYGVjQrUSAzpv+a7nzp7mDxgNy57xA==}
dev: false
+ /swagger-ui-express/4.6.0:
+ resolution: {integrity: sha512-ZxpQFp1JR2RF8Ar++CyJzEDdvufa08ujNUJgMVTMWPi86CuQeVdBtvaeO/ysrz6dJAYXf9kbVNhWD7JWocwqsA==}
+ engines: {node: '>= v0.10.32'}
+ peerDependencies:
+ express: '>=4.0.0'
+ dependencies:
+ swagger-ui-dist: 4.15.5
+ dev: false
+
/swagger-ui-express/4.6.1:
resolution: {integrity: sha512-Pss7YNFKNdq66XKNjRe4IRXKKYNx/LvOSml9TdrZ8/78UpxUHIp9JoXpXWA5Z4L+SCmX63DZ9IPlQ8nnRuncvA==}
engines: {node: '>= v0.10.32'}
@@ -16227,6 +16635,12 @@ packages:
any-promise: 1.3.0
dev: false
+ /thread-stream/2.3.0:
+ resolution: {integrity: sha512-kaDqm1DET9pp3NXwR8382WHbnpXnRkN9xGN9dQt3B2+dmXiW8X1SOwmFOxAErEQ47ObhZ96J6yhZNXuyCOL7KA==}
+ dependencies:
+ real-require: 0.2.0
+ dev: false
+
/through/2.3.8:
resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
@@ -16535,6 +16949,10 @@ packages:
resolution: {integrity: sha512-jlGqHGoKzyyjhwv/c9omAgohntThMcGtw8RV/RDLlkbbc08kni/akVxO62N8HaXMVbVsK1NCnpSK3N2xCt22ww==}
dev: false
+ /twitter-api-v2/1.14.1:
+ resolution: {integrity: sha512-RTegtBS6FIjUW87gOgTAQG9zF9OvzY8ObkyUgW99tA45Scwro3ToJrdNd1Itn1SW4KIds5N5LQuy2JbUZdNbkA==}
+ dev: false
+
/type-check/0.3.2:
resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==}
engines: {node: '>= 0.8.0'}
@@ -16562,7 +16980,6 @@ packages:
/type-fest/0.20.2:
resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
engines: {node: '>=10'}
- dev: true
/type-fest/0.21.3:
resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
@@ -17296,6 +17713,13 @@ packages:
string-width: 4.2.3
dev: true
+ /widest-line/3.1.0:
+ resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==}
+ engines: {node: '>=8'}
+ dependencies:
+ string-width: 4.2.3
+ dev: false
+
/windows-release/4.0.0:
resolution: {integrity: sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==}
engines: {node: '>=10'}