diff --git a/.dagger/generate.go b/.dagger/generate.go index 3938fcba4..129c4a582 100644 --- a/.dagger/generate.go +++ b/.dagger/generate.go @@ -23,7 +23,7 @@ type Generate struct { func (m *Generate) Openapi() *dagger.File { file := typespecBase(m.Source.Directory("api/spec")). WithExec([]string{"pnpm", "compile"}). - File("/work/output/openapi.OpenMeterCloud.yaml"). + File("/work/output/openapi.OpenMeter.yaml"). WithName("openapi.yaml") // https://github.com/microsoft/typespec/issues/2154 diff --git a/api/api.gen.go b/api/api.gen.go index c03874aff..50ae0bf31 100644 --- a/api/api.gen.go +++ b/api/api.gen.go @@ -25,10 +25,7 @@ import ( ) const ( - CloudCookieAuthScopes = "CloudCookieAuth.Scopes" - CloudPortalTokenAuthScopes = "CloudPortalTokenAuth.Scopes" - CloudTokenAuthScopes = "CloudTokenAuth.Scopes" - PortalTokenAuthScopes = "PortalTokenAuth.Scopes" + PortalTokenAuthScopes = "PortalTokenAuth.Scopes" ) // Defines values for AppCapabilityType. @@ -2415,9 +2412,6 @@ type Meter = models.Meter // MeterAggregation The aggregation type to use for the meter. type MeterAggregation = models.MeterAggregation -// MeterCreate A meter is a configuration that defines how to match and aggregate events. -type MeterCreate = models.Meter - // MeterQueryResult The result of a meter query. type MeterQueryResult struct { Data []MeterQueryRow `json:"data"` @@ -3530,23 +3524,6 @@ type Subject struct { StripeCustomerId *string `json:"stripeCustomerId"` } -// SubjectUpsert A subject is a unique identifier for a user or entity. -type SubjectUpsert struct { - // CurrentPeriodEnd [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. - CurrentPeriodEnd *time.Time `json:"currentPeriodEnd,omitempty"` - - // CurrentPeriodStart [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. - CurrentPeriodStart *time.Time `json:"currentPeriodStart,omitempty"` - - // DisplayName A human-readable display name for the subject. - DisplayName *string `json:"displayName"` - - // Key A unique, human-readable identifier for the subject. - Key string `json:"key"` - Metadata *map[string]interface{} `json:"metadata"` - StripeCustomerId *string `json:"stripeCustomerId"` -} - // Subscription Subscription is an exact subscription instance. type Subscription struct { // ActiveTo If the subscription is canceled or otherwise have to end activeTo denotes the end date. @@ -4733,18 +4710,6 @@ type ListPortalTokensParams struct { Limit *int `form:"limit,omitempty" json:"limit,omitempty"` } -// InvalidatePortalTokensJSONBody defines parameters for InvalidatePortalTokens. -type InvalidatePortalTokensJSONBody struct { - // Id Invalidate a portal token by ID. - Id *string `json:"id,omitempty"` - - // Subject Invalidate all portal tokens for a subject. - Subject *string `json:"subject,omitempty"` -} - -// UpsertSubjectJSONBody defines parameters for UpsertSubject. -type UpsertSubjectJSONBody = []SubjectUpsert - // ListSubjectEntitlementsParams defines parameters for ListSubjectEntitlements. type ListSubjectEntitlementsParams struct { IncludeDeleted *bool `form:"includeDeleted,omitempty" json:"includeDeleted,omitempty"` @@ -4852,9 +4817,6 @@ type CreateStripeCheckoutSessionJSONRequestBody = CreateStripeCheckoutSessionReq // MarketplaceAppAPIKeyInstallJSONRequestBody defines body for MarketplaceAppAPIKeyInstall for application/json ContentType. type MarketplaceAppAPIKeyInstallJSONRequestBody MarketplaceAppAPIKeyInstallJSONBody -// CreateMeterJSONRequestBody defines body for CreateMeter for application/json ContentType. -type CreateMeterJSONRequestBody = MeterCreate - // CreateNotificationChannelJSONRequestBody defines body for CreateNotificationChannel for application/json ContentType. type CreateNotificationChannelJSONRequestBody = NotificationChannelCreateRequest @@ -4885,12 +4847,6 @@ type UpdatePlanPhasesJSONRequestBody = PlanPhaseUpdate // CreatePortalTokenJSONRequestBody defines body for CreatePortalToken for application/json ContentType. type CreatePortalTokenJSONRequestBody = PortalToken -// InvalidatePortalTokensJSONRequestBody defines body for InvalidatePortalTokens for application/json ContentType. -type InvalidatePortalTokensJSONRequestBody InvalidatePortalTokensJSONBody - -// UpsertSubjectJSONRequestBody defines body for UpsertSubject for application/json ContentType. -type UpsertSubjectJSONRequestBody = UpsertSubjectJSONBody - // CreateEntitlementJSONRequestBody defines body for CreateEntitlement for application/json ContentType. type CreateEntitlementJSONRequestBody = EntitlementCreateInputs @@ -6680,12 +6636,6 @@ type ServerInterface interface { // (GET /api/v1/meters) ListMeters(w http.ResponseWriter, r *http.Request) - // (POST /api/v1/meters) - CreateMeter(w http.ResponseWriter, r *http.Request) - - // (DELETE /api/v1/meters/{meterIdOrSlug}) - DeleteMeter(w http.ResponseWriter, r *http.Request, meterIdOrSlug string) - // (GET /api/v1/meters/{meterIdOrSlug}) GetMeter(w http.ResponseWriter, r *http.Request, meterIdOrSlug string) @@ -6785,21 +6735,6 @@ type ServerInterface interface { // (POST /api/v1/portal/tokens) CreatePortalToken(w http.ResponseWriter, r *http.Request) - // (POST /api/v1/portal/tokens/invalidate) - InvalidatePortalTokens(w http.ResponseWriter, r *http.Request) - - // (GET /api/v1/subjects) - ListSubjects(w http.ResponseWriter, r *http.Request) - - // (POST /api/v1/subjects) - UpsertSubject(w http.ResponseWriter, r *http.Request) - - // (DELETE /api/v1/subjects/{subjectIdOrKey}) - DeleteSubject(w http.ResponseWriter, r *http.Request, subjectIdOrKey string) - - // (GET /api/v1/subjects/{subjectIdOrKey}) - GetSubject(w http.ResponseWriter, r *http.Request, subjectIdOrKey string) - // (GET /api/v1/subjects/{subjectIdOrKey}/entitlements) ListSubjectEntitlements(w http.ResponseWriter, r *http.Request, subjectIdOrKey string, params ListSubjectEntitlementsParams) // Create an entitlement @@ -7122,16 +7057,6 @@ func (_ Unimplemented) ListMeters(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusNotImplemented) } -// (POST /api/v1/meters) -func (_ Unimplemented) CreateMeter(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(http.StatusNotImplemented) -} - -// (DELETE /api/v1/meters/{meterIdOrSlug}) -func (_ Unimplemented) DeleteMeter(w http.ResponseWriter, r *http.Request, meterIdOrSlug string) { - w.WriteHeader(http.StatusNotImplemented) -} - // (GET /api/v1/meters/{meterIdOrSlug}) func (_ Unimplemented) GetMeter(w http.ResponseWriter, r *http.Request, meterIdOrSlug string) { w.WriteHeader(http.StatusNotImplemented) @@ -7323,31 +7248,6 @@ func (_ Unimplemented) CreatePortalToken(w http.ResponseWriter, r *http.Request) w.WriteHeader(http.StatusNotImplemented) } -// (POST /api/v1/portal/tokens/invalidate) -func (_ Unimplemented) InvalidatePortalTokens(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(http.StatusNotImplemented) -} - -// (GET /api/v1/subjects) -func (_ Unimplemented) ListSubjects(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(http.StatusNotImplemented) -} - -// (POST /api/v1/subjects) -func (_ Unimplemented) UpsertSubject(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(http.StatusNotImplemented) -} - -// (DELETE /api/v1/subjects/{subjectIdOrKey}) -func (_ Unimplemented) DeleteSubject(w http.ResponseWriter, r *http.Request, subjectIdOrKey string) { - w.WriteHeader(http.StatusNotImplemented) -} - -// (GET /api/v1/subjects/{subjectIdOrKey}) -func (_ Unimplemented) GetSubject(w http.ResponseWriter, r *http.Request, subjectIdOrKey string) { - w.WriteHeader(http.StatusNotImplemented) -} - // (GET /api/v1/subjects/{subjectIdOrKey}/entitlements) func (_ Unimplemented) ListSubjectEntitlements(w http.ResponseWriter, r *http.Request, subjectIdOrKey string, params ListSubjectEntitlementsParams) { w.WriteHeader(http.StatusNotImplemented) @@ -7443,14 +7343,6 @@ func (siw *ServerInterfaceWrapper) ListApps(w http.ResponseWriter, r *http.Reque var err error - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - // Parameter object where we will unmarshal all parameters from the context var params ListAppsParams @@ -7495,14 +7387,6 @@ func (siw *ServerInterfaceWrapper) UninstallApp(w http.ResponseWriter, r *http.R return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.UninstallApp(w, r, id) })) @@ -7528,14 +7412,6 @@ func (siw *ServerInterfaceWrapper) GetApp(w http.ResponseWriter, r *http.Request return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.GetApp(w, r, id) })) @@ -7561,14 +7437,6 @@ func (siw *ServerInterfaceWrapper) AppStripeWebhook(w http.ResponseWriter, r *ht return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.AppStripeWebhook(w, r, id) })) @@ -7585,14 +7453,6 @@ func (siw *ServerInterfaceWrapper) BillingListCustomerOverrides(w http.ResponseW var err error - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - // Parameter object where we will unmarshal all parameters from the context var params BillingListCustomerOverridesParams @@ -7677,14 +7537,6 @@ func (siw *ServerInterfaceWrapper) BillingDeleteCustomerOverride(w http.Response return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.BillingDeleteCustomerOverride(w, r, customerId) })) @@ -7710,14 +7562,6 @@ func (siw *ServerInterfaceWrapper) BillingGetCustomerOverrideById(w http.Respons return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.BillingGetCustomerOverrideById(w, r, customerId) })) @@ -7743,14 +7587,6 @@ func (siw *ServerInterfaceWrapper) BillingUpsertCustomerOverride(w http.Response return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.BillingUpsertCustomerOverride(w, r, customerId) })) @@ -7767,14 +7603,6 @@ func (siw *ServerInterfaceWrapper) BillingListInvoices(w http.ResponseWriter, r var err error - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - // Parameter object where we will unmarshal all parameters from the context var params BillingListInvoicesParams @@ -7899,14 +7727,6 @@ func (siw *ServerInterfaceWrapper) BillingListInvoicesByCustomer(w http.Response return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - // Parameter object where we will unmarshal all parameters from the context var params BillingListInvoicesByCustomerParams @@ -8023,14 +7843,6 @@ func (siw *ServerInterfaceWrapper) BillingCreateInvoice(w http.ResponseWriter, r return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.BillingCreateInvoice(w, r, customerId) })) @@ -8065,14 +7877,6 @@ func (siw *ServerInterfaceWrapper) BillingDeleteInvoiceByCustomerInvoiceId(w htt return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.BillingDeleteInvoiceByCustomerInvoiceId(w, r, customerId, invoiceId) })) @@ -8107,14 +7911,6 @@ func (siw *ServerInterfaceWrapper) BillingGetInvoiceByCustomerInvoiceId(w http.R return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - // Parameter object where we will unmarshal all parameters from the context var params BillingGetInvoiceByCustomerInvoiceIdParams @@ -8167,14 +7963,6 @@ func (siw *ServerInterfaceWrapper) BillingInvoiceAdvance(w http.ResponseWriter, return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.BillingInvoiceAdvance(w, r, customerId, invoiceId) })) @@ -8209,14 +7997,6 @@ func (siw *ServerInterfaceWrapper) BillingApproveInvoice(w http.ResponseWriter, return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.BillingApproveInvoice(w, r, customerId, invoiceId) })) @@ -8260,14 +8040,6 @@ func (siw *ServerInterfaceWrapper) BillingDeleteInvoiceLine(w http.ResponseWrite return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.BillingDeleteInvoiceLine(w, r, customerId, invoiceId, lineId) })) @@ -8311,14 +8083,6 @@ func (siw *ServerInterfaceWrapper) BillingUpdateInvoiceLine(w http.ResponseWrite return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.BillingUpdateInvoiceLine(w, r, customerId, invoiceId, lineId) })) @@ -8353,14 +8117,6 @@ func (siw *ServerInterfaceWrapper) BillingInvoiceRetry(w http.ResponseWriter, r return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.BillingInvoiceRetry(w, r, customerId, invoiceId) })) @@ -8395,14 +8151,6 @@ func (siw *ServerInterfaceWrapper) BillingRecalculateInvoiceTax(w http.ResponseW return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.BillingRecalculateInvoiceTax(w, r, customerId, invoiceId) })) @@ -8437,14 +8185,6 @@ func (siw *ServerInterfaceWrapper) BillingVoidInvoice(w http.ResponseWriter, r * return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.BillingVoidInvoice(w, r, customerId, invoiceId) })) @@ -8470,14 +8210,6 @@ func (siw *ServerInterfaceWrapper) BillingCreateLineByCustomer(w http.ResponseWr return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.BillingCreateLineByCustomer(w, r, customerId) })) @@ -8494,14 +8226,6 @@ func (siw *ServerInterfaceWrapper) BillingListProfiles(w http.ResponseWriter, r var err error - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - // Parameter object where we will unmarshal all parameters from the context var params BillingListProfilesParams @@ -8583,14 +8307,6 @@ func (siw *ServerInterfaceWrapper) BillingListProfiles(w http.ResponseWriter, r // BillingCreateProfile operation middleware func (siw *ServerInterfaceWrapper) BillingCreateProfile(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.BillingCreateProfile(w, r) })) @@ -8616,14 +8332,6 @@ func (siw *ServerInterfaceWrapper) BillingArchiveProfile(w http.ResponseWriter, return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.BillingArchiveProfile(w, r, id) })) @@ -8649,14 +8357,6 @@ func (siw *ServerInterfaceWrapper) BillingGetProfile(w http.ResponseWriter, r *h return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - // Parameter object where we will unmarshal all parameters from the context var params BillingGetProfileParams @@ -8693,14 +8393,6 @@ func (siw *ServerInterfaceWrapper) BillingUpdateProfile(w http.ResponseWriter, r return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.BillingUpdateProfile(w, r, id) })) @@ -8717,14 +8409,6 @@ func (siw *ServerInterfaceWrapper) ListCustomers(w http.ResponseWriter, r *http. var err error - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - // Parameter object where we will unmarshal all parameters from the context var params ListCustomersParams @@ -8806,14 +8490,6 @@ func (siw *ServerInterfaceWrapper) ListCustomers(w http.ResponseWriter, r *http. // CreateCustomer operation middleware func (siw *ServerInterfaceWrapper) CreateCustomer(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.CreateCustomer(w, r) })) @@ -8839,14 +8515,6 @@ func (siw *ServerInterfaceWrapper) DeleteCustomer(w http.ResponseWriter, r *http return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.DeleteCustomer(w, r, id) })) @@ -8872,14 +8540,6 @@ func (siw *ServerInterfaceWrapper) GetCustomer(w http.ResponseWriter, r *http.Re return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.GetCustomer(w, r, id) })) @@ -8905,14 +8565,6 @@ func (siw *ServerInterfaceWrapper) UpdateCustomer(w http.ResponseWriter, r *http return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.UpdateCustomer(w, r, id) })) @@ -8927,14 +8579,6 @@ func (siw *ServerInterfaceWrapper) UpdateCustomer(w http.ResponseWriter, r *http // GetDebugMetrics operation middleware func (siw *ServerInterfaceWrapper) GetDebugMetrics(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.GetDebugMetrics(w, r) })) @@ -8951,14 +8595,6 @@ func (siw *ServerInterfaceWrapper) ListEntitlements(w http.ResponseWriter, r *ht var err error - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - // Parameter object where we will unmarshal all parameters from the context var params ListEntitlementsParams @@ -9059,14 +8695,6 @@ func (siw *ServerInterfaceWrapper) GetEntitlementById(w http.ResponseWriter, r * return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.GetEntitlementById(w, r, entitlementId) })) @@ -9083,14 +8711,6 @@ func (siw *ServerInterfaceWrapper) ListEvents(w http.ResponseWriter, r *http.Req var err error - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - // Parameter object where we will unmarshal all parameters from the context var params ListEventsParams @@ -9172,14 +8792,6 @@ func (siw *ServerInterfaceWrapper) ListEvents(w http.ResponseWriter, r *http.Req // IngestEvents operation middleware func (siw *ServerInterfaceWrapper) IngestEvents(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.IngestEvents(w, r) })) @@ -9196,14 +8808,6 @@ func (siw *ServerInterfaceWrapper) ListFeatures(w http.ResponseWriter, r *http.R var err error - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - // Parameter object where we will unmarshal all parameters from the context var params ListFeaturesParams @@ -9285,14 +8889,6 @@ func (siw *ServerInterfaceWrapper) ListFeatures(w http.ResponseWriter, r *http.R // CreateFeature operation middleware func (siw *ServerInterfaceWrapper) CreateFeature(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.CreateFeature(w, r) })) @@ -9318,14 +8914,6 @@ func (siw *ServerInterfaceWrapper) DeleteFeature(w http.ResponseWriter, r *http. return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.DeleteFeature(w, r, featureId) })) @@ -9351,14 +8939,6 @@ func (siw *ServerInterfaceWrapper) GetFeature(w http.ResponseWriter, r *http.Req return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.GetFeature(w, r, featureId) })) @@ -9375,14 +8955,6 @@ func (siw *ServerInterfaceWrapper) ListGrants(w http.ResponseWriter, r *http.Req var err error - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - // Parameter object where we will unmarshal all parameters from the context var params ListGrantsParams @@ -9483,14 +9055,6 @@ func (siw *ServerInterfaceWrapper) VoidGrant(w http.ResponseWriter, r *http.Requ return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.VoidGrant(w, r, grantId) })) @@ -9505,14 +9069,6 @@ func (siw *ServerInterfaceWrapper) VoidGrant(w http.ResponseWriter, r *http.Requ // CreateStripeCheckoutSession operation middleware func (siw *ServerInterfaceWrapper) CreateStripeCheckoutSession(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.CreateStripeCheckoutSession(w, r) })) @@ -9529,14 +9085,6 @@ func (siw *ServerInterfaceWrapper) ListMarketplaceListings(w http.ResponseWriter var err error - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - // Parameter object where we will unmarshal all parameters from the context var params ListMarketplaceListingsParams @@ -9581,14 +9129,6 @@ func (siw *ServerInterfaceWrapper) GetMarketplaceListing(w http.ResponseWriter, return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.GetMarketplaceListing(w, r, pType) })) @@ -9614,14 +9154,6 @@ func (siw *ServerInterfaceWrapper) MarketplaceAppAPIKeyInstall(w http.ResponseWr return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.MarketplaceAppAPIKeyInstall(w, r, pType) })) @@ -9647,14 +9179,6 @@ func (siw *ServerInterfaceWrapper) MarketplaceOAuth2InstallGetURL(w http.Respons return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.MarketplaceOAuth2InstallGetURL(w, r, pType) })) @@ -9680,14 +9204,6 @@ func (siw *ServerInterfaceWrapper) MarketplaceOAuth2InstallAuthorize(w http.Resp return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - // Parameter object where we will unmarshal all parameters from the context var params MarketplaceOAuth2InstallAuthorizeParams @@ -9745,14 +9261,6 @@ func (siw *ServerInterfaceWrapper) MarketplaceOAuth2InstallAuthorize(w http.Resp // ListMeters operation middleware func (siw *ServerInterfaceWrapper) ListMeters(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.ListMeters(w, r) })) @@ -9764,61 +9272,6 @@ func (siw *ServerInterfaceWrapper) ListMeters(w http.ResponseWriter, r *http.Req handler.ServeHTTP(w, r) } -// CreateMeter operation middleware -func (siw *ServerInterfaceWrapper) CreateMeter(w http.ResponseWriter, r *http.Request) { - - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - siw.Handler.CreateMeter(w, r) - })) - - for i := len(siw.HandlerMiddlewares) - 1; i >= 0; i-- { - handler = siw.HandlerMiddlewares[i](handler) - } - - handler.ServeHTTP(w, r) -} - -// DeleteMeter operation middleware -func (siw *ServerInterfaceWrapper) DeleteMeter(w http.ResponseWriter, r *http.Request) { - - var err error - - // ------------- Path parameter "meterIdOrSlug" ------------- - var meterIdOrSlug string - - err = runtime.BindStyledParameterWithOptions("simple", "meterIdOrSlug", chi.URLParam(r, "meterIdOrSlug"), &meterIdOrSlug, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) - if err != nil { - siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "meterIdOrSlug", Err: err}) - return - } - - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - siw.Handler.DeleteMeter(w, r, meterIdOrSlug) - })) - - for i := len(siw.HandlerMiddlewares) - 1; i >= 0; i-- { - handler = siw.HandlerMiddlewares[i](handler) - } - - handler.ServeHTTP(w, r) -} - // GetMeter operation middleware func (siw *ServerInterfaceWrapper) GetMeter(w http.ResponseWriter, r *http.Request) { @@ -9833,14 +9286,6 @@ func (siw *ServerInterfaceWrapper) GetMeter(w http.ResponseWriter, r *http.Reque return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.GetMeter(w, r, meterIdOrSlug) })) @@ -9866,14 +9311,6 @@ func (siw *ServerInterfaceWrapper) QueryMeter(w http.ResponseWriter, r *http.Req return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - // Parameter object where we will unmarshal all parameters from the context var params QueryMeterParams @@ -9958,14 +9395,6 @@ func (siw *ServerInterfaceWrapper) ListMeterSubjects(w http.ResponseWriter, r *h return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.ListMeterSubjects(w, r, meterIdOrSlug) })) @@ -9982,14 +9411,6 @@ func (siw *ServerInterfaceWrapper) ListNotificationChannels(w http.ResponseWrite var err error - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - // Parameter object where we will unmarshal all parameters from the context var params ListNotificationChannelsParams @@ -10055,14 +9476,6 @@ func (siw *ServerInterfaceWrapper) ListNotificationChannels(w http.ResponseWrite // CreateNotificationChannel operation middleware func (siw *ServerInterfaceWrapper) CreateNotificationChannel(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.CreateNotificationChannel(w, r) })) @@ -10088,14 +9501,6 @@ func (siw *ServerInterfaceWrapper) DeleteNotificationChannel(w http.ResponseWrit return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.DeleteNotificationChannel(w, r, channelId) })) @@ -10121,14 +9526,6 @@ func (siw *ServerInterfaceWrapper) GetNotificationChannel(w http.ResponseWriter, return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.GetNotificationChannel(w, r, channelId) })) @@ -10154,14 +9551,6 @@ func (siw *ServerInterfaceWrapper) UpdateNotificationChannel(w http.ResponseWrit return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.UpdateNotificationChannel(w, r, channelId) })) @@ -10178,14 +9567,6 @@ func (siw *ServerInterfaceWrapper) ListNotificationEvents(w http.ResponseWriter, var err error - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - // Parameter object where we will unmarshal all parameters from the context var params ListNotificationEventsParams @@ -10294,14 +9675,6 @@ func (siw *ServerInterfaceWrapper) GetNotificationEvent(w http.ResponseWriter, r return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.GetNotificationEvent(w, r, eventId) })) @@ -10318,14 +9691,6 @@ func (siw *ServerInterfaceWrapper) ListNotificationRules(w http.ResponseWriter, var err error - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - // Parameter object where we will unmarshal all parameters from the context var params ListNotificationRulesParams @@ -10407,14 +9772,6 @@ func (siw *ServerInterfaceWrapper) ListNotificationRules(w http.ResponseWriter, // CreateNotificationRule operation middleware func (siw *ServerInterfaceWrapper) CreateNotificationRule(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.CreateNotificationRule(w, r) })) @@ -10440,14 +9797,6 @@ func (siw *ServerInterfaceWrapper) DeleteNotificationRule(w http.ResponseWriter, return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.DeleteNotificationRule(w, r, ruleId) })) @@ -10473,14 +9822,6 @@ func (siw *ServerInterfaceWrapper) GetNotificationRule(w http.ResponseWriter, r return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.GetNotificationRule(w, r, ruleId) })) @@ -10506,14 +9847,6 @@ func (siw *ServerInterfaceWrapper) UpdateNotificationRule(w http.ResponseWriter, return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.UpdateNotificationRule(w, r, ruleId) })) @@ -10539,14 +9872,6 @@ func (siw *ServerInterfaceWrapper) TestNotificationRule(w http.ResponseWriter, r return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.TestNotificationRule(w, r, ruleId) })) @@ -10561,14 +9886,6 @@ func (siw *ServerInterfaceWrapper) TestNotificationRule(w http.ResponseWriter, r // ReceiveSvixOperationalEvent operation middleware func (siw *ServerInterfaceWrapper) ReceiveSvixOperationalEvent(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.ReceiveSvixOperationalEvent(w, r) })) @@ -10585,14 +9902,6 @@ func (siw *ServerInterfaceWrapper) ListPlans(w http.ResponseWriter, r *http.Requ var err error - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - // Parameter object where we will unmarshal all parameters from the context var params ListPlansParams @@ -10674,14 +9983,6 @@ func (siw *ServerInterfaceWrapper) ListPlans(w http.ResponseWriter, r *http.Requ // CreatePlan operation middleware func (siw *ServerInterfaceWrapper) CreatePlan(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.CreatePlan(w, r) })) @@ -10707,14 +10008,6 @@ func (siw *ServerInterfaceWrapper) NewDraftPlan(w http.ResponseWriter, r *http.R return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.NewDraftPlan(w, r, planIdOrKey) })) @@ -10740,14 +10033,6 @@ func (siw *ServerInterfaceWrapper) DeletePlan(w http.ResponseWriter, r *http.Req return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.DeletePlan(w, r, planId) })) @@ -10773,14 +10058,6 @@ func (siw *ServerInterfaceWrapper) GetPlan(w http.ResponseWriter, r *http.Reques return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.GetPlan(w, r, planId) })) @@ -10806,14 +10083,6 @@ func (siw *ServerInterfaceWrapper) UpdatePlan(w http.ResponseWriter, r *http.Req return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.UpdatePlan(w, r, planId) })) @@ -10839,14 +10108,6 @@ func (siw *ServerInterfaceWrapper) ListPlanPhases(w http.ResponseWriter, r *http return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - // Parameter object where we will unmarshal all parameters from the context var params ListPlanPhasesParams @@ -10915,14 +10176,6 @@ func (siw *ServerInterfaceWrapper) CreatePlanPhases(w http.ResponseWriter, r *ht return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.CreatePlanPhases(w, r, planId) })) @@ -10957,14 +10210,6 @@ func (siw *ServerInterfaceWrapper) DeletePlanPhases(w http.ResponseWriter, r *ht return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.DeletePlanPhases(w, r, planId, planPhaseKey) })) @@ -10999,14 +10244,6 @@ func (siw *ServerInterfaceWrapper) GetPlanPhases(w http.ResponseWriter, r *http. return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.GetPlanPhases(w, r, planId, planPhaseKey) })) @@ -11041,14 +10278,6 @@ func (siw *ServerInterfaceWrapper) UpdatePlanPhases(w http.ResponseWriter, r *ht return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.UpdatePlanPhases(w, r, planId, planPhaseKey) })) @@ -11074,14 +10303,6 @@ func (siw *ServerInterfaceWrapper) PublishPlan(w http.ResponseWriter, r *http.Re return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.PublishPlan(w, r, planId) })) @@ -11107,14 +10328,6 @@ func (siw *ServerInterfaceWrapper) UnpublishPlan(w http.ResponseWriter, r *http. return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.UnpublishPlan(w, r, planId) })) @@ -11144,8 +10357,6 @@ func (siw *ServerInterfaceWrapper) QueryPortalMeter(w http.ResponseWriter, r *ht ctx = context.WithValue(ctx, PortalTokenAuthScopes, []string{}) - ctx = context.WithValue(ctx, CloudPortalTokenAuthScopes, []string{}) - r = r.WithContext(ctx) // Parameter object where we will unmarshal all parameters from the context @@ -11215,14 +10426,6 @@ func (siw *ServerInterfaceWrapper) ListPortalTokens(w http.ResponseWriter, r *ht var err error - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - // Parameter object where we will unmarshal all parameters from the context var params ListPortalTokensParams @@ -11248,14 +10451,6 @@ func (siw *ServerInterfaceWrapper) ListPortalTokens(w http.ResponseWriter, r *ht // CreatePortalToken operation middleware func (siw *ServerInterfaceWrapper) CreatePortalToken(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.CreatePortalToken(w, r) })) @@ -11267,138 +10462,6 @@ func (siw *ServerInterfaceWrapper) CreatePortalToken(w http.ResponseWriter, r *h handler.ServeHTTP(w, r) } -// InvalidatePortalTokens operation middleware -func (siw *ServerInterfaceWrapper) InvalidatePortalTokens(w http.ResponseWriter, r *http.Request) { - - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - siw.Handler.InvalidatePortalTokens(w, r) - })) - - for i := len(siw.HandlerMiddlewares) - 1; i >= 0; i-- { - handler = siw.HandlerMiddlewares[i](handler) - } - - handler.ServeHTTP(w, r) -} - -// ListSubjects operation middleware -func (siw *ServerInterfaceWrapper) ListSubjects(w http.ResponseWriter, r *http.Request) { - - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - siw.Handler.ListSubjects(w, r) - })) - - for i := len(siw.HandlerMiddlewares) - 1; i >= 0; i-- { - handler = siw.HandlerMiddlewares[i](handler) - } - - handler.ServeHTTP(w, r) -} - -// UpsertSubject operation middleware -func (siw *ServerInterfaceWrapper) UpsertSubject(w http.ResponseWriter, r *http.Request) { - - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - siw.Handler.UpsertSubject(w, r) - })) - - for i := len(siw.HandlerMiddlewares) - 1; i >= 0; i-- { - handler = siw.HandlerMiddlewares[i](handler) - } - - handler.ServeHTTP(w, r) -} - -// DeleteSubject operation middleware -func (siw *ServerInterfaceWrapper) DeleteSubject(w http.ResponseWriter, r *http.Request) { - - var err error - - // ------------- Path parameter "subjectIdOrKey" ------------- - var subjectIdOrKey string - - err = runtime.BindStyledParameterWithOptions("simple", "subjectIdOrKey", chi.URLParam(r, "subjectIdOrKey"), &subjectIdOrKey, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) - if err != nil { - siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "subjectIdOrKey", Err: err}) - return - } - - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - siw.Handler.DeleteSubject(w, r, subjectIdOrKey) - })) - - for i := len(siw.HandlerMiddlewares) - 1; i >= 0; i-- { - handler = siw.HandlerMiddlewares[i](handler) - } - - handler.ServeHTTP(w, r) -} - -// GetSubject operation middleware -func (siw *ServerInterfaceWrapper) GetSubject(w http.ResponseWriter, r *http.Request) { - - var err error - - // ------------- Path parameter "subjectIdOrKey" ------------- - var subjectIdOrKey string - - err = runtime.BindStyledParameterWithOptions("simple", "subjectIdOrKey", chi.URLParam(r, "subjectIdOrKey"), &subjectIdOrKey, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) - if err != nil { - siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "subjectIdOrKey", Err: err}) - return - } - - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - siw.Handler.GetSubject(w, r, subjectIdOrKey) - })) - - for i := len(siw.HandlerMiddlewares) - 1; i >= 0; i-- { - handler = siw.HandlerMiddlewares[i](handler) - } - - handler.ServeHTTP(w, r) -} - // ListSubjectEntitlements operation middleware func (siw *ServerInterfaceWrapper) ListSubjectEntitlements(w http.ResponseWriter, r *http.Request) { @@ -11413,14 +10476,6 @@ func (siw *ServerInterfaceWrapper) ListSubjectEntitlements(w http.ResponseWriter return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - // Parameter object where we will unmarshal all parameters from the context var params ListSubjectEntitlementsParams @@ -11457,14 +10512,6 @@ func (siw *ServerInterfaceWrapper) CreateEntitlement(w http.ResponseWriter, r *h return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.CreateEntitlement(w, r, subjectIdOrKey) })) @@ -11499,14 +10546,6 @@ func (siw *ServerInterfaceWrapper) ListEntitlementGrants(w http.ResponseWriter, return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - // Parameter object where we will unmarshal all parameters from the context var params ListEntitlementGrantsParams @@ -11560,14 +10599,6 @@ func (siw *ServerInterfaceWrapper) CreateGrant(w http.ResponseWriter, r *http.Re return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.CreateGrant(w, r, subjectIdOrKey, entitlementIdOrFeatureKey) })) @@ -11602,14 +10633,6 @@ func (siw *ServerInterfaceWrapper) OverrideEntitlement(w http.ResponseWriter, r return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.OverrideEntitlement(w, r, subjectIdOrKey, entitlementIdOrFeatureKey) })) @@ -11644,14 +10667,6 @@ func (siw *ServerInterfaceWrapper) GetEntitlementValue(w http.ResponseWriter, r return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - // Parameter object where we will unmarshal all parameters from the context var params GetEntitlementValueParams @@ -11697,14 +10712,6 @@ func (siw *ServerInterfaceWrapper) DeleteEntitlement(w http.ResponseWriter, r *h return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.DeleteEntitlement(w, r, subjectIdOrKey, entitlementId) })) @@ -11739,14 +10746,6 @@ func (siw *ServerInterfaceWrapper) GetEntitlement(w http.ResponseWriter, r *http return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.GetEntitlement(w, r, subjectIdOrKey, entitlementId) })) @@ -11781,14 +10780,6 @@ func (siw *ServerInterfaceWrapper) GetEntitlementHistory(w http.ResponseWriter, return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - // Parameter object where we will unmarshal all parameters from the context var params GetEntitlementHistoryParams @@ -11865,14 +10856,6 @@ func (siw *ServerInterfaceWrapper) ResetEntitlementUsage(w http.ResponseWriter, return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.ResetEntitlementUsage(w, r, subjectIdOrKey, entitlementId) })) @@ -11887,14 +10870,6 @@ func (siw *ServerInterfaceWrapper) ResetEntitlementUsage(w http.ResponseWriter, // SubscriptionsCreate operation middleware func (siw *ServerInterfaceWrapper) SubscriptionsCreate(w http.ResponseWriter, r *http.Request) { - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.SubscriptionsCreate(w, r) })) @@ -11920,14 +10895,6 @@ func (siw *ServerInterfaceWrapper) GetSubscriptionGetSubscription(w http.Respons return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - // Parameter object where we will unmarshal all parameters from the context var params GetSubscriptionGetSubscriptionParams @@ -11972,14 +10939,6 @@ func (siw *ServerInterfaceWrapper) EditSubscription(w http.ResponseWriter, r *ht return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.EditSubscription(w, r, subscriptionId) })) @@ -12005,14 +10964,6 @@ func (siw *ServerInterfaceWrapper) CancelSubscription(w http.ResponseWriter, r * return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.CancelSubscription(w, r, subscriptionId) })) @@ -12038,14 +10989,6 @@ func (siw *ServerInterfaceWrapper) MigrateSubscription(w http.ResponseWriter, r return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.MigrateSubscription(w, r, subscriptionId) })) @@ -12071,14 +11014,6 @@ func (siw *ServerInterfaceWrapper) UnscheduleCancelation(w http.ResponseWriter, return } - ctx := r.Context() - - ctx = context.WithValue(ctx, CloudTokenAuthScopes, []string{}) - - ctx = context.WithValue(ctx, CloudCookieAuthScopes, []string{}) - - r = r.WithContext(ctx) - handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { siw.Handler.UnscheduleCancelation(w, r, subscriptionId) })) @@ -12350,12 +11285,6 @@ func HandlerWithOptions(si ServerInterface, options ChiServerOptions) http.Handl r.Group(func(r chi.Router) { r.Get(options.BaseURL+"/api/v1/meters", wrapper.ListMeters) }) - r.Group(func(r chi.Router) { - r.Post(options.BaseURL+"/api/v1/meters", wrapper.CreateMeter) - }) - r.Group(func(r chi.Router) { - r.Delete(options.BaseURL+"/api/v1/meters/{meterIdOrSlug}", wrapper.DeleteMeter) - }) r.Group(func(r chi.Router) { r.Get(options.BaseURL+"/api/v1/meters/{meterIdOrSlug}", wrapper.GetMeter) }) @@ -12455,21 +11384,6 @@ func HandlerWithOptions(si ServerInterface, options ChiServerOptions) http.Handl r.Group(func(r chi.Router) { r.Post(options.BaseURL+"/api/v1/portal/tokens", wrapper.CreatePortalToken) }) - r.Group(func(r chi.Router) { - r.Post(options.BaseURL+"/api/v1/portal/tokens/invalidate", wrapper.InvalidatePortalTokens) - }) - r.Group(func(r chi.Router) { - r.Get(options.BaseURL+"/api/v1/subjects", wrapper.ListSubjects) - }) - r.Group(func(r chi.Router) { - r.Post(options.BaseURL+"/api/v1/subjects", wrapper.UpsertSubject) - }) - r.Group(func(r chi.Router) { - r.Delete(options.BaseURL+"/api/v1/subjects/{subjectIdOrKey}", wrapper.DeleteSubject) - }) - r.Group(func(r chi.Router) { - r.Get(options.BaseURL+"/api/v1/subjects/{subjectIdOrKey}", wrapper.GetSubject) - }) r.Group(func(r chi.Router) { r.Get(options.BaseURL+"/api/v1/subjects/{subjectIdOrKey}/entitlements", wrapper.ListSubjectEntitlements) }) @@ -12525,687 +11439,677 @@ func HandlerWithOptions(si ServerInterface, options ChiServerOptions) http.Handl // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/api/openapi.yaml b/api/openapi.yaml index ce9b01ad1..c25b4ffaa 100644 --- a/api/openapi.yaml +++ b/api/openapi.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 info: - title: OpenMeter Cloud API + title: OpenMeter API version: 1.0.0 license: name: Apache 2.0 @@ -9,18 +9,17 @@ info: OpenMeter is a cloud native usage metering service. The OpenMeter API allows you to ingest events, query meter usage, and manage resources. tags: - - name: Portal - name: Apps + - name: Portal - name: Notification (Experimental) - name: Entitlements (Experimental) - - name: Customers - name: Billing (Experimental) - name: Plan (Experimental) - name: Subscriptions - name: Events - name: Meters - name: Debug - - name: Subjects + - name: Customers paths: /api/v1/apps: get: @@ -3366,61 +3365,6 @@ paths: $ref: '#/components/schemas/UnexpectedProblemResponse' tags: - Meters - post: - operationId: createMeter - description: Create a meter. - parameters: [] - responses: - '201': - description: The request has succeeded and a new resource has been created as a result. - content: - application/json: - schema: - $ref: '#/components/schemas/Meter' - '400': - description: The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). - content: - application/problem+json: - schema: - $ref: '#/components/schemas/BadRequestProblemResponse' - '401': - description: The request has not been applied because it lacks valid authentication credentials for the target resource. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/UnauthorizedProblemResponse' - '403': - description: The server understood the request but refuses to authorize it. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ForbiddenProblemResponse' - '500': - description: The server encountered an unexpected condition that prevented it from fulfilling the request. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/InternalServerErrorProblemResponse' - '503': - description: The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ServiceUnavailableProblemResponse' - default: - description: An unexpected error response. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/UnexpectedProblemResponse' - tags: - - Meters - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/MeterCreate' /api/v1/meters/{meterIdOrSlug}: get: operationId: getMeter @@ -3485,59 +3429,6 @@ paths: $ref: '#/components/schemas/UnexpectedProblemResponse' tags: - Meters - delete: - operationId: deleteMeter - description: Delete a meter. - parameters: - - name: meterIdOrSlug - in: path - required: true - schema: - type: string - minLength: 1 - maxLength: 64 - pattern: ^[a-z0-9]+(?:_[a-z0-9]+)*$|^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ - responses: - '204': - description: 'There is no content to send for this request, but the headers may be useful. ' - '400': - description: The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). - content: - application/problem+json: - schema: - $ref: '#/components/schemas/BadRequestProblemResponse' - '401': - description: The request has not been applied because it lacks valid authentication credentials for the target resource. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/UnauthorizedProblemResponse' - '403': - description: The server understood the request but refuses to authorize it. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ForbiddenProblemResponse' - '500': - description: The server encountered an unexpected condition that prevented it from fulfilling the request. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/InternalServerErrorProblemResponse' - '503': - description: The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ServiceUnavailableProblemResponse' - default: - description: An unexpected error response. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/UnexpectedProblemResponse' - tags: - - Meters /api/v1/meters/{meterIdOrSlug}/query: get: operationId: queryMeter @@ -5645,7 +5536,6 @@ paths: - Portal security: - PortalTokenAuth: [] - - CloudPortalTokenAuth: [] /api/v1/portal/tokens: post: operationId: createPortalToken @@ -5762,14 +5652,33 @@ paths: $ref: '#/components/schemas/UnexpectedProblemResponse' tags: - Portal - /api/v1/portal/tokens/invalidate: + /api/v1/subjects/{subjectIdOrKey}/entitlements: post: - operationId: invalidatePortalTokens - description: Invalidates consumer portal tokens by ID or subject. - parameters: [] + operationId: createEntitlement + summary: Create an entitlement + description: |- + OpenMeter has three types of entitlements: metered, boolean, and static. The type property determines the type of entitlement. The underlying feature has to be compatible with the entitlement type specified in the request (e.g., a metered entitlement needs a feature associated with a meter). + + - Boolean entitlements define static feature access, e.g. "Can use SSO authentication". + - Static entitlements let you pass along a configuration while granting access, e.g. "Using this feature with X Y settings" (passed in the config). + - Metered entitlements have many use cases, from setting up usage-based access to implementing complex credit systems. Example: The customer can use 10000 AI tokens during the usage period of the entitlement. + + A given subject can only have one active (non-deleted) entitlement per featureKey. If you try to create a new entitlement for a featureKey that already has an active entitlement, the request will fail with a 409 error. + + Once an entitlement is created you cannot modify it, only delete it. + parameters: + - name: subjectIdOrKey + in: path + required: true + schema: + type: string responses: - '204': - description: 'There is no content to send for this request, but the headers may be useful. ' + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Entitlement' '400': description: The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). content: @@ -5788,6 +5697,12 @@ paths: application/problem+json: schema: $ref: '#/components/schemas/ForbiddenProblemResponse' + '409': + description: The request could not be completed due to a conflict with the current state of the target resource. + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ConflictProblemResponse' '500': description: The server encountered an unexpected condition that prevented it from fulfilling the request. content: @@ -5807,25 +5722,29 @@ paths: schema: $ref: '#/components/schemas/UnexpectedProblemResponse' tags: - - Portal + - Entitlements (Experimental) requestBody: required: true content: application/json: schema: - type: object - properties: - id: - type: string - description: Invalidate a portal token by ID. - subject: - type: string - description: Invalidate all portal tokens for a subject. - /api/v1/subjects: + $ref: '#/components/schemas/EntitlementCreateInputs' get: - operationId: listSubjects - description: List subjects. - parameters: [] + operationId: listSubjectEntitlements + description: List all entitlements for a subject. For checking entitlement access, use the /value endpoint instead. + parameters: + - name: subjectIdOrKey + in: path + required: true + schema: + type: string + - name: includeDeleted + in: query + required: false + schema: + type: boolean + default: false + explode: false responses: '200': description: The request has succeeded. @@ -5834,7 +5753,7 @@ paths: schema: type: array items: - $ref: '#/components/schemas/Subject' + $ref: '#/components/schemas/Entitlement' '400': description: The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). content: @@ -5872,15 +5791,36 @@ paths: schema: $ref: '#/components/schemas/UnexpectedProblemResponse' tags: - - Subjects - post: - operationId: upsertSubject - description: |- - Upserts a subject. Creates or updates subject. - - If the subject doesn't exist, it will be created. - If the subject exists, it will be partially updated with the provided fields. - parameters: [] + - Entitlements (Experimental) + /api/v1/subjects/{subjectIdOrKey}/entitlements/{entitlementIdOrFeatureKey}/grants: + get: + operationId: listEntitlementGrants + description: List all grants issued for an entitlement. The entitlement can be defined either by its id or featureKey. + parameters: + - name: subjectIdOrKey + in: path + required: true + schema: + type: string + - name: entitlementIdOrFeatureKey + in: path + required: true + schema: + type: string + - name: includeDeleted + in: query + required: false + schema: + type: boolean + default: false + explode: false + - name: orderBy + in: query + required: false + schema: + $ref: '#/components/schemas/GrantOrderBy' + default: updatedAt + explode: false responses: '200': description: The request has succeeded. @@ -5889,7 +5829,7 @@ paths: schema: type: array items: - $ref: '#/components/schemas/Subject' + $ref: '#/components/schemas/EntitlementGrant' '400': description: The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). content: @@ -5927,32 +5867,39 @@ paths: schema: $ref: '#/components/schemas/UnexpectedProblemResponse' tags: - - Subjects - requestBody: - required: true - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/SubjectUpsert' - /api/v1/subjects/{subjectIdOrKey}: - get: - operationId: getSubject - description: Get subject by ID or key. + - Entitlements (Experimental) + post: + operationId: createGrant + description: |- + Grants define a behavior of granting usage for a metered entitlement. They can have complicated recurrence and rollover rules, thanks to which you can define a wide range of access patterns with a single grant, in most cases you don't have to periodically create new grants. You can only issue grants for active metered entitlements. + + A grant defines a given amount of usage that can be consumed for the entitlement. The grant is in effect between its effective date and its expiration date. Specifying both is mandatory for new grants. + + Grants have a priority setting that determines their order of use. Lower numbers have higher priority, with 0 being the highest priority. + + Grants can have a recurrence setting intended to automate the manual reissuing of grants. For example, a daily recurrence is equal to reissuing that same grant every day (ignoring rollover settings). + + Rollover settings define what happens to the remaining balance of a grant at a reset. Balance_After_Reset = MIN(MaxRolloverAmount, MAX(Balance_Before_Reset, MinRolloverAmount)) + + Grants cannot be changed once created, only deleted. This is to ensure that balance is deterministic regardless of when it is queried. parameters: - name: subjectIdOrKey in: path required: true schema: type: string + - name: entitlementIdOrFeatureKey + in: path + required: true + schema: + type: string responses: - '200': - description: The request has succeeded. + '201': + description: The request has succeeded and a new resource has been created as a result. content: application/json: schema: - $ref: '#/components/schemas/Subject' + $ref: '#/components/schemas/EntitlementGrant' '400': description: The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). content: @@ -5971,12 +5918,12 @@ paths: application/problem+json: schema: $ref: '#/components/schemas/ForbiddenProblemResponse' - '404': - description: The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. + '409': + description: The request could not be completed due to a conflict with the current state of the target resource. content: application/problem+json: schema: - $ref: '#/components/schemas/NotFoundProblemResponse' + $ref: '#/components/schemas/ConflictProblemResponse' '500': description: The server encountered an unexpected condition that prevented it from fulfilling the request. content: @@ -5996,362 +5943,20 @@ paths: schema: $ref: '#/components/schemas/UnexpectedProblemResponse' tags: - - Subjects - delete: - operationId: deleteSubject - description: Delete subject by ID or key. - parameters: - - name: subjectIdOrKey - in: path - required: true - schema: - type: string - responses: - '204': - description: 'There is no content to send for this request, but the headers may be useful. ' - '400': - description: The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). - content: - application/problem+json: - schema: - $ref: '#/components/schemas/BadRequestProblemResponse' - '401': - description: The request has not been applied because it lacks valid authentication credentials for the target resource. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/UnauthorizedProblemResponse' - '403': - description: The server understood the request but refuses to authorize it. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ForbiddenProblemResponse' - '500': - description: The server encountered an unexpected condition that prevented it from fulfilling the request. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/InternalServerErrorProblemResponse' - '503': - description: The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ServiceUnavailableProblemResponse' - default: - description: An unexpected error response. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/UnexpectedProblemResponse' - tags: - - Subjects - /api/v1/subjects/{subjectIdOrKey}/entitlements: - post: - operationId: createEntitlement - summary: Create an entitlement - description: |- - OpenMeter has three types of entitlements: metered, boolean, and static. The type property determines the type of entitlement. The underlying feature has to be compatible with the entitlement type specified in the request (e.g., a metered entitlement needs a feature associated with a meter). - - - Boolean entitlements define static feature access, e.g. "Can use SSO authentication". - - Static entitlements let you pass along a configuration while granting access, e.g. "Using this feature with X Y settings" (passed in the config). - - Metered entitlements have many use cases, from setting up usage-based access to implementing complex credit systems. Example: The customer can use 10000 AI tokens during the usage period of the entitlement. - - A given subject can only have one active (non-deleted) entitlement per featureKey. If you try to create a new entitlement for a featureKey that already has an active entitlement, the request will fail with a 409 error. - - Once an entitlement is created you cannot modify it, only delete it. - parameters: - - name: subjectIdOrKey - in: path - required: true - schema: - type: string - responses: - '201': - description: The request has succeeded and a new resource has been created as a result. - content: - application/json: - schema: - $ref: '#/components/schemas/Entitlement' - '400': - description: The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). - content: - application/problem+json: - schema: - $ref: '#/components/schemas/BadRequestProblemResponse' - '401': - description: The request has not been applied because it lacks valid authentication credentials for the target resource. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/UnauthorizedProblemResponse' - '403': - description: The server understood the request but refuses to authorize it. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ForbiddenProblemResponse' - '409': - description: The request could not be completed due to a conflict with the current state of the target resource. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ConflictProblemResponse' - '500': - description: The server encountered an unexpected condition that prevented it from fulfilling the request. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/InternalServerErrorProblemResponse' - '503': - description: The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ServiceUnavailableProblemResponse' - default: - description: An unexpected error response. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/UnexpectedProblemResponse' - tags: - - Entitlements (Experimental) - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/EntitlementCreateInputs' - get: - operationId: listSubjectEntitlements - description: List all entitlements for a subject. For checking entitlement access, use the /value endpoint instead. - parameters: - - name: subjectIdOrKey - in: path - required: true - schema: - type: string - - name: includeDeleted - in: query - required: false - schema: - type: boolean - default: false - explode: false - responses: - '200': - description: The request has succeeded. - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/Entitlement' - '400': - description: The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). - content: - application/problem+json: - schema: - $ref: '#/components/schemas/BadRequestProblemResponse' - '401': - description: The request has not been applied because it lacks valid authentication credentials for the target resource. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/UnauthorizedProblemResponse' - '403': - description: The server understood the request but refuses to authorize it. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ForbiddenProblemResponse' - '500': - description: The server encountered an unexpected condition that prevented it from fulfilling the request. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/InternalServerErrorProblemResponse' - '503': - description: The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ServiceUnavailableProblemResponse' - default: - description: An unexpected error response. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/UnexpectedProblemResponse' - tags: - - Entitlements (Experimental) - /api/v1/subjects/{subjectIdOrKey}/entitlements/{entitlementIdOrFeatureKey}/grants: - get: - operationId: listEntitlementGrants - description: List all grants issued for an entitlement. The entitlement can be defined either by its id or featureKey. - parameters: - - name: subjectIdOrKey - in: path - required: true - schema: - type: string - - name: entitlementIdOrFeatureKey - in: path - required: true - schema: - type: string - - name: includeDeleted - in: query - required: false - schema: - type: boolean - default: false - explode: false - - name: orderBy - in: query - required: false - schema: - $ref: '#/components/schemas/GrantOrderBy' - default: updatedAt - explode: false - responses: - '200': - description: The request has succeeded. - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/EntitlementGrant' - '400': - description: The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). - content: - application/problem+json: - schema: - $ref: '#/components/schemas/BadRequestProblemResponse' - '401': - description: The request has not been applied because it lacks valid authentication credentials for the target resource. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/UnauthorizedProblemResponse' - '403': - description: The server understood the request but refuses to authorize it. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ForbiddenProblemResponse' - '500': - description: The server encountered an unexpected condition that prevented it from fulfilling the request. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/InternalServerErrorProblemResponse' - '503': - description: The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ServiceUnavailableProblemResponse' - default: - description: An unexpected error response. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/UnexpectedProblemResponse' - tags: - - Entitlements (Experimental) - post: - operationId: createGrant - description: |- - Grants define a behavior of granting usage for a metered entitlement. They can have complicated recurrence and rollover rules, thanks to which you can define a wide range of access patterns with a single grant, in most cases you don't have to periodically create new grants. You can only issue grants for active metered entitlements. - - A grant defines a given amount of usage that can be consumed for the entitlement. The grant is in effect between its effective date and its expiration date. Specifying both is mandatory for new grants. - - Grants have a priority setting that determines their order of use. Lower numbers have higher priority, with 0 being the highest priority. - - Grants can have a recurrence setting intended to automate the manual reissuing of grants. For example, a daily recurrence is equal to reissuing that same grant every day (ignoring rollover settings). - - Rollover settings define what happens to the remaining balance of a grant at a reset. Balance_After_Reset = MIN(MaxRolloverAmount, MAX(Balance_Before_Reset, MinRolloverAmount)) - - Grants cannot be changed once created, only deleted. This is to ensure that balance is deterministic regardless of when it is queried. - parameters: - - name: subjectIdOrKey - in: path - required: true - schema: - type: string - - name: entitlementIdOrFeatureKey - in: path - required: true - schema: - type: string - responses: - '201': - description: The request has succeeded and a new resource has been created as a result. - content: - application/json: - schema: - $ref: '#/components/schemas/EntitlementGrant' - '400': - description: The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). - content: - application/problem+json: - schema: - $ref: '#/components/schemas/BadRequestProblemResponse' - '401': - description: The request has not been applied because it lacks valid authentication credentials for the target resource. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/UnauthorizedProblemResponse' - '403': - description: The server understood the request but refuses to authorize it. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ForbiddenProblemResponse' - '409': - description: The request could not be completed due to a conflict with the current state of the target resource. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ConflictProblemResponse' - '500': - description: The server encountered an unexpected condition that prevented it from fulfilling the request. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/InternalServerErrorProblemResponse' - '503': - description: The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/ServiceUnavailableProblemResponse' - default: - description: An unexpected error response. - content: - application/problem+json: - schema: - $ref: '#/components/schemas/UnexpectedProblemResponse' - tags: - - Entitlements (Experimental) - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/EntitlementGrantCreateInput' - /api/v1/subjects/{subjectIdOrKey}/entitlements/{entitlementIdOrFeatureKey}/override: - put: - operationId: overrideEntitlement - description: |- - Overriding an entitlement creates a new entitlement from the provided inputs and soft deletes the previous entitlement for the provided subject-feature pair. If the previous entitlement is already deleted or otherwise doesnt exist, the override will fail. - - This endpoint is useful for upgrades, downgrades, or other changes to entitlements that require a new entitlement to be created with zero downtime. + - Entitlements (Experimental) + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/EntitlementGrantCreateInput' + /api/v1/subjects/{subjectIdOrKey}/entitlements/{entitlementIdOrFeatureKey}/override: + put: + operationId: overrideEntitlement + description: |- + Overriding an entitlement creates a new entitlement from the provided inputs and soft deletes the previous entitlement for the provided subject-feature pair. If the previous entitlement is already deleted or otherwise doesnt exist, the override will fail. + + This endpoint is useful for upgrades, downgrades, or other changes to entitlements that require a new entitlement to be created with zero downtime. parameters: - name: subjectIdOrKey in: path @@ -7267,9 +6872,6 @@ paths: $ref: '#/components/schemas/UnexpectedProblemResponse' tags: - Subscriptions -security: - - CloudTokenAuth: [] - - CloudCookieAuth: [] components: parameters: BillingInvoiceListParams.expand: @@ -9893,6 +9495,12 @@ components: AppIdOrType can be used to reference an app during creation only. This can be either an AppType or the ULID of an app. + BillingWorkflowAppReferenceType: + type: string + enum: + - app_id + - app_type + title: App reference type specifies the type of reference inside an app reference BillingWorkflowCollectionAlignment: type: string enum: @@ -9944,6 +9552,13 @@ components: default: P7D description: WorkflowInvoice represents the invoice settings for a billing workflow title: Workflow invoice settings + BillingWorkflowLineResolution: + type: string + enum: + - day + - period + description: LineResolution specifies how the line items should be resolved in the invoice + title: Item resolution BillingWorkflowPaymentSettings: type: object properties: @@ -10372,6 +9987,37 @@ components: Mapping to attribute metered usage to the customer. One customer can have multiple subjects, but one subject can only belong to one customer. + Discount: + type: object + allOf: + - $ref: '#/components/schemas/DiscountPercentage' + description: |- + A discount on a price. + One of: percentage, amount, or usage. + DiscountPercentage: + type: object + required: + - type + - percentage + properties: + type: + type: string + enum: + - percentage + description: The type of the discount. + title: Type + percentage: + type: number + minimum: 0 + maximum: 100 + description: The percentage of the discount. + title: Percentage + description: Percentage discount. + DiscountType: + type: string + enum: + - percentage + description: The type of the discount. Entitlement: anyOf: - $ref: '#/components/schemas/EntitlementMetered' @@ -10583,6 +10229,34 @@ components: static: '#/components/schemas/EntitlementStaticCreateInputs' boolean: '#/components/schemas/EntitlementBooleanCreateInputs' description: Create inputs for entitlement + EntitlementCreateSharedFields: + type: object + properties: + featureKey: + type: string + minLength: 1 + maxLength: 64 + pattern: ^[a-z0-9]+(?:_[a-z0-9]+)*$ + description: |- + The feature the subject is entitled to use. + Either featureKey or featureId is required. + example: example-feature-key + featureId: + type: string + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV + pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + description: |- + The feature the subject is entitled to use. + Either featureKey or featureId is required. + metadata: + allOf: + - $ref: '#/components/schemas/Metadata' + description: Additional metadata for the feature. + usagePeriod: + allOf: + - $ref: '#/components/schemas/RecurringPeriodCreateInput' + description: The usage period associated with the entitlement. + description: Shared fields for entitlement creation EntitlementGrant: type: object required: @@ -10886,6 +10560,37 @@ components: description: |- Metered entitlements are useful for many different use cases, from setting up usage based access to implementing complex credit systems. Access is determined based on feature usage using a balance calculation (the "usage allowance" provided by the issued grants is "burnt down" by the usage). + EntitlementMeteredCalculatedFields: + type: object + required: + - lastReset + - currentUsagePeriod + - measureUsageFrom + - usagePeriod + properties: + lastReset: + type: string + format: date-time + example: 2023-01-01T01:01:01.001Z + description: The time the last reset happened. + readOnly: true + currentUsagePeriod: + allOf: + - $ref: '#/components/schemas/Period' + description: The current usage period. + readOnly: true + measureUsageFrom: + type: string + format: date-time + example: 2023-01-01T01:01:01.001Z + description: The time from which usage is measured. If not specified on creation, defaults to entitlement creation time. + readOnly: true + usagePeriod: + allOf: + - $ref: '#/components/schemas/RecurringPeriod' + description: THe usage period of the entitlement. + readOnly: true + description: Calculated fields for metered entitlements. EntitlementMeteredCreateInputs: type: object required: @@ -11685,6 +11390,11 @@ components: $ref: '#/components/schemas/BillingInvoice' description: The items in the current page. description: Paginated response + ListAppsRequest: + type: object + allOf: + - $ref: '#/components/schemas/PaginatedQuery' + description: Query params for listing installed apps ListEntitlementsResult: oneOf: - type: array @@ -11894,77 +11604,6 @@ components: x-go-type-import: path: github.com/openmeterio/openmeter/pkg/models x-go-type: models.MeterAggregation - MeterCreate: - type: object - required: - - slug - - aggregation - - windowSize - - eventType - properties: - slug: - type: string - minLength: 1 - maxLength: 64 - pattern: ^[a-z0-9]+(?:_[a-z0-9]+)*$ - description: |- - A unique, human-readable identifier for the meter. - Must consist only alphanumeric and underscore characters. - example: tokens_total - description: - type: string - example: AI Token Usage - minLength: 1 - description: A description of the meter. - aggregation: - allOf: - - $ref: '#/components/schemas/MeterAggregation' - example: SUM - windowSize: - allOf: - - $ref: '#/components/schemas/WindowSize' - example: MINUTE - eventType: - type: string - example: prompt - minLength: 1 - description: The event type to aggregate. - valueProperty: - type: string - example: $.tokens - minLength: 1 - description: |- - JSONPath expression to extract the value from the ingested event's data property. - - The ingested value for SUM, AVG, MIN, and MAX aggregations is a number or a string that can be parsed to a number. - - For UNIQUE_COUNT aggregation, the ingested value must be a string. For COUNT aggregation the valueProperty is ignored. - groupBy: - type: object - additionalProperties: - type: string - example: - type: $.type - description: |- - Named JSONPath expressions to extract the group by values from the event data. - - Keys must be unique and consist only alphanumeric and underscore characters. - - TODO: add key format enforcement - example: - slug: tokens_total - description: AI Token Usage - aggregation: SUM - windowSize: MINUTE - eventType: prompt - valueProperty: $.tokens - groupBy: - model: $.model - type: $.type - description: A meter is a configuration that defines how to match and aggregate events. - x-go-type-import: - path: github.com/openmeterio/openmeter/pkg/models - x-go-type: models.Meter MeterQueryResult: type: object required: @@ -12630,6 +12269,26 @@ components: allOf: - $ref: '#/components/schemas/NotificationRuleBalanceThresholdCreateRequest' description: Union type for requests creating new notification rule with certain type. + NotificationRuleMeta: + type: object + required: + - id + - type + properties: + id: + type: string + example: 01ARZ3NDEKTSV4RRFFQ69G5FAV + pattern: ^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$ + description: Identifies the notification rule. + title: Rule Unique Identifier + readOnly: true + type: + allOf: + - $ref: '#/components/schemas/NotificationEventType' + description: Notification rule type. + title: Rule Type + readOnly: true + description: Metadata only fields of a notification channel. NotificationRuleOrderBy: type: string enum: @@ -12679,6 +12338,18 @@ components: - server_error - temporarily_unavailable description: OAuth2 authorization code grant error types. + PaginatedQuery: + type: object + properties: + page: + type: integer + description: The page number. + default: 1 + pageSize: + type: integer + description: The number of items in the page. + default: 100 + description: Paginated query parameters. Percentage: type: string pattern: ^\-?[0-9]+(\.[0-9]+)?%$ @@ -13170,6 +12841,60 @@ components: A phase switch occurs only at the end of a billing period, ensuring that a single subscription invoice will not include charges from different phase prices. title: Plan phases description: Resource create or update operation model. + PlanVariant: + type: object + required: + - currency + properties: + currency: + $ref: '#/components/schemas/CurrencyCode' + description: |- + A plan variant. + A set of properties that can be used to select a specific configuration of a plan. + PlanVariantOverridePreset: + type: object + required: + - variant + properties: + variant: + allOf: + - $ref: '#/components/schemas/PlanVariant' + example: + currency: USD + description: The variant of the plan. + title: Variant + currency: + allOf: + - $ref: '#/components/schemas/CurrencyCode' + description: The currency code. + title: Currency + rateCards: + type: object + properties: + add: + type: array + items: + $ref: '#/components/schemas/RateCard' + description: Add rate cards to the plan. + title: Add rate card + remove: + type: array + items: + type: string + minLength: 1 + maxLength: 64 + pattern: ^[a-z0-9]+(?:_[a-z0-9]+)*$ + description: A key is a unique string that is used to identify a resource. + description: Remove rate cards from the plan. + title: Remove rate card + description: The rate card overrides. + title: Rate card overrides + discount: + allOf: + - $ref: '#/components/schemas/AppliedDiscount' + description: The discount on the plan. + title: Discount + description: Plan variant override preset. PortalToken: type: object required: @@ -13221,6 +12946,20 @@ components: allOf: - $ref: '#/components/schemas/UnexpectedProblemResponse' description: One or more conditions given in the request header fields evaluated to false when tested on the server. + Price: + anyOf: + - $ref: '#/components/schemas/FlatPrice' + - $ref: '#/components/schemas/UnitPrice' + - $ref: '#/components/schemas/TieredPrice' + discriminator: + propertyName: type + mapping: + flat: '#/components/schemas/FlatPrice' + unit: '#/components/schemas/UnitPrice' + tiered: '#/components/schemas/TieredPrice' + description: |- + Price. + One of: flat, unit, or tiered. PricePaymentTerm: type: string enum: @@ -13293,6 +13032,13 @@ components: description: |- A price tier. At least one price component is required in each tier. + PriceType: + type: string + enum: + - flat + - unit + - tiered + description: The type of the price. ProfilePaginatedResponse: type: object required: @@ -13573,6 +13319,71 @@ components: Defaults to the billing cadence of the rate card. title: Usage Period description: The entitlement template with a metered entitlement. + RateCardOverride: + anyOf: + - $ref: '#/components/schemas/RateCardOverrideFlatFee' + - $ref: '#/components/schemas/RateCardOverrideUsageBased' + discriminator: + propertyName: type + mapping: + flat_fee: '#/components/schemas/RateCardOverrideFlatFee' + usage_based: '#/components/schemas/RateCardOverrideUsageBased' + description: Rate card override. + RateCardOverrideFlatFee: + type: object + required: + - type + - price + properties: + type: + type: string + enum: + - flat_fee + description: The type of the RateCard. + title: RateCard type + price: + type: object + allOf: + - $ref: '#/components/schemas/FlatPriceWithPaymentTerm' + nullable: true + example: {} + description: |- + The price of the rate card. + When null, the feature or service is free. + title: Price + description: Flat fee rate card override. + RateCardOverrideUsageBased: + type: object + required: + - type + - price + properties: + type: + type: string + enum: + - usage_based + description: The type of the RateCard. + title: RateCard type + price: + anyOf: + - type: object + allOf: + - $ref: '#/components/schemas/UnitPriceWithCommitments' + nullable: true + - type: object + allOf: + - $ref: '#/components/schemas/TieredPriceWithCommitments' + nullable: true + - type: object + allOf: + - $ref: '#/components/schemas/FlatPriceWithPaymentTerm' + nullable: true + example: {} + description: |- + The price of the rate card. + When null, the feature or service is free. + title: Price + description: Usage-based rate card override. RateCardStaticEntitlement: type: object required: @@ -13593,6 +13404,12 @@ components: example: '{ "integrations": ["github"] }' description: The JSON parsable config of the entitlement. This value is also returned when checking entitlement access and it is useful for configuring fine-grained access settings to the feature, implemented in your own system. Has to be an object. description: Entitlement template of a static entitlement. + RateCardType: + type: string + enum: + - flat_fee + - usage_based + description: The type of the rate card. RateCardUpdateItem: oneOf: - $ref: '#/components/schemas/RateCardFlatFeeUpdateItem' @@ -13949,6 +13766,22 @@ components: - ASC - DESC description: The order direction. + SpendCommitments: + type: object + properties: + minimumAmount: + allOf: + - $ref: '#/components/schemas/Numeric' + description: The customer is committed to spend at least the amount. + title: Minimum amount + maximumAmount: + allOf: + - $ref: '#/components/schemas/Numeric' + description: The customer is limited to spend at most the amount. + title: Maximum amount + description: |- + Spending commitments. + The customer is committed to spend at least the minimum amount and at most the maximum amount. StripeApp: type: object required: @@ -14220,48 +14053,6 @@ components: currentPeriodEnd: 2023-02-01T00:00:00Z stripeCustomerId: cus_JMOlctsKV8 description: A subject is a unique identifier for a user or entity. - SubjectUpsert: - type: object - required: - - key - properties: - key: - type: string - example: customer-id - description: A unique, human-readable identifier for the subject. - displayName: - type: string - nullable: true - example: Customer Name - description: A human-readable display name for the subject. - metadata: - type: object - additionalProperties: {} - nullable: true - example: {} - currentPeriodStart: - type: string - format: date-time - example: 2023-01-01T00:00:00Z - description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' - currentPeriodEnd: - type: string - format: date-time - example: 2023-02-01T00:00:00Z - description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' - stripeCustomerId: - type: string - nullable: true - example: cus_JMOlctsKV8 - example: - key: customer-id - displayName: Customer Name - metadata: - hubspotId: '123456' - currentPeriodStart: 2023-01-01T00:00:00Z - currentPeriodEnd: 2023-02-01T00:00:00Z - stripeCustomerId: cus_JMOlctsKV8 - description: A subject is a unique identifier for a user or entity. Subscription: type: object required: @@ -14656,6 +14447,77 @@ components: - feature description: Describes what access is gained via the SubscriptionItem description: The actual contents of the Subscription, what the user gets, what they pay, etc... + SubscriptionPhase: + type: object + required: + - name + - createdAt + - updatedAt + - key + - duration + - activeFrom + properties: + name: + type: string + minLength: 1 + maxLength: 256 + description: Human-readable name for the resource. Between 1 and 256 characters. + title: Display name + description: + type: string + maxLength: 1024 + description: Optional description of the resource. Maximum 1024 characters. + title: Description + metadata: + allOf: + - $ref: '#/components/schemas/Metadata' + description: Additional metadata for the resource. + title: Metadata + createdAt: + type: string + format: date-time + example: 2024-01-01T01:01:01.001Z + description: Timestamp of when the resource was created. + title: Creation Time + readOnly: true + updatedAt: + type: string + format: date-time + example: 2024-01-01T01:01:01.001Z + description: Timestamp of when the resource was last updated. + title: Last Update Time + readOnly: true + deletedAt: + type: string + format: date-time + example: 2024-01-01T01:01:01.001Z + description: Timestamp of when the resource was permanently deleted. + title: Deletion Time + readOnly: true + key: + type: string + minLength: 1 + maxLength: 64 + pattern: ^[a-z0-9]+(?:_[a-z0-9]+)*$ + description: A locally unique identifier for the resource. + duration: + type: string + format: duration + example: P1M + description: The intended duration of the new phase. + title: Duration + discounts: + type: array + items: + $ref: '#/components/schemas/AppliedDiscount' + description: The discounts on the plan. + title: Discount + activeFrom: + type: string + format: date-time + example: 2023-01-01T01:01:01.001Z + description: The time from which the phase is active. + description: Subscription phase, analogous to plan phases. SubscriptionPhaseCreate: type: object required: @@ -14794,6 +14656,35 @@ components: description: Stripe tax config. title: Stripe tax config description: Set of provider specific tax configs. + TieredPrice: + type: object + required: + - type + - mode + - tiers + properties: + type: + type: string + enum: + - tiered + mode: + allOf: + - $ref: '#/components/schemas/TieredPriceMode' + description: |- + Defines if the tiering mode is volume-based or graduated: + - In `volume`-based tiering, the maximum quantity within a period determines the per unit price. + - In `graduated` tiering, pricing can change as the quantity grows. + title: Mode + tiers: + type: array + items: + $ref: '#/components/schemas/PriceTier' + minItems: 1 + description: |- + The tiers of the tiered price. + At least one price component is required in each tier. + title: Tiers + description: Tiered price. TieredPriceMode: type: string enum: @@ -15023,28 +14914,50 @@ components: $ref: '#/components/schemas/GrantBurnDownHistorySegment' description: Grant burndown history. description: The windowed balance history. + queryCustomerList: + type: object + properties: + order: + allOf: + - $ref: '#/components/schemas/SortOrder' + example: ASC + description: The order direction. + default: ASC + orderBy: + allOf: + - $ref: '#/components/schemas/CustomerOrderBy' + description: The order by field. + includeDeleted: + type: boolean + description: Include deleted customers. + default: false + name: + type: string + example: ACME + description: |- + Filter customers by name. + Case-insensitive partial match. + primaryEmail: + type: string + example: acme@test.com + description: |- + Filter customers by primary email. + Case-insensitive partial match. + subject: + type: string + example: my_subject_key + description: |- + Filter customers by usage attribution subject. + Case-insensitive partial match. + allOf: + - $ref: '#/components/schemas/PaginatedQuery' + description: Query params for listing customers. securitySchemes: - CloudTokenAuth: - type: http - scheme: bearer - description: Cloud API token. - CloudCookieAuth: - type: apiKey - in: cookie - name: __session - description: Cloud API web app cookie. PortalTokenAuth: type: http scheme: bearer description: Consumer portal token. - CloudPortalTokenAuth: - type: http - scheme: bearer - description: Cloud consumer portal token. servers: - - url: https://openmeter.cloud - description: Cloud - variables: {} - - url: https://127.0.0.1:8888 + - url: https://127.0.0.1 description: Local variables: {} diff --git a/api/spec/lib/rules/casing.js b/api/spec/lib/rules/casing.js index 6cebb9aca..1a4c7c746 100644 --- a/api/spec/lib/rules/casing.js +++ b/api/spec/lib/rules/casing.js @@ -19,22 +19,5 @@ export const casingRule = createRule({ }) } }, - // enum: (node) => { - // for (const variant of node.members.values()) { - // if ( - // typeof variant.name === 'string' && - // !isSnakeCase(variant.value || variant.name) - // ) { - // context.reportDiagnostic({ - // target: variant, - // format: { - // type: 'enum', - // casing: 'snake_case', - // }, - // messageId: 'value', - // }) - // } - // } - // }, }), }) diff --git a/api/spec/src/app/stripe.tsp b/api/spec/src/app/stripe.tsp index 4e9c43d04..d1420b94b 100644 --- a/api/spec/src/app/stripe.tsp +++ b/api/spec/src/app/stripe.tsp @@ -20,7 +20,7 @@ namespace OpenMeter.App; /** * Stripe specific APIs. */ -@tag("Stripe") +@tag("Apps") interface AppStripe { /** * Stripe webhook. diff --git a/api/spec/src/cloud/main.tsp b/api/spec/src/cloud/main.tsp index dd6f7ad5f..1ed3e853f 100644 --- a/api/spec/src/cloud/main.tsp +++ b/api/spec/src/cloud/main.tsp @@ -65,18 +65,6 @@ namespace OpenMeterCloud.Portal { @route("/api/v1/portal/tokens") @tag("Portal") interface Tokens extends OpenMeter.Portal.Tokens { - /** - * List tokens. - */ - @get - @operationId("listPortalTokens") - list( - @query - @minValue(1) - @maxValue(100) - limit?: integer = 25, - ): OpenMeter.Portal.Token[] | OpenMeter.CommonErrors; - /** * Invalidates consumer portal tokens by ID or subject. */ @@ -98,7 +86,7 @@ namespace OpenMeterCloud.Portal { @route("/api/v1/portal/meters") @tag("Portal") - @useAuth(PortalTokenAuth | CloudPortalTokenAuth) + @useAuth(CloudPortalTokenAuth) interface Meters extends OpenMeter.Portal.Meters {} } diff --git a/api/spec/src/portal.tsp b/api/spec/src/portal.tsp index f9d7433f3..3558bae7b 100644 --- a/api/spec/src/portal.tsp +++ b/api/spec/src/portal.tsp @@ -22,6 +22,18 @@ interface Tokens { @body body: Token; } | CommonErrors; + + /** + * List tokens. + */ + @get + @operationId("listPortalTokens") + list( + @query + @minValue(1) + @maxValue(100) + limit?: integer = 25, + ): Token[] | CommonErrors; } /** diff --git a/openmeter/server/router/meter.go b/openmeter/server/router/meter.go index 9925f5ac6..682c0a38f 100644 --- a/openmeter/server/router/meter.go +++ b/openmeter/server/router/meter.go @@ -35,24 +35,6 @@ func (a *Router) ListMeters(w http.ResponseWriter, r *http.Request) { _ = render.RenderList(w, r, list) } -func (a *Router) CreateMeter(w http.ResponseWriter, r *http.Request) { - ctx := contextx.WithAttr(r.Context(), "operation", "createMeter") - - err := fmt.Errorf("not implemented: manage meters via config or checkout OpenMeter Cloud") - - models.NewStatusProblem(ctx, err, http.StatusNotImplemented).Respond(w) -} - -func (a *Router) DeleteMeter(w http.ResponseWriter, r *http.Request, meterIdOrSlug string) { - ctx := contextx.WithAttr(r.Context(), "operation", "deleteMeter") - ctx = contextx.WithAttr(ctx, "id", meterIdOrSlug) - - err := fmt.Errorf("not implemented: manage meters via config or checkout OpenMeter Cloud") - - a.config.ErrorHandler.HandleContext(ctx, err) - models.NewStatusProblem(ctx, err, http.StatusNotImplemented).Respond(w) -} - func (a *Router) GetMeter(w http.ResponseWriter, r *http.Request, meterIdOrSlug string) { ctx := contextx.WithAttr(r.Context(), "operation", "getMeter") ctx = contextx.WithAttr(ctx, "id", meterIdOrSlug) diff --git a/openmeter/server/router/subject.go b/openmeter/server/router/subject.go deleted file mode 100644 index e01cba1a2..000000000 --- a/openmeter/server/router/subject.go +++ /dev/null @@ -1,42 +0,0 @@ -package router - -import ( - "fmt" - "net/http" - - "github.com/openmeterio/openmeter/pkg/contextx" - "github.com/openmeterio/openmeter/pkg/models" -) - -func (a *Router) UpsertSubject(w http.ResponseWriter, r *http.Request) { - ctx := contextx.WithAttr(r.Context(), "operation", "upsertSubject") - - err := fmt.Errorf("not implemented: subject management is only available in OpenMeter Cloud") - - models.NewStatusProblem(ctx, err, http.StatusNotImplemented).Respond(w) -} - -func (a *Router) GetSubject(w http.ResponseWriter, r *http.Request, idOrKey string) { - ctx := contextx.WithAttr(r.Context(), "operation", "getSubject") - ctx = contextx.WithAttr(ctx, "id", idOrKey) - - err := fmt.Errorf("not implemented: subjects are only available in OpenMeter Cloud") - - models.NewStatusProblem(ctx, err, http.StatusNotImplemented).Respond(w) -} - -func (a *Router) ListSubjects(w http.ResponseWriter, r *http.Request) { - ctx := contextx.WithAttr(r.Context(), "operation", "listSubjects") - err := fmt.Errorf("not implemented: subjects are only available in OpenMeter Cloud") - - models.NewStatusProblem(ctx, err, http.StatusNotImplemented).Respond(w) -} - -func (a *Router) DeleteSubject(w http.ResponseWriter, r *http.Request, idOrKey string) { - ctx := contextx.WithAttr(r.Context(), "operation", "deleteSubject") - ctx = contextx.WithAttr(ctx, "id", idOrKey) - - err := fmt.Errorf("not implemented: subjects are only available in OpenMeter Cloud") - - models.NewStatusProblem(ctx, err, http.StatusNotImplemented).Respond(w) -} diff --git a/openmeter/server/server_test.go b/openmeter/server/server_test.go index 8cbcb4f53..fba245f1c 100644 --- a/openmeter/server/server_test.go +++ b/openmeter/server/server_test.go @@ -223,26 +223,6 @@ func TestRoutes(t *testing.T) { body: mockMeters, }, }, - { - name: "create meter", - req: testRequest{ - method: http.MethodPost, - path: "/api/v1/meters", - contentType: "application/json", - body: &models.Meter{ - Slug: "meter3", - Description: "API Network Traffic", - ValueProperty: "$.bytes", - EventType: "api-calls", - Aggregation: models.MeterAggregationSum, - GroupBy: map[string]string{"path": "$.path", "method": "$.method"}, - WindowSize: models.WindowSizeHour, - }, - }, - res: testResponse{ - status: http.StatusNotImplemented, - }, - }, { name: "get meter", req: testRequest{ @@ -254,16 +234,6 @@ func TestRoutes(t *testing.T) { body: mockMeters[0], }, }, - { - name: "delete meter", - req: testRequest{ - method: http.MethodDelete, - path: "/api/v1/meters/" + mockMeters[0].Slug, - }, - res: testResponse{ - status: http.StatusNotImplemented, - }, - }, { name: "query meter", req: testRequest{ @@ -428,18 +398,6 @@ func TestRoutes(t *testing.T) { status: http.StatusOK, }, }, - { - name: "invalidate portal token", - req: testRequest{ - method: http.MethodPost, - path: "/api/v1/portal/tokens/invalidate", - contentType: "application/json", - body: api.InvalidatePortalTokensJSONRequestBody{}, - }, - res: testResponse{ - status: http.StatusNotImplemented, - }, - }, { name: "list portal tokens", req: testRequest{ @@ -450,51 +408,6 @@ func TestRoutes(t *testing.T) { status: http.StatusNotImplemented, }, }, - // Subjects - { - name: "upsert subjects", - req: testRequest{ - method: http.MethodPost, - path: "/api/v1/subjects", - contentType: "application/json", - body: api.UpsertSubjectJSONRequestBody{{ - Key: "customer", - }}, - }, - res: testResponse{ - status: http.StatusNotImplemented, - }, - }, - { - name: "get subject", - req: testRequest{ - method: http.MethodGet, - path: "/api/v1/subjects/abcd", - }, - res: testResponse{ - status: http.StatusNotImplemented, - }, - }, - { - name: "list subjects", - req: testRequest{ - method: http.MethodGet, - path: "/api/v1/subjects", - }, - res: testResponse{ - status: http.StatusNotImplemented, - }, - }, - { - name: "delete subject", - req: testRequest{ - method: http.MethodDelete, - path: "/api/v1/subjects/abcd", - }, - res: testResponse{ - status: http.StatusNotImplemented, - }, - }, // Debug { name: "get debug metrics",