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