@feltdb/core 0.13.0 → 0.15.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.
Files changed (92) hide show
  1. package/dist/agent-runtime.d.ts +64 -2
  2. package/dist/agent-runtime.d.ts.map +1 -1
  3. package/dist/agent-runtime.js +121 -11
  4. package/dist/agent-state.d.ts +48 -0
  5. package/dist/agent-state.d.ts.map +1 -1
  6. package/dist/agent-state.js +174 -12
  7. package/dist/agent.d.ts +10 -1
  8. package/dist/agent.d.ts.map +1 -1
  9. package/dist/agent.js +10 -1
  10. package/dist/build-identity.json +4 -4
  11. package/dist/cli/commands.js +27 -6
  12. package/dist/collection.d.ts +3 -1
  13. package/dist/collection.d.ts.map +1 -1
  14. package/dist/collection.js +30 -8
  15. package/dist/create/build-identity.json +4 -4
  16. package/dist/create/cli.js +1 -1
  17. package/dist/create/create.js +4 -6
  18. package/dist/create/package-versions.js +1 -1
  19. package/dist/create/server-source/Cargo.lock +6 -6
  20. package/dist/create/server-source/Cargo.toml +1 -1
  21. package/dist/create/server-source/crates/feltdb/src/lib.rs +126 -35
  22. package/dist/create/server-source/crates/feltdb/src/state_contract.rs +162 -53
  23. package/dist/create/server-source/crates/feltdb/src/worker_mesh.rs +137 -1
  24. package/dist/create/server-source/crates/feltdb/src/workload.rs +1427 -91
  25. package/dist/create/server-source/crates/feltdb-client/Cargo.toml +1 -1
  26. package/dist/create/server-source/crates/feltdb-server/Cargo.toml +1 -1
  27. package/dist/create/server-source/crates/feltdb-server/README.md +6 -1
  28. package/dist/create/server-source/crates/feltdb-server/src/app_state.rs +9 -1
  29. package/dist/create/server-source/crates/feltdb-server/src/auth.rs +85 -25
  30. package/dist/create/server-source/crates/feltdb-server/src/backup.rs +4 -0
  31. package/dist/create/server-source/crates/feltdb-server/src/console_accounts.rs +1009 -0
  32. package/dist/create/server-source/crates/feltdb-server/src/control_authorization.rs +441 -0
  33. package/dist/create/server-source/crates/feltdb-server/src/identity.rs +68 -6
  34. package/dist/create/server-source/crates/feltdb-server/src/key_management.rs +355 -23
  35. package/dist/create/server-source/crates/feltdb-server/src/lib.rs +3 -0
  36. package/dist/create/server-source/crates/feltdb-server/src/main.rs +879 -84
  37. package/dist/create/server-source/crates/feltdb-server/src/redaction.rs +208 -0
  38. package/dist/create/server-source/crates/feltdb-server/src/tenancy.rs +198 -19
  39. package/dist/create/server-source/crates/feltdb-server/tests/transaction_precondition_contract.rs +403 -0
  40. package/dist/db.d.ts +64 -9
  41. package/dist/db.d.ts.map +1 -1
  42. package/dist/db.js +153 -27
  43. package/dist/deployment.d.ts +19 -0
  44. package/dist/deployment.d.ts.map +1 -1
  45. package/dist/deployment.js +38 -2
  46. package/dist/embedded-query.d.ts.map +1 -1
  47. package/dist/embedded-query.js +5 -4
  48. package/dist/embedded-transaction.d.ts +8 -4
  49. package/dist/embedded-transaction.d.ts.map +1 -1
  50. package/dist/embedded-transaction.js +55 -19
  51. package/dist/error-codes.d.ts +31 -2
  52. package/dist/error-codes.d.ts.map +1 -1
  53. package/dist/error-codes.js +41 -2
  54. package/dist/feltdb.d.ts +7 -0
  55. package/dist/feltdb.d.ts.map +1 -1
  56. package/dist/file-db.d.ts +27 -0
  57. package/dist/file-db.d.ts.map +1 -1
  58. package/dist/file-db.js +145 -7
  59. package/dist/http-client.d.ts +11 -3
  60. package/dist/http-client.d.ts.map +1 -1
  61. package/dist/http-client.js +27 -14
  62. package/dist/http-db.d.ts +27 -1
  63. package/dist/http-db.d.ts.map +1 -1
  64. package/dist/http-db.js +252 -54
  65. package/dist/index.js +1 -1
  66. package/dist/local-state-lock.d.ts +34 -0
  67. package/dist/local-state-lock.d.ts.map +1 -0
  68. package/dist/local-state-lock.js +225 -0
  69. package/dist/reactive-graph.d.ts +0 -3
  70. package/dist/reactive-graph.d.ts.map +1 -1
  71. package/dist/reactive-graph.js +11 -1
  72. package/dist/runtime-registry.d.ts +7 -2
  73. package/dist/runtime-registry.d.ts.map +1 -1
  74. package/dist/runtime-registry.js +2 -2
  75. package/dist/studio/components/index.js +1 -1
  76. package/dist/studio/{components-BSGmHfif.js → components-CJmzntBi.js} +2 -1
  77. package/dist/studio/index.js +1 -1
  78. package/dist/studio-app/assets/{feltdb_wasm-3hDngl1h.js → feltdb_wasm-BjM1ylL3.js} +1 -1
  79. package/dist/studio-app/assets/feltdb_wasm_bg-TseJn2Ax.wasm +0 -0
  80. package/dist/studio-app/assets/index-1wd0uKua.js +30 -0
  81. package/dist/studio-app/index.html +1 -1
  82. package/dist/transaction.d.ts +27 -11
  83. package/dist/transaction.d.ts.map +1 -1
  84. package/dist/transaction.js +20 -14
  85. package/dist/wasm/feltdb_wasm_bg.wasm +0 -0
  86. package/dist/wasm/package.json +1 -1
  87. package/dist/workload.d.ts +31 -3
  88. package/dist/workload.d.ts.map +1 -1
  89. package/dist/workload.js +28 -3
  90. package/package.json +1 -1
  91. package/dist/studio-app/assets/feltdb_wasm_bg-CFQT4gCy.wasm +0 -0
  92. package/dist/studio-app/assets/index-Dql1hS5m.js +0 -30
