@workglow/task-graph 0.2.31 → 0.2.32
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/dist/browser.js +119 -11
- package/dist/browser.js.map +7 -6
- package/dist/bun.js +119 -11
- package/dist/bun.js.map +7 -6
- package/dist/node.js +119 -11
- package/dist/node.js.map +7 -6
- package/dist/task/EntitlementProfile.d.ts +136 -0
- package/dist/task/EntitlementProfile.d.ts.map +1 -0
- package/dist/task/EntitlementProfiles.d.ts +6 -6
- package/dist/task/EntitlementProfiles.d.ts.map +1 -1
- package/dist/task/index.d.ts +1 -0
- package/dist/task/index.d.ts.map +1 -1
- package/package.json +7 -7
package/dist/bun.js
CHANGED
|
@@ -6440,6 +6440,111 @@ function registerBuiltInTransforms() {
|
|
|
6440
6440
|
for (const t of all)
|
|
6441
6441
|
TransformRegistry.registerTransform(t);
|
|
6442
6442
|
}
|
|
6443
|
+
// src/task/EntitlementProfile.ts
|
|
6444
|
+
import { createServiceToken as createServiceToken5 } from "@workglow/util";
|
|
6445
|
+
var STATIC_SIGNAL_SOURCE = Object.freeze({
|
|
6446
|
+
subscribe(_listener) {
|
|
6447
|
+
return () => {};
|
|
6448
|
+
}
|
|
6449
|
+
});
|
|
6450
|
+
function createPolicyProfile(name, policy, options = {}) {
|
|
6451
|
+
const enforcer = createPolicyEnforcer(policy, options.resolver);
|
|
6452
|
+
const signalSource = options.signalSource ?? STATIC_SIGNAL_SOURCE;
|
|
6453
|
+
const listeners = new Set;
|
|
6454
|
+
const lastOutcome = new Map;
|
|
6455
|
+
const lastEntitlement = new Map;
|
|
6456
|
+
let disposed = false;
|
|
6457
|
+
function key(e) {
|
|
6458
|
+
const resources = e.resources === undefined ? null : [...e.resources].sort();
|
|
6459
|
+
return `${e.id}|${JSON.stringify(resources)}`;
|
|
6460
|
+
}
|
|
6461
|
+
async function evaluate(e) {
|
|
6462
|
+
if (e.optional)
|
|
6463
|
+
return "granted";
|
|
6464
|
+
const denials = await enforcer.checkAll({ entitlements: [e] });
|
|
6465
|
+
return denials.length === 0 ? "granted" : "denied";
|
|
6466
|
+
}
|
|
6467
|
+
async function emitFlipFor(e) {
|
|
6468
|
+
const k = key(e);
|
|
6469
|
+
const previous = lastOutcome.get(k);
|
|
6470
|
+
if (previous === undefined)
|
|
6471
|
+
return;
|
|
6472
|
+
const current = await evaluate(e);
|
|
6473
|
+
if (disposed)
|
|
6474
|
+
return;
|
|
6475
|
+
if (current === previous)
|
|
6476
|
+
return;
|
|
6477
|
+
lastOutcome.set(k, current);
|
|
6478
|
+
const event = {
|
|
6479
|
+
kind: current === "granted" ? "granted" : "revoked",
|
|
6480
|
+
entitlement: e
|
|
6481
|
+
};
|
|
6482
|
+
for (const l of listeners) {
|
|
6483
|
+
try {
|
|
6484
|
+
l(event);
|
|
6485
|
+
} catch (err) {
|
|
6486
|
+
console.error(`[EntitlementProfile:${name}] listener threw:`, err);
|
|
6487
|
+
}
|
|
6488
|
+
}
|
|
6489
|
+
}
|
|
6490
|
+
function safeEmitFlipFor(e) {
|
|
6491
|
+
emitFlipFor(e).catch((err) => {
|
|
6492
|
+
console.error(`[EntitlementProfile:${name}] error evaluating signal:`, err);
|
|
6493
|
+
});
|
|
6494
|
+
}
|
|
6495
|
+
const sourceUnsub = signalSource.subscribe((signal) => {
|
|
6496
|
+
if (disposed)
|
|
6497
|
+
return;
|
|
6498
|
+
if (signal.kind === "reload") {
|
|
6499
|
+
for (const [, e] of lastEntitlement) {
|
|
6500
|
+
safeEmitFlipFor(e);
|
|
6501
|
+
}
|
|
6502
|
+
} else {
|
|
6503
|
+
safeEmitFlipFor(signal.entitlement);
|
|
6504
|
+
}
|
|
6505
|
+
});
|
|
6506
|
+
const profile = {
|
|
6507
|
+
name,
|
|
6508
|
+
checkAll: enforcer.checkAll.bind(enforcer),
|
|
6509
|
+
checkTask: enforcer.checkTask.bind(enforcer),
|
|
6510
|
+
surface: () => policy.grant,
|
|
6511
|
+
async requestEntitlement(required) {
|
|
6512
|
+
if (required.optional) {
|
|
6513
|
+
return { outcome: "granted", entitlement: required };
|
|
6514
|
+
}
|
|
6515
|
+
const denials = await enforcer.checkAll({ entitlements: [required] });
|
|
6516
|
+
const k = key(required);
|
|
6517
|
+
lastEntitlement.set(k, required);
|
|
6518
|
+
if (denials.length === 0) {
|
|
6519
|
+
lastOutcome.set(k, "granted");
|
|
6520
|
+
return { outcome: "granted", entitlement: required };
|
|
6521
|
+
}
|
|
6522
|
+
lastOutcome.set(k, "denied");
|
|
6523
|
+
return { outcome: "denied", denial: denials[0] };
|
|
6524
|
+
},
|
|
6525
|
+
subscribe(listener) {
|
|
6526
|
+
listeners.add(listener);
|
|
6527
|
+
let unsubbed = false;
|
|
6528
|
+
return () => {
|
|
6529
|
+
if (unsubbed)
|
|
6530
|
+
return;
|
|
6531
|
+
unsubbed = true;
|
|
6532
|
+
listeners.delete(listener);
|
|
6533
|
+
};
|
|
6534
|
+
},
|
|
6535
|
+
async dispose() {
|
|
6536
|
+
if (disposed)
|
|
6537
|
+
return;
|
|
6538
|
+
disposed = true;
|
|
6539
|
+
sourceUnsub();
|
|
6540
|
+
listeners.clear();
|
|
6541
|
+
lastOutcome.clear();
|
|
6542
|
+
lastEntitlement.clear();
|
|
6543
|
+
}
|
|
6544
|
+
};
|
|
6545
|
+
return profile;
|
|
6546
|
+
}
|
|
6547
|
+
var ENTITLEMENT_PROFILE = createServiceToken5("workglow.entitlementProfile");
|
|
6443
6548
|
// src/task/EntitlementProfiles.ts
|
|
6444
6549
|
var BROWSER_GRANTS = [
|
|
6445
6550
|
{ id: Entitlements.NETWORK_HTTP },
|
|
@@ -6474,8 +6579,8 @@ var PROFILE_GRANTS = {
|
|
|
6474
6579
|
function createProfilePolicy(profile) {
|
|
6475
6580
|
return { deny: [], grant: PROFILE_GRANTS[profile], ask: [] };
|
|
6476
6581
|
}
|
|
6477
|
-
function createProfileEnforcer(profile,
|
|
6478
|
-
return
|
|
6582
|
+
function createProfileEnforcer(profile, options) {
|
|
6583
|
+
return createPolicyProfile(profile, createProfilePolicy(profile), options);
|
|
6479
6584
|
}
|
|
6480
6585
|
function getProfileGrants(profile) {
|
|
6481
6586
|
return PROFILE_GRANTS[profile];
|
|
@@ -8061,15 +8166,15 @@ import {
|
|
|
8061
8166
|
JobQueueServer
|
|
8062
8167
|
} from "@workglow/job-queue";
|
|
8063
8168
|
import { InMemoryQueueStorage } from "@workglow/job-queue";
|
|
8064
|
-
import { createServiceToken as
|
|
8065
|
-
var JOB_QUEUE_FACTORY =
|
|
8169
|
+
import { createServiceToken as createServiceToken6, globalServiceRegistry as globalServiceRegistry4 } from "@workglow/util";
|
|
8170
|
+
var JOB_QUEUE_FACTORY = createServiceToken6("taskgraph.jobQueueFactory");
|
|
8066
8171
|
var defaultJobQueueFactory = async ({
|
|
8067
8172
|
queueName,
|
|
8068
8173
|
jobClass,
|
|
8069
8174
|
options
|
|
8070
8175
|
}) => {
|
|
8071
8176
|
const storage = options?.storage ?? new InMemoryQueueStorage(queueName);
|
|
8072
|
-
await storage.
|
|
8177
|
+
await storage.migrate();
|
|
8073
8178
|
const server = new JobQueueServer(jobClass, {
|
|
8074
8179
|
storage,
|
|
8075
8180
|
queueName,
|
|
@@ -8103,7 +8208,7 @@ function createJobQueueFactoryWithOptions(defaultOptions = {}) {
|
|
|
8103
8208
|
...options ?? {}
|
|
8104
8209
|
};
|
|
8105
8210
|
const storage = mergedOptions.storage ?? new InMemoryQueueStorage(queueName);
|
|
8106
|
-
await storage.
|
|
8211
|
+
await storage.migrate();
|
|
8107
8212
|
const server = new JobQueueServer(jobClass, {
|
|
8108
8213
|
storage,
|
|
8109
8214
|
queueName,
|
|
@@ -8327,7 +8432,7 @@ queueMicrotask(() => {
|
|
|
8327
8432
|
});
|
|
8328
8433
|
// src/task/TaskRegistry.ts
|
|
8329
8434
|
import {
|
|
8330
|
-
createServiceToken as
|
|
8435
|
+
createServiceToken as createServiceToken7,
|
|
8331
8436
|
getLogger as getLogger9,
|
|
8332
8437
|
globalServiceRegistry as globalServiceRegistry5,
|
|
8333
8438
|
registerInputCompactor,
|
|
@@ -8367,7 +8472,7 @@ var TaskRegistry = {
|
|
|
8367
8472
|
registerTask,
|
|
8368
8473
|
unregisterTask
|
|
8369
8474
|
};
|
|
8370
|
-
var TASK_CONSTRUCTORS =
|
|
8475
|
+
var TASK_CONSTRUCTORS = createServiceToken7("task.constructors");
|
|
8371
8476
|
function getGlobalTaskConstructors() {
|
|
8372
8477
|
return globalServiceRegistry5.get(TASK_CONSTRUCTORS);
|
|
8373
8478
|
}
|
|
@@ -8536,8 +8641,8 @@ var registerBaseTasks = () => {
|
|
|
8536
8641
|
return tasks;
|
|
8537
8642
|
};
|
|
8538
8643
|
// src/storage/TaskGraphRepository.ts
|
|
8539
|
-
import { createServiceToken as
|
|
8540
|
-
var TASK_GRAPH_REPOSITORY =
|
|
8644
|
+
import { createServiceToken as createServiceToken8, EventEmitter as EventEmitter7 } from "@workglow/util";
|
|
8645
|
+
var TASK_GRAPH_REPOSITORY = createServiceToken8("taskgraph.taskGraphRepository");
|
|
8541
8646
|
|
|
8542
8647
|
class TaskGraphRepository {
|
|
8543
8648
|
type = "TaskGraphRepository";
|
|
@@ -8787,6 +8892,7 @@ export {
|
|
|
8787
8892
|
createScopedEnforcer,
|
|
8788
8893
|
createProfilePolicy,
|
|
8789
8894
|
createProfileEnforcer,
|
|
8895
|
+
createPolicyProfile,
|
|
8790
8896
|
createPolicyEnforcer,
|
|
8791
8897
|
createJobQueueFactoryWithOptions,
|
|
8792
8898
|
createGraphFromGraphJSON,
|
|
@@ -8851,6 +8957,7 @@ export {
|
|
|
8851
8957
|
TASK_CONSTRUCTORS,
|
|
8852
8958
|
StreamPump,
|
|
8853
8959
|
StreamProcessor,
|
|
8960
|
+
STATIC_SIGNAL_SOURCE,
|
|
8854
8961
|
SERVER_GRANTS,
|
|
8855
8962
|
RunScheduler,
|
|
8856
8963
|
RunContext,
|
|
@@ -8876,6 +8983,7 @@ export {
|
|
|
8876
8983
|
Entitlements,
|
|
8877
8984
|
EdgeMaterializer,
|
|
8878
8985
|
ENTITLEMENT_RESOLVER,
|
|
8986
|
+
ENTITLEMENT_PROFILE,
|
|
8879
8987
|
ENTITLEMENT_ENFORCER,
|
|
8880
8988
|
EMPTY_POLICY,
|
|
8881
8989
|
EMPTY_ENTITLEMENTS,
|
|
@@ -8894,4 +9002,4 @@ export {
|
|
|
8894
9002
|
BROWSER_GRANTS
|
|
8895
9003
|
};
|
|
8896
9004
|
|
|
8897
|
-
//# debugId=
|
|
9005
|
+
//# debugId=896F2287B3DD5F3464756E2164756E21
|