@adcp/sdk 6.11.0 → 6.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/adcp-config.js +7 -1
- package/bin/adcp.js +191 -4
- package/dist/lib/adapters/index.d.ts +0 -2
- package/dist/lib/adapters/index.d.ts.map +1 -1
- package/dist/lib/adapters/index.js +1 -8
- package/dist/lib/adapters/index.js.map +1 -1
- package/dist/lib/auth/oauth/index.d.ts +1 -0
- package/dist/lib/auth/oauth/index.d.ts.map +1 -1
- package/dist/lib/auth/oauth/index.js +17 -1
- package/dist/lib/auth/oauth/index.js.map +1 -1
- package/dist/lib/auth/oauth/web-flow.d.ts +270 -0
- package/dist/lib/auth/oauth/web-flow.d.ts.map +1 -0
- package/dist/lib/auth/oauth/web-flow.js +413 -0
- package/dist/lib/auth/oauth/web-flow.js.map +1 -0
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +2 -7
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/mock-server/index.d.ts +2 -0
- package/dist/lib/mock-server/index.d.ts.map +1 -1
- package/dist/lib/mock-server/index.js +17 -0
- package/dist/lib/mock-server/index.js.map +1 -1
- package/dist/lib/mock-server/sales-guaranteed/recipe.d.ts +155 -0
- package/dist/lib/mock-server/sales-guaranteed/recipe.d.ts.map +1 -0
- package/dist/lib/mock-server/sales-guaranteed/recipe.js +107 -0
- package/dist/lib/mock-server/sales-guaranteed/recipe.js.map +1 -0
- package/dist/lib/mock-server/sales-guaranteed/server.d.ts.map +1 -1
- package/dist/lib/mock-server/sales-guaranteed/server.js +212 -0
- package/dist/lib/mock-server/sales-guaranteed/server.js.map +1 -1
- package/dist/lib/mock-server/sales-non-guaranteed/recipe.d.ts +123 -0
- package/dist/lib/mock-server/sales-non-guaranteed/recipe.d.ts.map +1 -0
- package/dist/lib/mock-server/sales-non-guaranteed/recipe.js +81 -0
- package/dist/lib/mock-server/sales-non-guaranteed/recipe.js.map +1 -0
- package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
- package/dist/lib/server/ctx-metadata/index.d.ts +1 -1
- package/dist/lib/server/ctx-metadata/index.d.ts.map +1 -1
- package/dist/lib/server/ctx-metadata/index.js +3 -1
- package/dist/lib/server/ctx-metadata/index.js.map +1 -1
- package/dist/lib/server/ctx-metadata/wire-shape.d.ts +21 -0
- package/dist/lib/server/ctx-metadata/wire-shape.d.ts.map +1 -1
- package/dist/lib/server/ctx-metadata/wire-shape.js +111 -0
- package/dist/lib/server/ctx-metadata/wire-shape.js.map +1 -1
- package/dist/lib/server/decisioning/context.d.ts +19 -0
- package/dist/lib/server/decisioning/context.d.ts.map +1 -1
- package/dist/lib/server/decisioning/index.d.ts +3 -0
- package/dist/lib/server/decisioning/index.d.ts.map +1 -1
- package/dist/lib/server/decisioning/index.js +16 -1
- package/dist/lib/server/decisioning/index.js.map +1 -1
- package/dist/lib/server/decisioning/platform.d.ts +17 -0
- package/dist/lib/server/decisioning/platform.d.ts.map +1 -1
- package/dist/lib/server/decisioning/platform.js.map +1 -1
- package/dist/lib/server/decisioning/proposal/dispatch.d.ts +203 -0
- package/dist/lib/server/decisioning/proposal/dispatch.d.ts.map +1 -0
- package/dist/lib/server/decisioning/proposal/dispatch.js +395 -0
- package/dist/lib/server/decisioning/proposal/dispatch.js.map +1 -0
- package/dist/lib/server/decisioning/proposal/index.d.ts +21 -0
- package/dist/lib/server/decisioning/proposal/index.d.ts.map +1 -0
- package/dist/lib/server/decisioning/proposal/index.js +37 -0
- package/dist/lib/server/decisioning/proposal/index.js.map +1 -0
- package/dist/lib/server/decisioning/proposal/lifecycle.d.ts +195 -0
- package/dist/lib/server/decisioning/proposal/lifecycle.d.ts.map +1 -0
- package/dist/lib/server/decisioning/proposal/lifecycle.js +366 -0
- package/dist/lib/server/decisioning/proposal/lifecycle.js.map +1 -0
- package/dist/lib/server/decisioning/proposal/mock-manager.d.ts +93 -0
- package/dist/lib/server/decisioning/proposal/mock-manager.d.ts.map +1 -0
- package/dist/lib/server/decisioning/proposal/mock-manager.js +109 -0
- package/dist/lib/server/decisioning/proposal/mock-manager.js.map +1 -0
- package/dist/lib/server/decisioning/proposal/store.d.ts +279 -0
- package/dist/lib/server/decisioning/proposal/store.d.ts.map +1 -0
- package/dist/lib/server/decisioning/proposal/store.js +291 -0
- package/dist/lib/server/decisioning/proposal/store.js.map +1 -0
- package/dist/lib/server/decisioning/proposal/types.d.ts +394 -0
- package/dist/lib/server/decisioning/proposal/types.d.ts.map +1 -0
- package/dist/lib/server/decisioning/proposal/types.js +58 -0
- package/dist/lib/server/decisioning/proposal/types.js.map +1 -0
- package/dist/lib/server/decisioning/runtime/from-platform.d.ts +25 -0
- package/dist/lib/server/decisioning/runtime/from-platform.d.ts.map +1 -1
- package/dist/lib/server/decisioning/runtime/from-platform.js +198 -15
- package/dist/lib/server/decisioning/runtime/from-platform.js.map +1 -1
- package/dist/lib/server/index.d.ts +1 -1
- package/dist/lib/server/index.d.ts.map +1 -1
- package/dist/lib/server/index.js +3 -1
- package/dist/lib/server/index.js.map +1 -1
- package/dist/lib/testing/client.d.ts.map +1 -1
- package/dist/lib/testing/client.js +7 -1
- package/dist/lib/testing/client.js.map +1 -1
- package/dist/lib/testing/storyboard/task-map.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/task-map.js +1 -0
- package/dist/lib/testing/storyboard/task-map.js.map +1 -1
- package/dist/lib/testing/storyboard/test-kit.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/test-kit.js +4 -0
- package/dist/lib/testing/storyboard/test-kit.js.map +1 -1
- package/dist/lib/testing/types.d.ts +10 -0
- package/dist/lib/testing/types.d.ts.map +1 -1
- package/dist/lib/version.d.ts +3 -3
- package/dist/lib/version.js +3 -3
- package/examples/hello_seller_adapter_guaranteed.ts +29 -2
- package/examples/hello_seller_adapter_proposal_mode.ts +575 -0
- package/package.json +1 -1
- package/dist/lib/adapters/proposal-manager.d.ts +0 -142
- package/dist/lib/adapters/proposal-manager.d.ts.map +0 -1
- package/dist/lib/adapters/proposal-manager.js +0 -184
- package/dist/lib/adapters/proposal-manager.js.map +0 -1
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ProposalStore — per-tenant proposal lifecycle persistence.
|
|
4
|
+
*
|
|
5
|
+
* The single ledger for proposal recipes across the entire lifecycle:
|
|
6
|
+
* draft (in-flight refine iterations) → committed (post-finalize, with
|
|
7
|
+
* `expires_at` hold window) → consumed (post-`create_media_buy`).
|
|
8
|
+
*
|
|
9
|
+
* Ports `adcp-client-python.src/adcp/decisioning/proposal_store.py`.
|
|
10
|
+
*
|
|
11
|
+
* State machine the framework drives:
|
|
12
|
+
*
|
|
13
|
+
* ```
|
|
14
|
+
* ┌──── releaseConsumption ────┐
|
|
15
|
+
* ▼ │
|
|
16
|
+
* putDraft ─► DRAFT ─► commit ─► COMMITTED ─► tryReserveConsumption ─► CONSUMING
|
|
17
|
+
* ▲ │
|
|
18
|
+
* │ │
|
|
19
|
+
* (refine finalizeConsumption
|
|
20
|
+
* iteration) │
|
|
21
|
+
* │ ▼
|
|
22
|
+
* └─ putDraft (overwrite while DRAFT) ─┘ CONSUMED
|
|
23
|
+
* (terminal)
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* The `COMMITTED → CONSUMING → CONSUMED` two-phase transition prevents the
|
|
27
|
+
* inventory double-spend race that a check-then-act sequence on `COMMITTED`
|
|
28
|
+
* would expose. Two parallel `create_media_buy(proposal_id=X)` calls cannot
|
|
29
|
+
* both reserve the proposal — the second `tryReserveConsumption` raises
|
|
30
|
+
* `PROPOSAL_NOT_COMMITTED` once the first transitions the record. Adapter
|
|
31
|
+
* dispatch runs against the reservation; on success the framework calls
|
|
32
|
+
* `finalizeConsumption`; on failure `releaseConsumption` rolls back to
|
|
33
|
+
* COMMITTED so the buyer can retry.
|
|
34
|
+
*
|
|
35
|
+
* Transitions outside this graph (commit-from-COMMITTED with mismatched
|
|
36
|
+
* payload, finalize-from-DRAFT, etc.) throw `AdcpError` with `INTERNAL_ERROR`
|
|
37
|
+
* — those are framework / adopter bugs, not buyer-facing rejections.
|
|
38
|
+
*
|
|
39
|
+
* @public
|
|
40
|
+
* @packageDocumentation
|
|
41
|
+
*/
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.InMemoryProposalStore = void 0;
|
|
44
|
+
const async_outcome_1 = require("../async-outcome");
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
// In-memory reference implementation
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
const DEFAULT_DRAFT_TTL_MS = 24 * 60 * 60 * 1000; // 24h
|
|
49
|
+
const DEFAULT_COMMITTED_GRACE_MS = 7 * 24 * 60 * 60 * 1000; // 7 days
|
|
50
|
+
/**
|
|
51
|
+
* Process-local {@link ProposalStore} reference implementation.
|
|
52
|
+
*
|
|
53
|
+
* Storage is a plain `Map` — JS event-loop atomicity covers the critical
|
|
54
|
+
* sections (no preemption between awaits within a method body since there
|
|
55
|
+
* are no awaits). Adequate for local dev, CI, and tests; production
|
|
56
|
+
* deployments wire a durable backing implementing the same interface.
|
|
57
|
+
*
|
|
58
|
+
* Eviction:
|
|
59
|
+
*
|
|
60
|
+
* - Drafts older than `draftTtlMs` (default 24h) are evicted on every
|
|
61
|
+
* read / write.
|
|
62
|
+
* - Committed proposals more than `committedGraceMs` past `expiresAt`
|
|
63
|
+
* (default 7 days) are evicted.
|
|
64
|
+
*
|
|
65
|
+
* Eviction runs lazily — no background timer thread.
|
|
66
|
+
*
|
|
67
|
+
* Cross-tenant safety: `get` and `getByMediaBuyId` honor `expectedAccountId`
|
|
68
|
+
* — cross-tenant probes return `null`, not the raw record.
|
|
69
|
+
*
|
|
70
|
+
* @public
|
|
71
|
+
*/
|
|
72
|
+
class InMemoryProposalStore {
|
|
73
|
+
isDurable = false;
|
|
74
|
+
records = new Map();
|
|
75
|
+
// Reverse index keyed by `${accountId}::${mediaBuyId}`. Tenant scoping in
|
|
76
|
+
// the key prevents collisions when adopter media_buy_ids overlap across
|
|
77
|
+
// tenants (sequential IDs, deterministic test fixtures).
|
|
78
|
+
mediaBuyIndex = new Map();
|
|
79
|
+
creationTimes = new Map();
|
|
80
|
+
draftTtlMs;
|
|
81
|
+
committedGraceMs;
|
|
82
|
+
clock;
|
|
83
|
+
constructor(options = {}) {
|
|
84
|
+
this.draftTtlMs = options.draftTtlMs ?? DEFAULT_DRAFT_TTL_MS;
|
|
85
|
+
this.committedGraceMs = options.committedGraceMs ?? DEFAULT_COMMITTED_GRACE_MS;
|
|
86
|
+
this.clock = options.clock ?? (() => new Date());
|
|
87
|
+
}
|
|
88
|
+
mediaBuyKey(accountId, mediaBuyId) {
|
|
89
|
+
return `${accountId}::${mediaBuyId}`;
|
|
90
|
+
}
|
|
91
|
+
evictExpired() {
|
|
92
|
+
const now = this.clock().getTime();
|
|
93
|
+
const toRemove = [];
|
|
94
|
+
for (const [proposalId, record] of this.records) {
|
|
95
|
+
const created = this.creationTimes.get(proposalId)?.getTime() ?? now;
|
|
96
|
+
if (record.state === 'draft') {
|
|
97
|
+
if (now - created > this.draftTtlMs)
|
|
98
|
+
toRemove.push(proposalId);
|
|
99
|
+
}
|
|
100
|
+
else if (record.expiresAt) {
|
|
101
|
+
const deadline = record.expiresAt.getTime() + this.committedGraceMs;
|
|
102
|
+
if (now > deadline)
|
|
103
|
+
toRemove.push(proposalId);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
for (const proposalId of toRemove) {
|
|
107
|
+
const removed = this.records.get(proposalId);
|
|
108
|
+
this.records.delete(proposalId);
|
|
109
|
+
this.creationTimes.delete(proposalId);
|
|
110
|
+
if (removed?.mediaBuyId) {
|
|
111
|
+
this.mediaBuyIndex.delete(this.mediaBuyKey(removed.accountId, removed.mediaBuyId));
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
putDraft(args) {
|
|
116
|
+
this.evictExpired();
|
|
117
|
+
const existing = this.records.get(args.proposalId);
|
|
118
|
+
if (existing && existing.state !== 'draft') {
|
|
119
|
+
throw new async_outcome_1.AdcpError('INTERNAL_ERROR', {
|
|
120
|
+
recovery: 'terminal',
|
|
121
|
+
message: `Cannot putDraft on proposal ${JSON.stringify(args.proposalId)} in state ` +
|
|
122
|
+
`${JSON.stringify(existing.state)}; refine iterations are only valid on draft ` +
|
|
123
|
+
`proposals. Once committed or consumed, a proposal_id is immutable.`,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
const record = {
|
|
127
|
+
proposalId: args.proposalId,
|
|
128
|
+
accountId: args.accountId,
|
|
129
|
+
state: 'draft',
|
|
130
|
+
recipes: new Map(args.recipes),
|
|
131
|
+
proposalPayload: { ...args.proposalPayload },
|
|
132
|
+
};
|
|
133
|
+
this.records.set(args.proposalId, record);
|
|
134
|
+
// Refine iterations preserve the original creation time so the 24h
|
|
135
|
+
// draft TTL is anchored to the start of the buyer's session, not the
|
|
136
|
+
// most recent iteration.
|
|
137
|
+
if (!this.creationTimes.has(args.proposalId)) {
|
|
138
|
+
this.creationTimes.set(args.proposalId, this.clock());
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
get(proposalId, args) {
|
|
142
|
+
this.evictExpired();
|
|
143
|
+
const record = this.records.get(proposalId);
|
|
144
|
+
if (!record)
|
|
145
|
+
return null;
|
|
146
|
+
if (record.accountId !== args.expectedAccountId) {
|
|
147
|
+
// Cross-tenant probe — return null, not raw record.
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
return record;
|
|
151
|
+
}
|
|
152
|
+
commit(proposalId, args) {
|
|
153
|
+
this.evictExpired();
|
|
154
|
+
const record = this.records.get(proposalId);
|
|
155
|
+
if (!record) {
|
|
156
|
+
throw new async_outcome_1.AdcpError('INTERNAL_ERROR', {
|
|
157
|
+
recovery: 'terminal',
|
|
158
|
+
message: `Cannot commit proposal ${JSON.stringify(proposalId)}: not in store. The ` +
|
|
159
|
+
`framework's finalize dispatch must putDraft before commit.`,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
const payload = { ...args.proposalPayload };
|
|
163
|
+
if (record.state === 'committed') {
|
|
164
|
+
const sameDeadline = record.expiresAt?.getTime() === args.expiresAt.getTime();
|
|
165
|
+
const samePayload = JSON.stringify(record.proposalPayload) === JSON.stringify(payload);
|
|
166
|
+
if (sameDeadline && samePayload)
|
|
167
|
+
return;
|
|
168
|
+
throw new async_outcome_1.AdcpError('INTERNAL_ERROR', {
|
|
169
|
+
recovery: 'terminal',
|
|
170
|
+
message: `Proposal ${JSON.stringify(proposalId)} already committed with a different ` +
|
|
171
|
+
`expires_at or payload — re-commit with different values is a developer bug.`,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
if (record.state !== 'draft') {
|
|
175
|
+
throw new async_outcome_1.AdcpError('INTERNAL_ERROR', {
|
|
176
|
+
recovery: 'terminal',
|
|
177
|
+
message: `Cannot commit proposal ${JSON.stringify(proposalId)} from state ` +
|
|
178
|
+
`${JSON.stringify(record.state)}; commit requires DRAFT.`,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
this.records.set(proposalId, {
|
|
182
|
+
...record,
|
|
183
|
+
state: 'committed',
|
|
184
|
+
expiresAt: args.expiresAt,
|
|
185
|
+
proposalPayload: payload,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
tryReserveConsumption(proposalId, args) {
|
|
189
|
+
this.evictExpired();
|
|
190
|
+
const record = this.records.get(proposalId);
|
|
191
|
+
// Cross-tenant probe collapses to PROPOSAL_NOT_FOUND — same
|
|
192
|
+
// principal-enumeration defense as `get`.
|
|
193
|
+
if (!record || record.accountId !== args.expectedAccountId) {
|
|
194
|
+
throw new async_outcome_1.AdcpError('PROPOSAL_NOT_FOUND', {
|
|
195
|
+
recovery: 'terminal',
|
|
196
|
+
message: `Proposal ${JSON.stringify(proposalId)} not found.`,
|
|
197
|
+
field: 'proposal_id',
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
if (record.state !== 'committed') {
|
|
201
|
+
throw new async_outcome_1.AdcpError('PROPOSAL_NOT_COMMITTED', {
|
|
202
|
+
recovery: 'correctable',
|
|
203
|
+
message: `Proposal ${JSON.stringify(proposalId)} is in state ${JSON.stringify(record.state)}; ` +
|
|
204
|
+
`create_media_buy requires a committed proposal that hasn't been accepted or ` +
|
|
205
|
+
`reserved by another request.`,
|
|
206
|
+
field: 'proposal_id',
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
const reserved = { ...record, state: 'consuming' };
|
|
210
|
+
this.records.set(proposalId, reserved);
|
|
211
|
+
return reserved;
|
|
212
|
+
}
|
|
213
|
+
finalizeConsumption(proposalId, args) {
|
|
214
|
+
const record = this.records.get(proposalId);
|
|
215
|
+
if (!record || record.accountId !== args.expectedAccountId) {
|
|
216
|
+
throw new async_outcome_1.AdcpError('INTERNAL_ERROR', {
|
|
217
|
+
recovery: 'terminal',
|
|
218
|
+
message: `finalizeConsumption: proposal ${JSON.stringify(proposalId)} not found for ` + `the expected tenant.`,
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
if (record.state === 'consumed') {
|
|
222
|
+
// Idempotent on already-CONSUMED with the same mediaBuyId.
|
|
223
|
+
if (record.mediaBuyId === args.mediaBuyId)
|
|
224
|
+
return;
|
|
225
|
+
throw new async_outcome_1.AdcpError('INTERNAL_ERROR', {
|
|
226
|
+
recovery: 'terminal',
|
|
227
|
+
message: `Proposal ${JSON.stringify(proposalId)} already consumed by ` +
|
|
228
|
+
`media_buy_id=${JSON.stringify(record.mediaBuyId)}; cannot re-consume as ` +
|
|
229
|
+
`${JSON.stringify(args.mediaBuyId)}.`,
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
if (record.state !== 'consuming') {
|
|
233
|
+
throw new async_outcome_1.AdcpError('INTERNAL_ERROR', {
|
|
234
|
+
recovery: 'terminal',
|
|
235
|
+
message: `finalizeConsumption requires CONSUMING; proposal ${JSON.stringify(proposalId)} ` +
|
|
236
|
+
`is in ${JSON.stringify(record.state)}. Framework must call ` +
|
|
237
|
+
`tryReserveConsumption first.`,
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
this.records.set(proposalId, {
|
|
241
|
+
...record,
|
|
242
|
+
state: 'consumed',
|
|
243
|
+
mediaBuyId: args.mediaBuyId,
|
|
244
|
+
});
|
|
245
|
+
this.mediaBuyIndex.set(this.mediaBuyKey(record.accountId, args.mediaBuyId), proposalId);
|
|
246
|
+
}
|
|
247
|
+
releaseConsumption(proposalId, args) {
|
|
248
|
+
const record = this.records.get(proposalId);
|
|
249
|
+
if (!record || record.accountId !== args.expectedAccountId) {
|
|
250
|
+
// Idempotent — releasing an unknown id is a no-op so the
|
|
251
|
+
// adapter-failure rollback path can be unconditional.
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
if (record.state === 'committed') {
|
|
255
|
+
// Already rolled back.
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
if (record.state !== 'consuming') {
|
|
259
|
+
throw new async_outcome_1.AdcpError('INTERNAL_ERROR', {
|
|
260
|
+
recovery: 'terminal',
|
|
261
|
+
message: `releaseConsumption requires CONSUMING; proposal ${JSON.stringify(proposalId)} ` +
|
|
262
|
+
`is in ${JSON.stringify(record.state)}.`,
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
this.records.set(proposalId, { ...record, state: 'committed' });
|
|
266
|
+
}
|
|
267
|
+
discard(proposalId) {
|
|
268
|
+
const record = this.records.get(proposalId);
|
|
269
|
+
this.records.delete(proposalId);
|
|
270
|
+
this.creationTimes.delete(proposalId);
|
|
271
|
+
if (record?.mediaBuyId) {
|
|
272
|
+
this.mediaBuyIndex.delete(this.mediaBuyKey(record.accountId, record.mediaBuyId));
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
getByMediaBuyId(mediaBuyId, args) {
|
|
276
|
+
this.evictExpired();
|
|
277
|
+
const key = this.mediaBuyKey(args.expectedAccountId, mediaBuyId);
|
|
278
|
+
const proposalId = this.mediaBuyIndex.get(key);
|
|
279
|
+
if (!proposalId)
|
|
280
|
+
return null;
|
|
281
|
+
const record = this.records.get(proposalId);
|
|
282
|
+
if (!record) {
|
|
283
|
+
// Index drift — clean up.
|
|
284
|
+
this.mediaBuyIndex.delete(key);
|
|
285
|
+
return null;
|
|
286
|
+
}
|
|
287
|
+
return record;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
exports.InMemoryProposalStore = InMemoryProposalStore;
|
|
291
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../../../src/lib/server/decisioning/proposal/store.ts"],"names":[],"mappings":"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"}
|