@@ -1,3 +1,3 @@
1
- <!doctype html><html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#17211b"/><title>FeltDB Studio</title> <script type="module" crossorigin src="/assets/index-Dql1hS5m.js"></script>
1
+ <!doctype html><html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#17211b"/><title>FeltDB Studio</title> <script type="module" crossorigin src="/assets/index-1wd0uKua.js"></script>
2
2
  <link rel="stylesheet" crossorigin href="/assets/index-vi21oEQa.css">
3
3
  </head><body><div id="root"></div></body></html>
@@ -22,6 +22,7 @@
22
22
  * a runtime that cannot provide that path refuses the transaction rather than
23
23
  * silently degrading it into a sequence of independent writes.
24
24
  */
25
+ import { FeltDBServiceError } from './error-codes.js';
25
26
  /**
26
27
  * What must be true of one record for the transaction to commit.
27
28
  *
@@ -31,8 +32,10 @@
31
32
  *
32
33
  * Every predicate is optional and only a supplied one is checked. `version` is
33
34
  * the record's `__version` -- the field you read back and pass to
34
- * `updateIfVersion` -- and it is owned by the writer, so a transaction that
35
- * wants to exclude its own successor must write an advanced `__version`.
35
+ * `updateIfVersion`. When the transaction also writes the guarded record, the
36
+ * authority writes it at `expectedVersion + 1`, so a second transaction
37
+ * guarded on the same version is refused: two writers cannot both progress
38
+ * from one version.
36
39
  */
