Added addons for custom claims for OAuth apps
All checks were successful
Publish to Private NPM Registry / publish (push) Successful in 32s
All checks were successful
Publish to Private NPM Registry / publish (push) Successful in 32s
This commit is contained in:
parent
924e7a2d1f
commit
522f7590b3
10 changed files with 173 additions and 10 deletions
|
|
@ -1,9 +1,19 @@
|
|||
import { OAuthApp } from './OAuthApp.js';
|
||||
import { BridgemanAccessibleAppClaims } from './types/BridgemanAccessibleAppClaims.js';
|
||||
import { AppSubscriptionTier } from './types/AppSubscriptionTier.js';
|
||||
import type { BridgemanAccessibleAppClaims } from './types/BridgemanAccessibleAppClaims.js';
|
||||
import type { AppSubscriptionTier } from './types/AppSubscriptionTier.js';
|
||||
import type { Addon } from './types/addons/Addon.js';
|
||||
import { AddonType } from './types/addons/AddonType.js';
|
||||
import { BillingCadence as AddonBillingCadence } from './types/addons/BillingCadence.js';
|
||||
import type { Schema as AddonSchema } from './types/addons/Schema.js';
|
||||
import type { PricingStrategy } from './types/addons/PricingStrategy.js';
|
||||
|
||||
export {
|
||||
OAuthApp,
|
||||
BridgemanAccessibleAppClaims,
|
||||
AppSubscriptionTier
|
||||
AppSubscriptionTier,
|
||||
Addon,
|
||||
AddonType,
|
||||
AddonBillingCadence,
|
||||
AddonSchema,
|
||||
PricingStrategy,
|
||||
}
|
||||
|
|
@ -5,5 +5,7 @@ export interface AppSubscriptionTier {
|
|||
cost: number; // e.g., 1000 (cents)
|
||||
currency: string; // e.g., "USD"
|
||||
description?: string;
|
||||
// You can add 'features' list here if needed
|
||||
features?: {
|
||||
[featureName: string]: boolean; // e.g., { "prioritySupport": true, "customBranding": false }
|
||||
}
|
||||
}
|
||||
|
|
@ -2,11 +2,14 @@ import { ClientCustomClaims } from '@BridgemanAccessible/ba-auth/server';
|
|||
|
||||
import { AppSubscriptionTier } from './AppSubscriptionTier.js';
|
||||
|
||||
import { Addon } from './addons/Addon.js';
|
||||
|
||||
/**
|
||||
* The custom registration claims (for Bridgeman Accessible apps) as used by this server
|
||||
*
|
||||
* This allows registering apps to specify very specific things this Authorization Server supports, such as:
|
||||
* - their subscription tiers
|
||||
* - addons
|
||||
* - and client abbreviation.
|
||||
*
|
||||
* Which are useful internally to this server and clients/apps registering with it.
|
||||
|
|
@ -30,4 +33,7 @@ export interface BridgemanAccessibleAppClaims extends ClientCustomClaims {
|
|||
|
||||
/** The available subscription tiers for this client application */
|
||||
subscription_tiers?: AppSubscriptionTier[];
|
||||
|
||||
/** The available addons for this client application */
|
||||
addons?: Addon[];
|
||||
}
|
||||
51
src/oauth/types/addons/Addon.ts
Normal file
51
src/oauth/types/addons/Addon.ts
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
import { AddonType } from './AddonType.js';
|
||||
import { BillingCadence } from './BillingCadence.js';
|
||||
import { Schema } from './Schema.js';
|
||||
import { PricingStrategy } from './PricingStrategy.js';
|
||||
|
||||
/**
|
||||
* An Addon is a purchasable entity associated with a given app.
|
||||
*
|
||||
* Another way, this gives apps a way to define purchasable "things".
|
||||
* Giving them the flexibility to define what those "things" are.
|
||||
*
|
||||
* This is desirable/necessary because we want to reuse our already setup infrastructure for payments etc... while not being confined by it.
|
||||
* Infrastructure here being things like:
|
||||
* - Renewals (if applicable),
|
||||
* - Refunds,
|
||||
* - Multiple payment processors,
|
||||
* - 3rd party (purchaser/manager/etc...) billing/payment,
|
||||
* - Etc...
|
||||
*
|
||||
* A few examples of addons might be:
|
||||
* - Additional capacity for the AEP-E (Organizer App)
|
||||
* - Funder funding goal contributions for the AEP-FP (Funders Portal)
|
||||
*/
|
||||
export type Addon = {
|
||||
/** Product key associated with the addon */
|
||||
productKey: string;
|
||||
|
||||
// -----------------
|
||||
// Addon Properties
|
||||
// -----------------
|
||||
|
||||
/** Parameter Schema (buy time parameters) - JSON-Schema */
|
||||
schema: Schema;
|
||||
|
||||
/** Pricing Strategy (How to calculate price at buy time) */
|
||||
pricing: PricingStrategy;
|
||||
} & (
|
||||
{
|
||||
/** Type of addon/purchase */
|
||||
type: AddonType.SUBSCRIPTION;
|
||||
|
||||
// ----------------------------
|
||||
// Subscription Specific Fields
|
||||
// ----------------------------
|
||||
|
||||
billingCadence: BillingCadence;
|
||||
} | {
|
||||
/** Type of addon/purchase */
|
||||
type: AddonType.ONE_TIME;
|
||||
}
|
||||
)
|
||||
4
src/oauth/types/addons/AddonType.ts
Normal file
4
src/oauth/types/addons/AddonType.ts
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
export enum AddonType {
|
||||
SUBSCRIPTION = 'subscription',
|
||||
ONE_TIME = 'one_time'
|
||||
}
|
||||
4
src/oauth/types/addons/BillingCadence.ts
Normal file
4
src/oauth/types/addons/BillingCadence.ts
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
export enum BillingCadence {
|
||||
MONTHLY = 'monthly',
|
||||
YEARLY = 'yearly'
|
||||
}
|
||||
44
src/oauth/types/addons/PricingStrategy.ts
Normal file
44
src/oauth/types/addons/PricingStrategy.ts
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
/** The strategy/mechanism used to calculate the cost of a purchase of an addon at buy time */
|
||||
export type PricingStrategy = {
|
||||
/** The currency in which the pricing is specified */
|
||||
currency: 'CAD' | 'USD' | 'EUR' | 'GBP' | 'AUD'
|
||||
} & (
|
||||
{
|
||||
/**
|
||||
* Type of pricing used
|
||||
*
|
||||
* The table below describes the available pricing types.
|
||||
*
|
||||
* | Type | Description |
|
||||
* | ----------------- | ------------------------------------------------------------------------------------ |
|
||||
* | **`per_unit`** * | Price is calculated based on a per-unit basis multiplied by the configured quantity. |
|
||||
* | `passthrough` | Price is determined externally and passed through without internal calculation. |
|
||||
*
|
||||
* \* indicates the current option
|
||||
*/
|
||||
type: 'per_unit',
|
||||
|
||||
/** Per Unit Price (in cents) */
|
||||
unit_amount: number,
|
||||
|
||||
/** Parameter to use for unit calculation */
|
||||
unit_parameter: string
|
||||
} | {
|
||||
/**
|
||||
* Type of pricing used
|
||||
*
|
||||
* The table below describes the available pricing types.
|
||||
*
|
||||
* | Type | Description |
|
||||
* | ------------------- | ------------------------------------------------------------------------------------ |
|
||||
* | `per_unit` | Price is calculated based on a per-unit basis multiplied by the configured quantity. |
|
||||
* | **`passthrough`** * | Price is determined externally and passed through without internal calculation. |
|
||||
*
|
||||
* \* indicates the current option
|
||||
*/
|
||||
type: 'passthrough',
|
||||
|
||||
/** Parameter to use for passthrough amount */
|
||||
amount_parameter: string
|
||||
}
|
||||
);
|
||||
42
src/oauth/types/addons/Schema.ts
Normal file
42
src/oauth/types/addons/Schema.ts
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
/** Rough approximation of JSON-Schema property */
|
||||
type Property = {
|
||||
/** Type of the property */
|
||||
type: 'string',
|
||||
|
||||
/** Format of the value, if applicable */
|
||||
format?: 'date' | 'date-time' | 'email' | 'uuid',
|
||||
} | {
|
||||
/** Type of the property */
|
||||
type: 'number' | 'integer',
|
||||
|
||||
/** Minimum value for numeric types */
|
||||
minimum?: number,
|
||||
} | {
|
||||
/** Type of the property */
|
||||
type: 'object',
|
||||
|
||||
/** Nested properties for object types */
|
||||
properties: Properties
|
||||
} | {
|
||||
/** Type of the property */
|
||||
type: 'array',
|
||||
|
||||
/** Format of the value, if applicable */
|
||||
items: Property[]
|
||||
} | {
|
||||
/** Type of the property */
|
||||
type: 'boolean'
|
||||
}
|
||||
|
||||
/** Rough approximation of JSON-Schema properties */
|
||||
type Properties = {
|
||||
/** Named property (can have multiple) */
|
||||
[key: string]: Property
|
||||
}
|
||||
|
||||
/** A JSON-Schema (or rough approximation) definition for buy time parameters for addon purchase */
|
||||
export type Schema = {
|
||||
type: 'object',
|
||||
properties: Properties,
|
||||
required?: string[]
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue