MCPcopy Create free account
hub / github.com/UsefulSoftwareCo/executor / makeAutumnSurface

Function makeAutumnSurface

e2e/src/surfaces/autumn.ts:118–361  ·  view source on GitHub ↗
(autumnUrl: string)

Source from the content-addressed store, hash-verified

116}
117
118export const makeAutumnSurface = (autumnUrl: string): AutumnSurface => {
119 const usageEvents = (query: UsageQuery) =>
120 Effect.gen(function* () {
121 // The emulator's ledger endpoint returns every recorded track event;
122 // filter to this customer + feature. (autumn-js drives /v1/* RPC-style.)
123 const response = yield* Effect.promise(() =>
124 fetch(`${autumnUrl}/v1/events.list`, {
125 method: "POST",
126 headers: { "content-type": "application/json" },
127 body: "{}",
128 }),
129 );
130 if (!response.ok) {
131 return yield* Effect.fail(
132 `autumn events.list responded ${response.status}: ${yield* Effect.promise(() => response.text())}`,
133 );
134 }
135 const body = (yield* Effect.promise(() => response.json())) as {
136 readonly list?: ReadonlyArray<{
137 readonly customer_id: string;
138 readonly feature_id: string;
139 readonly value: number;
140 }>;
141 };
142 return (body.list ?? [])
143 .filter(
144 (event) => event.customer_id === query.customerId && event.feature_id === query.featureId,
145 )
146 .map((event) => ({
147 customerId: event.customer_id,
148 featureId: event.feature_id,
149 value: event.value,
150 }));
151 });
152
153 const customerIds = () =>
154 Effect.gen(function* () {
155 const response = yield* Effect.promise(() =>
156 fetch(`${autumnUrl}/v1/customers.list`, {
157 method: "POST",
158 headers: { "content-type": "application/json" },
159 body: "{}",
160 }),
161 );
162 if (!response.ok) {
163 return yield* Effect.fail(
164 `autumn customers.list responded ${response.status}: ${yield* Effect.promise(() => response.text())}`,
165 );
166 }
167 const body = (yield* Effect.promise(() => response.json())) as {
168 readonly list?: ReadonlyArray<{ readonly id?: string }>;
169 };
170 return (body.list ?? []).map((customer) => customer.id ?? "");
171 });
172
173 const settleCheckout = (sessionId: string) =>
174 Effect.gen(function* () {
175 const response = yield* Effect.promise(() =>

Callers 1

contextForFunction · 0.90

Calls 3

memberSeatsFunction · 0.85
usageEventsFunction · 0.85
retryMethod · 0.80

Tested by

no test coverage detected