37
40
  export interface AtomicTransactionPrecondition {
38
41
  collection: string;
@@ -250,12 +253,17 @@ export interface AtomicTransactionOptions {
250
253
  */
251
254
  transactionId?: string;
252
255
  }
253
- /** Thrown when a transaction cannot be committed. Nothing was applied. */
254
- export declare class AtomicTransactionError extends Error {
256
+ /**
257
+ * Thrown when a transaction cannot be committed, or when its outcome is not
258
+ * known (`code: 'COMMIT_OUTCOME_UNKNOWN'`, `'DURABILITY_FAILURE'`).
259
+ *
260
+ * A `FeltDBServiceError`, so one `instanceof` and one `code` describe every
261
+ * typed failure, whichever runtime or transport produced it. `status` and
262
+ * `requestId` are the authority's, when it answered.
263
+ */
264
+ export declare class AtomicTransactionError extends FeltDBServiceError {
255
265
  readonly transactionId: string;
256
- readonly code?: string;
257
- readonly status?: number;
258
- constructor(message: string, transactionId: string, code?: string, status?: number, cause?: unknown);
266
+ constructor(message: string, transactionId: string, code?: string, status?: number, cause?: unknown, requestId?: string);
259
267
  }
260
268
  /**
261
269
  * The transaction id was already committed with a different payload.
@@ -266,7 +274,7 @@ export declare class AtomicTransactionError extends Error {
266
274
  */
267
275
  export declare class TransactionIdConflictError extends AtomicTransactionError {
268
276
  readonly code: "IDEMPOTENCY_CONFLICT";
269
- constructor(transactionId: string, message?: string);
277
+ constructor(transactionId: string, message?: string, status?: number, requestId?: string);
270
278
  }
271
279
  /**
272
280
  * The transaction id exists, but its recorded identity cannot be checked by
@@ -277,12 +285,20 @@ export declare class TransactionIdConflictError extends AtomicTransactionError {
277
285
  */
278
286
  export declare class TransactionIdUnverifiableError extends AtomicTransactionError {
279
287
  readonly code: "IDEMPOTENCY_UNVERIFIABLE";
280
- constructor(transactionId: string, message?: string);
288
+ constructor(transactionId: string, message?: string, status?: number, requestId?: string);
281
289
  }
282
- /** Which predicate failed, and what the authority actually holds. */
290
+ /**
291
+ * Which predicate failed, and what the authority actually holds.
292
+ *
293
+ * The same shape on every runtime and route: `collection` is the
294
+ * application's collection name (never a storage namespace), `id` the record
295
+ * id, and `key` the record's `collection:id`. A fence failure names the
296
+ * first fenced collection, `key: 'read-basis'`, and no `id`.
297
+ */
283
298
  export interface ConditionalConflictDetail {
284
299
  predicate: 'version' | 'epoch' | 'lease' | 'present' | 'missing' | 'fence';
285
300
  collection: string;
301
+ id?: string;
286
302
  key: string;
287
303
  expected?: number | string;
288
304
  actual?: number | string | null;
@@ -300,7 +316,7 @@ export interface ConditionalConflictDetail {
300
316
  export declare class ConditionalConflictError extends AtomicTransactionError {
301
317
  readonly code: "PRECONDITION_FAILED";
302
318
  readonly failure?: ConditionalConflictDetail;
303
- constructor(message: string, transactionId: string, failure?: ConditionalConflictDetail);
319
+ constructor(message: string, transactionId: string, failure?: ConditionalConflictDetail, status?: number, requestId?: string);
304
320
  }
305
321
  /**
306
322
  * A refusal a conditional write is *allowed* to have, told apart from every
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,7 @@
22
22
  * a runtime that cannot provide that path refuses the transaction rather than
23
23
  * silently degrading it into a sequence of independent writes.
24
24
  */
25
+ import { FeltDBServiceError } from './error-codes.js';
25
26
  /** Largest number of records plus predicates one read basis may name. */
26
27
  export const TRANSACTION_READ_SET_LIMIT = 1_000;
27
28
  const READ_SET_SEGMENT = /^[A-Za-z0-9._-]{1,128}$/;
@@ -66,17 +67,22 @@ export function normaliseReadSet(reads) {
66
67
  predicates: [...predicates.entries()].sort(([left], [right]) => (left < right ? -1 : 1)).map(([, value]) => value),
67
68
  };
68
69
  }
69
- /** Thrown when a transaction cannot be committed. Nothing was applied. */
70
- export class AtomicTransactionError extends Error {
70
+ /**
71
+ * Thrown when a transaction cannot be committed, or when its outcome is not
72
+ * known (`code: 'COMMIT_OUTCOME_UNKNOWN'`, `'DURABILITY_FAILURE'`).
73
+ *
74
+ * A `FeltDBServiceError`, so one `instanceof` and one `code` describe every
75
+ * typed failure, whichever runtime or transport produced it. `status` and
76
+ * `requestId` are the authority's, when it answered.
77
+ */
78
+ export class AtomicTransactionError extends FeltDBServiceError {
71
79
  transactionId;
72
- code;
73
- status;
74
- constructor(message, transactionId, code, status, cause) {
75
- super(message, { cause });
80
+ constructor(message, transactionId, code, status, cause, requestId) {
81
+ super(message, code ?? 'TRANSACTION_FAILED', requestId, status);
82
+ if (cause !== undefined)
83
+ this.cause = cause;
76
84
  this.name = 'AtomicTransactionError';
77
85
  this.transactionId = transactionId;
78
- this.code = code;
79
- this.status = status;
80
86
  }
81
87
  }
82
88
  /**
@@ -88,8 +94,8 @@ export class AtomicTransactionError extends Error {
88
94
  */
89
95
  export class TransactionIdConflictError extends AtomicTransactionError {
90
96
  code = 'IDEMPOTENCY_CONFLICT';
91
- constructor(transactionId, message) {
92
- super(message ?? `Transaction ${transactionId} was already committed with a different payload`, transactionId);
97
+ constructor(transactionId, message, status, requestId) {
98
+ super(message ?? `Transaction ${transactionId} was already committed with a different payload`, transactionId, 'IDEMPOTENCY_CONFLICT', status, undefined, requestId);
93
99
  this.name = 'TransactionIdConflictError';
94
100
  }
95
101
  }
@@ -102,8 +108,8 @@ export class TransactionIdConflictError extends AtomicTransactionError {
102
108
  */
103
109
  export class TransactionIdUnverifiableError extends AtomicTransactionError {
104
110
  code = 'IDEMPOTENCY_UNVERIFIABLE';
105
- constructor(transactionId, message) {
106
- super(message ?? `Transaction ${transactionId} exists, but its recorded identity cannot be verified by this build`, transactionId);
111
+ constructor(transactionId, message, status, requestId) {
112
+ super(message ?? `Transaction ${transactionId} exists, but its recorded identity cannot be verified by this build`, transactionId, 'IDEMPOTENCY_UNVERIFIABLE', status, undefined, requestId);
107
113
  this.name = 'TransactionIdUnverifiableError';
108
114
  }
109
115
  }
@@ -120,8 +126,8 @@ export class TransactionIdUnverifiableError extends AtomicTransactionError {
120
126
  export class ConditionalConflictError extends AtomicTransactionError {
121
127
  code = 'PRECONDITION_FAILED';
122
128
  failure;
123
- constructor(message, transactionId, failure) {
124
- super(message, transactionId);
129
+ constructor(message, transactionId, failure, status, requestId) {
130
+ super(message, transactionId, 'PRECONDITION_FAILED', status, undefined, requestId);
125
131
  this.name = 'ConditionalConflictError';
126
132
  this.failure = failure;
127
133
  }
Binary file
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "feltdb-wasm",
3
3
  "type": "module",
4
- "version": "0.2.2",
4
+ "version": "0.3.0",
5
5
  "files": [
6
6
  "feltdb_wasm_bg.wasm",
7
7
  "feltdb_wasm.js",
@@ -46,7 +46,7 @@ export interface Workload {
46
46
  current_claim?: WorkloadClaim;
47
47
  execution_history: unknown[];
48
48
  attempts: unknown[];
49
- checkpoints: unknown[];
49
+ checkpoints: WorkloadCheckpoint[];
50
50
  result?: WorkloadResult;
51
51
  }
52
52
  export interface WorkloadClaim {
@@ -69,10 +69,38 @@ export interface WorkloadResult {
69
69
  produced_by: string;
70
70
  created_at: number;
71
71
  }
72
+ export interface WorkloadCheckpoint {
73
+ checkpoint_id: string;
74
+ workload_id: string;
75
+ attempt_id: string;
76
+ sequence: number;
77
+ state: unknown;
78
+ state_hash: string;
79
+ created_at: number;
80
+ produced_by: string;
81
+ }
82
+ /** What a fenced worker may read: its input and every committed checkpoint, including those of lost attempts. */
83
+ export interface WorkloadExecutionContext {
84
+ workload_id: string;
85
+ attempt_id: string;
86
+ worker_id: string;
87
+ capabilities: string[];
88
+ connection_scopes: string[];
89
+ secret_references: string[];
90
+ expires_at: number;
91
+ fencing_token: number;
92
+ input: unknown;
93
+ checkpoints: WorkloadCheckpoint[];
94
+ }
72
95
  export declare class WorkloadClient {
73
96
  private baseUrl;
74
97
  private fetcher;
75
98
  constructor(baseUrl?: string, fetcher?: typeof fetch);
99
+ /**
100
+ * Refusals are `FeltDBServiceError`s carrying the authority's code, status and body (`details` reads its details). A transport failure on a
101
+ * write is `COMMIT_OUTCOME_UNKNOWN`: the report may have landed, so retry the same report (same fence, result id
102
+ * and output), which the authority replays, rather than a different one.
103
+ */
76
104
  private json;
77
105
  create(input: CreateWorkloadInput): Promise<Workload>;
78
106
  list(applicationId: string): Promise<{
@@ -92,11 +120,11 @@ export declare class WorkloadClient {
92
120
  state: WorkloadState;
93
121
  }>;
94
122
  confirmCancelled(id: string, fence: unknown): Promise<void>;
95
- executionContext(id: string, input: unknown): Promise<unknown>;
123
+ executionContext(id: string, input: unknown): Promise<WorkloadExecutionContext>;
96
124
  cancel(id: string, grant: SignedGrant): Promise<{
97
125
  state: WorkloadState;
98
126
  }>;
99
- retry(id: string, grant: SignedGrant): Promise<void>;
127
+ retry(id: string, grant: SignedGrant, reason?: string): Promise<void>;
100
128
  history(id: string): Promise<unknown>;
101
129
  result(id: string): Promise<WorkloadResult | undefined>;
102
130
  }
@@ -1 +1 @@
1
- {"version":3,"file":"workload.d.ts","sourceRoot":"","sources":["../src/workload.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workload.d.ts","sourceRoot":"","sources":["../src/workload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE5E,MAAM,MAAM,aAAa,GAAC,SAAS,GAAC,OAAO,GAAC,SAAS,GAAC,SAAS,GAAC,cAAc,GAAC,YAAY,GAAC,wBAAwB,GAAC,WAAW,GAAC,QAAQ,GAAC,WAAW,GAAC,WAAW,GAAC,aAAa,CAAC;AAChL,MAAM,WAAW,mBAAmB;IAAC,YAAY,EAAC,MAAM,CAAC;IAAA,gBAAgB,EAAC,MAAM,CAAC;IAAA,YAAY,EAAC,MAAM,CAAC;IAAA,OAAO,EAAC,OAAO,GAAC,aAAa,CAAC;IAAA,QAAQ,EAAC,MAAM,EAAE,CAAA;CAAC;AACrJ,MAAM,WAAW,mBAAmB;IAAC,SAAS,EAAC,MAAM,CAAC;IAAA,cAAc,EAAC,MAAM,CAAC;IAAA,WAAW,EAAC,MAAM,CAAC;IAAA,aAAa,EAAC,MAAM,CAAC;IAAA,mBAAmB,EAAC,MAAM,CAAC;IAAA,OAAO,EAAC,MAAM,CAAC;IAAA,KAAK,EAAC,OAAO,CAAC;IAAA,YAAY,EAAC,oBAAoB,CAAC;IAAA,sBAAsB,EAAC,WAAW,CAAC;IAAA,mBAAmB,EAAC,MAAM,EAAE,CAAC;IAAA,iBAAiB,CAAC,EAAC,MAAM,EAAE,CAAC;IAAA,QAAQ,CAAC,EAAC,MAAM,CAAC;IAAA,eAAe,EAAC,MAAM,CAAC;IAAA,YAAY,CAAC,EAAC,mBAAmB,CAAC;IAAA,QAAQ,CAAC,EAAC,MAAM,CAAC,MAAM,EAAC,MAAM,CAAC,CAAC;IAAA,YAAY,CAAC,EAAC,KAAK,CAAC;QAAC,WAAW,EAAC,MAAM,CAAC;QAAA,cAAc,CAAC,EAAC,aAAa,CAAA;KAAC,CAAC,CAAC,CAAA,2HAA2H;IAAA,UAAU,CAAC,EAAC,MAAM,CAAC;IAAA,UAAU,CAAC,EAAC,MAAM,CAAA;CAAC;AAC7nB,MAAM,WAAW,QAAQ;IAAC,WAAW,EAAC,MAAM,CAAC;IAAA,SAAS,EAAC,MAAM,CAAC;IAAA,cAAc,EAAC,MAAM,CAAC;IAAA,aAAa,EAAC,MAAM,CAAC;IAAA,KAAK,EAAC,OAAO,CAAC;IAAA,UAAU,EAAC,MAAM,CAAC;IAAA,QAAQ,EAAC,MAAM,CAAC;IAAA,KAAK,EAAC,aAAa,CAAC;IAAA,aAAa,EAAC,MAAM,CAAC;IAAA,WAAW,EAAC,MAAM,CAAC;IAAA,eAAe,CAAC,EAAC,MAAM,CAAC;IAAA,YAAY,CAAC,EAAC,MAAM,CAAC;IAAA,aAAa,CAAC,EAAC,aAAa,CAAC;IAAA,iBAAiB,EAAC,OAAO,EAAE,CAAC;IAAA,QAAQ,EAAC,OAAO,EAAE,CAAC;IAAA,WAAW,EAAC,kBAAkB,EAAE,CAAC;IAAA,MAAM,CAAC,EAAC,cAAc,CAAA;CAAC;AACtY,MAAM,WAAW,aAAa;IAAC,QAAQ,EAAC,MAAM,CAAC;IAAA,WAAW,EAAC,MAAM,CAAC;IAAA,SAAS,EAAC,MAAM,CAAC;IAAA,QAAQ,EAAC,MAAM,CAAC;IAAA,aAAa,EAAC,MAAM,CAAC;IAAA,UAAU,EAAC,MAAM,CAAC;IAAA,UAAU,EAAC,MAAM,CAAA;CAAC;AAC5J,MAAM,WAAW,cAAc;IAAC,SAAS,EAAC,MAAM,CAAC;IAAA,WAAW,EAAC,MAAM,CAAC;IAAA,UAAU,EAAC,MAAM,CAAC;IAAA,MAAM,EAAC,MAAM,CAAC;IAAA,MAAM,EAAC,OAAO,CAAC;IAAA,WAAW,EAAC,MAAM,CAAC;IAAA,SAAS,EAAC,MAAM,EAAE,CAAC;IAAA,WAAW,EAAC,MAAM,CAAC;IAAA,UAAU,EAAC,MAAM,CAAA;CAAC;AAC9L,MAAM,WAAW,kBAAkB;IAAC,aAAa,EAAC,MAAM,CAAC;IAAA,WAAW,EAAC,MAAM,CAAC;IAAA,UAAU,EAAC,MAAM,CAAC;IAAA,QAAQ,EAAC,MAAM,CAAC;IAAA,KAAK,EAAC,OAAO,CAAC;IAAA,UAAU,EAAC,MAAM,CAAC;IAAA,UAAU,EAAC,MAAM,CAAC;IAAA,WAAW,EAAC,MAAM,CAAA;CAAC;AACnL,iHAAiH;AACjH,MAAM,WAAW,wBAAwB;IAAC,WAAW,EAAC,MAAM,CAAC;IAAA,UAAU,EAAC,MAAM,CAAC;IAAA,SAAS,EAAC,MAAM,CAAC;IAAA,YAAY,EAAC,MAAM,EAAE,CAAC;IAAA,iBAAiB,EAAC,MAAM,EAAE,CAAC;IAAA,iBAAiB,EAAC,MAAM,EAAE,CAAC;IAAA,UAAU,EAAC,MAAM,CAAC;IAAA,aAAa,EAAC,MAAM,CAAC;IAAA,KAAK,EAAC,OAAO,CAAC;IAAA,WAAW,EAAC,kBAAkB,EAAE,CAAA;CAAC;AAClQ,qBAAa,cAAc;IACd,OAAO,CAAC,OAAO;IAAI,OAAO,CAAC,OAAO;gBAA1B,OAAO,SAAG,EAAS,OAAO,GAAC,OAAO,KAAW;IACjE;;;;OAIG;YACW,IAAI;IAOlB,MAAM,CAAC,KAAK,EAAC,mBAAmB;IAChC,IAAI,CAAC,aAAa,EAAC,MAAM;mBAA8B,QAAQ,EAAE;;IAAyE,OAAO,CAAC,EAAE,EAAC,MAAM;IAC3J,KAAK,CAAC,EAAE,EAAC,MAAM,EAAC,KAAK,EAAC;QAAC,SAAS,EAAC,MAAM,CAAC;QAAA,QAAQ,EAAC,MAAM,CAAC;QAAA,KAAK,EAAC,WAAW,CAAA;KAAC;IAC1E,KAAK,CAAC,EAAE,EAAC,MAAM,EAAC,KAAK,EAAC,OAAO;IAC7B,SAAS,CAAC,EAAE,EAAC,MAAM,EAAC,KAAK,EAAC,OAAO;IACjC,UAAU,CAAC,EAAE,EAAC,MAAM,EAAC,KAAK,EAAC,OAAO;IAClC,QAAQ,CAAC,EAAE,EAAC,MAAM,EAAC,KAAK,EAAC,OAAO;IAC/B,IAAI,CAAC,EAAE,EAAC,MAAM,EAAC,KAAK,EAAC,OAAO;eAA0B,aAAa;;IACnE,gBAAgB,CAAC,EAAE,EAAC,MAAM,EAAC,KAAK,EAAC,OAAO;IACxC,gBAAgB,CAAC,EAAE,EAAC,MAAM,EAAC,KAAK,EAAC,OAAO;IACzC,MAAM,CAAC,EAAE,EAAC,MAAM,EAAC,KAAK,EAAC,WAAW;eAA0B,aAAa;;IACzE,KAAK,CAAC,EAAE,EAAC,MAAM,EAAC,KAAK,EAAC,WAAW,EAAC,MAAM,CAAC,EAAC,MAAM;IAChD,OAAO,CAAC,EAAE,EAAC,MAAM;IAAgF,MAAM,CAAC,EAAE,EAAC,MAAM;CACjH"}
package/dist/workload.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { FeltDBErrorCode, FeltDBServiceError } from './error-codes.js';
1
2
  export class WorkloadClient {
2
3
  baseUrl;
3
4
  fetcher;
@@ -5,8 +6,32 @@ export class WorkloadClient {
5
6
  this.baseUrl = baseUrl;
6
7
  this.fetcher = fetcher;
7
8
  }
8
- async json(path, init) { const response = await this.fetcher(`${this.baseUrl}${path}`, { credentials: 'include', headers: { 'content-type': 'application/json', ...(init?.headers || {}) }, ...init }); const value = response.status === 204 ? undefined : await response.json(); if (!response.ok)
9
- throw new Error(value?.error || `Workload request failed (${response.status})`); return value; }
9
+ /**
10
+ * Refusals are `FeltDBServiceError`s carrying the authority's code, status and body (`details` reads its details). A transport failure on a
11
+ * write is `COMMIT_OUTCOME_UNKNOWN`: the report may have landed, so retry the same report (same fence, result id
12
+ * and output), which the authority replays, rather than a different one.
13
+ */
14
+ async json(path, init) {
15
+ let response;
16
+ try {
17
+ response = await this.fetcher(`${this.baseUrl}${path}`, { credentials: 'include', headers: { 'content-type': 'application/json', ...(init?.headers || {}) }, ...init });
18
+ }
19
+ catch (error) {
20
+ const mutating = (init?.method ?? 'GET').toUpperCase() !== 'GET';
21
+ throw new FeltDBServiceError(error instanceof Error ? error.message : String(error), mutating ? FeltDBErrorCode.COMMIT_OUTCOME_UNKNOWN : FeltDBErrorCode.SERVICE_UNAVAILABLE);
22
+ }
23
+ const text = response.status === 204 ? '' : await response.text();
24
+ let value;
25
+ try {
26
+ value = text ? JSON.parse(text) : undefined;
27
+ }
28
+ catch {
29
+ value = { message: text };
30
+ }
31
+ if (!response.ok)
32
+ throw new FeltDBServiceError(value?.error || value?.message || `Workload request failed (${response.status})`, value?.code || value?.error || `HTTP_${response.status}`, value?.request_id, response.status, value && typeof value === 'object' && !Array.isArray(value) ? value : undefined);
33
+ return value;
34
+ }
10
35
  create(input) { return this.json('/v1/workloads', { method: 'POST', body: JSON.stringify({ ...input, created_at: input.created_at || Math.floor(Date.now() / 1000) }) }); }
11
36
  list(applicationId) { return this.json(`/v1/workloads?application_id=${encodeURIComponent(applicationId)}`); }
12
37
  inspect(id) { return this.json(`/v1/workloads/${encodeURIComponent(id)}`); }
@@ -19,7 +44,7 @@ export class WorkloadClient {
19
44
  confirmCancelled(id, fence) { return this.json(`/v1/workloads/${encodeURIComponent(id)}/cancelled`, { method: 'POST', body: JSON.stringify(fence) }); }
20
45
  executionContext(id, input) { return this.json(`/v1/workloads/${encodeURIComponent(id)}/context`, { method: 'POST', body: JSON.stringify(input) }); }
21
46
  cancel(id, grant) { return this.json(`/v1/workloads/${encodeURIComponent(id)}/cancel`, { method: 'POST', body: JSON.stringify({ grant }) }); }
22
- retry(id, grant) { return this.json(`/v1/workloads/${encodeURIComponent(id)}/retry`, { method: 'POST', body: JSON.stringify({ grant }) }); }
47
+ retry(id, grant, reason) { return this.json(`/v1/workloads/${encodeURIComponent(id)}/retry`, { method: 'POST', body: JSON.stringify(reason === undefined ? { grant } : { grant, reason }) }); }
23
48
  history(id) { return this.json(`/v1/workloads/${encodeURIComponent(id)}/history`); }
24
49
  result(id) { return this.json(`/v1/workloads/${encodeURIComponent(id)}/result`); }
25
50
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@feltdb/core",
3
- "version": "0.13.0",
3
+ "version": "0.15.0",
4
4
  "description": "FeltDB Core - Application-facing database with Browser, Local, and Server runtimes. Durable state, reactive APIs.",
5
5
  "license": "MIT",
6
6
  "type": "module",