@voxgig/system 1.7.0 → 1.12.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/README.md +32 -64
- package/dist/lib/add.js +143 -1
- package/dist/lib/add.js.map +1 -1
- package/dist/lib/context.d.ts +10 -0
- package/dist/lib/context.js +53 -0
- package/dist/lib/context.js.map +1 -0
- package/dist/system.d.ts +2 -1
- package/dist/system.js +3 -1
- package/dist/system.js.map +1 -1
- package/lib/add.ts +147 -0
- package/lib/context.ts +87 -0
- package/package.json +7 -10
- package/system.ts +2 -0
package/README.md
CHANGED
|
@@ -1,81 +1,49 @@
|
|
|
1
1
|
# @voxgig/system
|
|
2
2
|
|
|
3
|
-
Runtime and tooling for Voxgig system projects
|
|
4
|
-
|
|
5
|
-
and the `voxgig-system` command line.
|
|
3
|
+
Runtime and tooling for Voxgig system projects (as created by
|
|
4
|
+
`npm create @voxgig/system`):
|
|
6
5
|
|
|
7
|
-
|
|
6
|
+
- **Runtime** — service loading by convention (`MakeSrv`), local and live
|
|
7
|
+
system assembly (`Local`, `Live`, `System`) wired from the compiled
|
|
8
|
+
[voxgig-model](https://github.com/voxgig/model).
|
|
9
|
+
- **`voxgig-system` CLI** — add model elements (`entity`, `srv`, `msg`,
|
|
10
|
+
`field`, `env`) and manage generation templates (`template
|
|
11
|
+
list/eject/diff`). Commands append jsonic blocks to the model sources;
|
|
12
|
+
aontu unification merges them, preserving your formatting and comments.
|
|
8
13
|
|
|
9
|
-
|
|
10
|
-
`npm create @voxgig/system`). Run inside the project (or its `backend/`
|
|
11
|
-
folder); the commands append jsonic blocks to the model source files —
|
|
12
|
-
aontu unification merges them, and your formatting and comments are
|
|
13
|
-
preserved. Run `npm run model-build` afterwards to compile.
|
|
14
|
+
## Documentation
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
voxgig-system add entity [name|spec] add an entity (name may be zone/name)
|
|
17
|
-
voxgig-system add srv [name|spec] add a service
|
|
18
|
-
voxgig-system add msg [name|spec] add a message (path: thing.save.item)
|
|
19
|
-
voxgig-system add field <entity> [field...] add field(s) to an entity
|
|
20
|
-
voxgig-system add fields <entity> [field...] alias of add field
|
|
21
|
-
```
|
|
16
|
+
Organised by the [Diátaxis](https://diataxis.fr) framework:
|
|
22
17
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
18
|
+
- **Tutorial**: [Grow a project with the CLI](docs/tutorial.md)
|
|
19
|
+
- **How-to guides**:
|
|
20
|
+
- [Add model elements](docs/how-to/add-elements.md)
|
|
21
|
+
- [Customise generation templates](docs/how-to/customise-templates.md)
|
|
22
|
+
- **Reference**:
|
|
23
|
+
- [CLI](docs/reference/cli.md)
|
|
24
|
+
- [API](docs/reference/api.md)
|
|
25
|
+
- **Explanation**: [How the model wires the runtime](docs/explanation/model-wiring.md)
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
# empty elements by name
|
|
29
|
-
voxgig-system add entity thing # zone defaults ('app', or the file's zone)
|
|
30
|
-
voxgig-system add entity shop/order # zone-qualified
|
|
31
|
-
voxgig-system add srv thing
|
|
32
|
-
voxgig-system add msg thing.get.info # 'aim' is prepended if missing
|
|
27
|
+
Working on this repo with an AI agent? See [AGENTS.md](AGENTS.md).
|
|
33
28
|
|
|
34
|
-
|
|
35
|
-
voxgig-system add entity '{name:thing,field:{title:{kind:String}}}'
|
|
36
|
-
voxgig-system add srv '{name:pub,user:{required:false}}'
|
|
37
|
-
voxgig-system add msg "{name:thing.save.item,params:{item:{'\$\$':'Open',title:String}}}"
|
|
29
|
+
## Quick start
|
|
38
30
|
|
|
39
|
-
|
|
40
|
-
|
|
31
|
+
```bash
|
|
32
|
+
# inside a Voxgig system project (or its backend/ folder)
|
|
33
|
+
voxgig-system add entity shop/product
|
|
34
|
+
voxgig-system add field shop/product title 'price:Number'
|
|
35
|
+
voxgig-system add env web
|
|
36
|
+
npm run model-build
|
|
41
37
|
```
|
|
42
38
|
|
|
43
|
-
|
|
44
|
-
property like `item`). Gubu param objects are closed by default; mark an
|
|
45
|
-
object with `'$$': 'Open'` (the same convention as entity `valid`) to
|
|
46
|
-
allow additional properties.
|
|
39
|
+
## Develop
|
|
47
40
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
Add.entity(folder, 'thing')
|
|
53
|
-
Add.fields(folder, 'thing', ['title', 'done:Boolean'])
|
|
41
|
+
```bash
|
|
42
|
+
npm install
|
|
43
|
+
npm run build
|
|
44
|
+
npm test
|
|
54
45
|
```
|
|
55
46
|
|
|
56
47
|
## License
|
|
57
48
|
|
|
58
49
|
MIT. Copyright (c) Voxgig Ltd.
|
|
59
|
-
|
|
60
|
-
## Custom generation templates
|
|
61
|
-
|
|
62
|
-
Generation templates resolve in layers — first hit wins:
|
|
63
|
-
|
|
64
|
-
1. `backend/src/gen/<name>.ts` — compiled generator override (deep custom)
|
|
65
|
-
2. `backend/tm/lambda/<frag>` — project fragment (text-level custom)
|
|
66
|
-
3. `@voxgig/build` defaults
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
voxgig-system template list # each template + its providing layer
|
|
70
|
-
voxgig-system template eject srv.yml.frag # copy fragment -> tm/lambda/
|
|
71
|
-
voxgig-system template eject srv_yml --code # copy generator -> src/gen/
|
|
72
|
-
voxgig-system template diff # ejected copies vs installed package
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
Fragments are jostraca-style text templates with `$$slot$$` placeholders —
|
|
76
|
-
edit and re-run `npm run model-build`, no compile step. Ejecting records
|
|
77
|
-
provenance (`tm/lambda/.ejected.json`) so `template diff` can flag
|
|
78
|
-
upstream template changes after a `@voxgig/build` upgrade. `--code`
|
|
79
|
-
copies the template source rewired to `@voxgig/build`'s public API; the
|
|
80
|
-
project then owns that generator (`npm run build && npm run model-build`
|
|
81
|
-
after edits).
|
package/dist/lib/add.js
CHANGED
|
@@ -383,8 +383,142 @@ exports.ENV_KINDS = ENV_KINDS;
|
|
|
383
383
|
// '{name:aws2,kind:aws,region:eu-west-1,stage:prd}'`. Appends to the
|
|
384
384
|
// model file referenced as `main: env: @"..."` when present, else to the
|
|
385
385
|
// root model file.
|
|
386
|
+
// Service declarations the web env needs so MakeSrv wires the generated
|
|
387
|
+
// auth + generic-entity service files. Appended to srv.aontu / msg.aontu by
|
|
388
|
+
// `add env web` (idempotent: only when the auth service is not yet declared).
|
|
389
|
+
const WEB_SRV_DECL = `
|
|
390
|
+
# Auth service (signin/signout/session + settings/security).
|
|
391
|
+
auth: {
|
|
392
|
+
user: {
|
|
393
|
+
required: false
|
|
394
|
+
}
|
|
395
|
+
in: {
|
|
396
|
+
aim: {
|
|
397
|
+
auth: {}
|
|
398
|
+
web: {
|
|
399
|
+
on: {
|
|
400
|
+
auth: {
|
|
401
|
+
'$': {
|
|
402
|
+
allow: true
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
api: {
|
|
410
|
+
web: {
|
|
411
|
+
path: {
|
|
412
|
+
area: 'private/'
|
|
413
|
+
suffix: ''
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
env: {
|
|
418
|
+
lambda: {
|
|
419
|
+
active: true
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
|
|
425
|
+
# Generic entity service: one CRUD implementation parameterised by the entity
|
|
426
|
+
# canon carried in the message (aim:ent,cmd:<verb> with ent:'zone/name').
|
|
427
|
+
# Access is scoped by project membership (see src/srv/ent/access.ts).
|
|
428
|
+
ent: {
|
|
429
|
+
in: {
|
|
430
|
+
aim: ent: {}
|
|
431
|
+
aim: web: on: ent: '$': allow: true
|
|
432
|
+
}
|
|
433
|
+
user: required: true
|
|
434
|
+
api: web: path: { area: 'private/', suffix: '' }
|
|
435
|
+
env: lambda: active: true
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
|
|
439
|
+
# REST API service (strict JSON): answers aim:api messages; the express
|
|
440
|
+
# router in src/env/web/api.ts maps <prefix>/<version> REST calls onto
|
|
441
|
+
# them, resolving the principal from the API access key. Entity data
|
|
442
|
+
# validation comes from the model via the GENERATED shapes in
|
|
443
|
+
# src/srv/api/valid_gen.ts (api_gen action).
|
|
444
|
+
api: {
|
|
445
|
+
in: {
|
|
446
|
+
aim: api: {}
|
|
447
|
+
}
|
|
448
|
+
user: required: true
|
|
449
|
+
env: lambda: active: true
|
|
450
|
+
}`;
|
|
451
|
+
const WEB_MSG_DECL = `
|
|
452
|
+
# Auth messages + gateway (web) wrappers.
|
|
453
|
+
aim: auth: get: info: {}
|
|
454
|
+
aim: auth: signin: user: {}
|
|
455
|
+
aim: auth: signout: user: {}
|
|
456
|
+
aim: auth: load: auth: {}
|
|
457
|
+
aim: auth: change: pass: {}
|
|
458
|
+
aim: auth: update: user: {}
|
|
459
|
+
aim: auth: remind: pass: {}
|
|
460
|
+
|
|
461
|
+
# Generic entity CRUD (parameterised by ent:'zone/name' in the message).
|
|
462
|
+
aim: ent: {
|
|
463
|
+
get: info: {}
|
|
464
|
+
cmd: list: {}
|
|
465
|
+
cmd: load: {}
|
|
466
|
+
cmd: save: {}
|
|
467
|
+
cmd: remove: {}
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
# THE BROWSER SURFACE: aim:web is the ONLY namespace the gateway accepts
|
|
471
|
+
# from a browser (see src/env/web/web.ts). Every message a browser may
|
|
472
|
+
# send is declared here as a web_ PROXY forwarding to the real service
|
|
473
|
+
# message, so service namespaces stay internal and the exposed surface is
|
|
474
|
+
# exactly this list.
|
|
475
|
+
aim: web: on: auth: signin: user: '$': { file: './web_signin_user' }
|
|
476
|
+
aim: web: on: auth: signout: user: '$': { file: './web_signout_user' }
|
|
477
|
+
aim: web: on: auth: load: auth: '$': { file: './web_load_auth' }
|
|
478
|
+
aim: web: on: auth: change: pass: '$': { file: './web_change_pass' }
|
|
479
|
+
aim: web: on: auth: update: user: '$': { file: './web_update_user' }
|
|
480
|
+
aim: web: on: auth: remind: pass: '$': { file: './web_remind_pass' }
|
|
481
|
+
|
|
482
|
+
# Browser proxies for the generic entity service.
|
|
483
|
+
aim: web: on: ent: {
|
|
484
|
+
cmd: list: { '$': { file: './web_cmd_list' }}
|
|
485
|
+
cmd: load: { '$': { file: './web_cmd_load' }}
|
|
486
|
+
cmd: save: { '$': { file: './web_cmd_save' }}
|
|
487
|
+
cmd: remove: { '$': { file: './web_cmd_remove' }}
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
# REST API messages (see src/env/web/api.ts for the HTTP mapping).
|
|
491
|
+
aim: api: get: info: {}
|
|
492
|
+
aim: api: on: ent: '$': params: { '$$': 'Open', op: String, ent: String }
|
|
493
|
+
|
|
494
|
+
# API access keys (Settings & security).
|
|
495
|
+
aim: auth: create: apikey: {}
|
|
496
|
+
aim: auth: list: apikey: {}
|
|
497
|
+
aim: auth: revoke: apikey: {}
|
|
498
|
+
|
|
499
|
+
aim: web: on: auth: create: apikey: '$': { file: './web_create_apikey' }
|
|
500
|
+
aim: web: on: auth: list: apikey: '$': { file: './web_list_apikey' }
|
|
501
|
+
aim: web: on: auth: revoke: apikey: '$': { file: './web_revoke_apikey' }`;
|
|
502
|
+
const WEB_ENT_DECL = `
|
|
503
|
+
# API access keys (REST API auth). The raw key is shown ONCE at creation;
|
|
504
|
+
# only a sha-256 hash is stored. Managed via aim:auth,{create,list,revoke}:apikey
|
|
505
|
+
# (Settings & security in the web app). Never exposed via the REST API or
|
|
506
|
+
# the generic ent service (sys zone), and hidden from the web UI nav.
|
|
507
|
+
sys: apikey: {
|
|
508
|
+
ux: { hide: true }
|
|
509
|
+
field: {
|
|
510
|
+
id: { label: 'ID' kind: String }
|
|
511
|
+
user_id: { label: 'User' kind: String ref: 'sys/user' valid: Skip }
|
|
512
|
+
name: { label: 'Name' kind: String valid: 'Min(1).Max(99)' }
|
|
513
|
+
hash: { label: 'Hash' kind: String valid: Skip }
|
|
514
|
+
prefix: { label: 'Prefix' kind: String valid: Skip }
|
|
515
|
+
revoked: { label: 'Revoked' kind: Boolean valid: Skip }
|
|
516
|
+
t_c: { label: 'Created' kind: Number valid: Skip }
|
|
517
|
+
}
|
|
518
|
+
valid: '$$': 'Open'
|
|
519
|
+
}`;
|
|
386
520
|
function addEnv(start, arg) {
|
|
387
|
-
var _a, _b;
|
|
521
|
+
var _a, _b, _c, _d;
|
|
388
522
|
const files = resolveModelFiles(start);
|
|
389
523
|
const { name, def } = parseArg(arg, 'env');
|
|
390
524
|
const kind = def.kind || name;
|
|
@@ -401,6 +535,14 @@ function addEnv(start, arg) {
|
|
|
401
535
|
if (null == def.active) {
|
|
402
536
|
def.active = true;
|
|
403
537
|
}
|
|
538
|
+
// The web env needs the auth + generic entity services declared in the
|
|
539
|
+
// model so MakeSrv wires the generated service files (idempotent: only when
|
|
540
|
+
// the auth service is not already declared).
|
|
541
|
+
if ('web' === kind && null == ((_d = (_c = model === null || model === void 0 ? void 0 : model.main) === null || _c === void 0 ? void 0 : _c.srv) === null || _d === void 0 ? void 0 : _d.auth)) {
|
|
542
|
+
append(files.srv, WEB_SRV_DECL);
|
|
543
|
+
append(files.msg, WEB_MSG_DECL);
|
|
544
|
+
append(files.ent, WEB_ENT_DECL);
|
|
545
|
+
}
|
|
404
546
|
// Target: the env model file when referenced, else the root model file.
|
|
405
547
|
const src = node_fs_1.default.readFileSync(files.model, 'utf8');
|
|
406
548
|
const m = src.match(/main:\s*env:\s*@"([^"]+)"/);
|
package/dist/lib/add.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../lib/add.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../lib/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
type ContextSpec = {
|
|
2
|
+
env: string;
|
|
3
|
+
stage?: string;
|
|
4
|
+
srvname?: string;
|
|
5
|
+
};
|
|
6
|
+
declare const ALL_SRV = "all";
|
|
7
|
+
declare function resolveStage(model: any, spec: ContextSpec): string;
|
|
8
|
+
declare function context(seneca: any, model: any, pkg: any, spec: ContextSpec): any;
|
|
9
|
+
export type { ContextSpec, };
|
|
10
|
+
export { context, resolveStage, ALL_SRV, };
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* Copyright © 2026 Voxgig Ltd, MIT License. */
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.ALL_SRV = void 0;
|
|
5
|
+
exports.context = context;
|
|
6
|
+
exports.resolveStage = resolveStage;
|
|
7
|
+
// The service name for a process running every service in-tree. AWS Lambda
|
|
8
|
+
// is the one deployment that overrides it: one function per service.
|
|
9
|
+
const ALL_SRV = 'all';
|
|
10
|
+
exports.ALL_SRV = ALL_SRV;
|
|
11
|
+
// stage resolution, most specific first:
|
|
12
|
+
// 1. an explicit spec.stage - the caller knows better (Lambda's STAGE)
|
|
13
|
+
// 2. process.env.STAGE - deploy-time override
|
|
14
|
+
// 3. the model's env entry stage - main.env.<env>.stage, e.g. aws.stage
|
|
15
|
+
// 4. the env name - a sensible last resort ('local', 'docker')
|
|
16
|
+
//
|
|
17
|
+
// (3) is the one that was being thrown away: a model could say
|
|
18
|
+
// `aws: { stage: 'dev' }` and every entry would still report 'aws'.
|
|
19
|
+
function resolveStage(model, spec) {
|
|
20
|
+
if (null != spec.stage && '' !== spec.stage) {
|
|
21
|
+
return spec.stage;
|
|
22
|
+
}
|
|
23
|
+
const fromEnvVar = 'undefined' === typeof process ? undefined :
|
|
24
|
+
process.env && process.env.STAGE;
|
|
25
|
+
if (null != fromEnvVar && '' !== fromEnvVar) {
|
|
26
|
+
return fromEnvVar;
|
|
27
|
+
}
|
|
28
|
+
const envdef = model && model.main && model.main.env &&
|
|
29
|
+
model.main.env[spec.env];
|
|
30
|
+
if (envdef && null != envdef.stage && '' !== envdef.stage) {
|
|
31
|
+
return envdef.stage;
|
|
32
|
+
}
|
|
33
|
+
return spec.env;
|
|
34
|
+
}
|
|
35
|
+
// context(seneca, model, pkg, { env }): set the runtime context an entry
|
|
36
|
+
// needs. Returns seneca so it can be chained.
|
|
37
|
+
//
|
|
38
|
+
// `env` is required and NOT derived: it is the one thing the model cannot
|
|
39
|
+
// tell us, because it names which entry is running. It need not be a model
|
|
40
|
+
// env name - 'lambda' and 'test' are entries without a matching main.env
|
|
41
|
+
// key - so it is deliberately not validated against the model.
|
|
42
|
+
function context(seneca, model, pkg, spec) {
|
|
43
|
+
if (null == spec || 'string' !== typeof spec.env || '' === spec.env) {
|
|
44
|
+
throw new Error('voxgig-system: context requires a non-empty `env` string');
|
|
45
|
+
}
|
|
46
|
+
seneca.context.model = model;
|
|
47
|
+
seneca.context.pkg = pkg;
|
|
48
|
+
seneca.context.env = spec.env;
|
|
49
|
+
seneca.context.stage = resolveStage(model, spec);
|
|
50
|
+
seneca.context.srvname = spec.srvname || ALL_SRV;
|
|
51
|
+
return seneca;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../lib/context.ts"],"names":[],"mappings":";AAAA,+CAA+C;;;QAmF7C,OAAO;QACP,YAAY;AA9Dd,2EAA2E;AAC3E,qEAAqE;AACrE,MAAM,OAAO,GAAG,KAAK,CAAA;QA6DnB,OAAO;AA1DT,yCAAyC;AACzC,8EAA8E;AAC9E,0DAA0D;AAC1D,0EAA0E;AAC1E,gFAAgF;AAChF,EAAE;AACF,+DAA+D;AAC/D,oEAAoE;AACpE,SAAS,YAAY,CAAC,KAAU,EAAE,IAAiB;IACjD,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED,MAAM,UAAU,GAAG,WAAW,KAAK,OAAO,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAA;IAClC,IAAI,IAAI,IAAI,UAAU,IAAI,EAAE,KAAK,UAAU,EAAE,CAAC;QAC5C,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG;QAClD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC1B,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;QAC1D,OAAO,MAAM,CAAC,KAAK,CAAA;IACrB,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAA;AACjB,CAAC;AAGD,yEAAyE;AACzE,8CAA8C;AAC9C,EAAE;AACF,0EAA0E;AAC1E,2EAA2E;AAC3E,yEAAyE;AACzE,+DAA+D;AAC/D,SAAS,OAAO,CAAC,MAAW,EAAE,KAAU,EAAE,GAAQ,EAAE,IAAiB;IACnE,IAAI,IAAI,IAAI,IAAI,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,GAAG,IAAI,EAAE,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;IAC7E,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAA;IAC5B,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG,CAAA;IACxB,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA;IAC7B,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IAChD,MAAM,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAA;IAEhD,OAAO,MAAM,CAAA;AACf,CAAC"}
|
package/dist/system.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { Utility } from './lib/utility';
|
|
|
3
3
|
import { MakeSrv } from './srv/make';
|
|
4
4
|
import { addEntity, addSrv, addMsg, addFields, addEnv, resolveModelFiles } from './lib/add';
|
|
5
5
|
import { listTemplates, ejectFragment, ejectCode, diffTemplates } from './lib/template';
|
|
6
|
+
import { context } from './lib/context';
|
|
6
7
|
declare function messages(seneca: any, options: any, reload: any): void;
|
|
7
8
|
declare function gubuify(params: any, Gubu: any): any;
|
|
8
9
|
declare function prepare(seneca: any, require: any): void;
|
|
@@ -34,4 +35,4 @@ declare const Template: {
|
|
|
34
35
|
ejectCode: typeof ejectCode;
|
|
35
36
|
diff: typeof diffTemplates;
|
|
36
37
|
};
|
|
37
|
-
export { Add, Template, gubuify, System, MakeSrv, Utility, Local, Live, };
|
|
38
|
+
export { Add, Template, context, gubuify, System, MakeSrv, Utility, Local, Live, };
|
package/dist/system.js
CHANGED
|
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
5
|
};
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.Utility = exports.MakeSrv = exports.System = exports.Template = exports.Add = void 0;
|
|
7
|
+
exports.Utility = exports.MakeSrv = exports.System = exports.context = exports.Template = exports.Add = void 0;
|
|
8
8
|
exports.gubuify = gubuify;
|
|
9
9
|
exports.Local = Local;
|
|
10
10
|
exports.Live = Live;
|
|
@@ -16,6 +16,8 @@ const make_1 = require("./srv/make");
|
|
|
16
16
|
Object.defineProperty(exports, "MakeSrv", { enumerable: true, get: function () { return make_1.MakeSrv; } });
|
|
17
17
|
const add_1 = require("./lib/add");
|
|
18
18
|
const template_1 = require("./lib/template");
|
|
19
|
+
const context_1 = require("./lib/context");
|
|
20
|
+
Object.defineProperty(exports, "context", { enumerable: true, get: function () { return context_1.context; } });
|
|
19
21
|
const { srvmsgs, deep } = utility_1.Utility;
|
|
20
22
|
function messages(seneca, options, reload) {
|
|
21
23
|
let srvname = seneca.fixedargs.plugin$.name.replace(/^srv_/, '');
|
package/dist/system.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system.js","sourceRoot":"","sources":["../system.ts"],"names":[],"mappings":";AAAA,+CAA+C;;;;;;
|
|
1
|
+
{"version":3,"file":"system.js","sourceRoot":"","sources":["../system.ts"],"names":[],"mappings":"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"}
|
package/lib/add.ts
CHANGED
|
@@ -469,6 +469,144 @@ const ENV_KINDS =
|
|
|
469
469
|
// '{name:aws2,kind:aws,region:eu-west-1,stage:prd}'`. Appends to the
|
|
470
470
|
// model file referenced as `main: env: @"..."` when present, else to the
|
|
471
471
|
// root model file.
|
|
472
|
+
// Service declarations the web env needs so MakeSrv wires the generated
|
|
473
|
+
// auth + generic-entity service files. Appended to srv.aontu / msg.aontu by
|
|
474
|
+
// `add env web` (idempotent: only when the auth service is not yet declared).
|
|
475
|
+
const WEB_SRV_DECL = `
|
|
476
|
+
# Auth service (signin/signout/session + settings/security).
|
|
477
|
+
auth: {
|
|
478
|
+
user: {
|
|
479
|
+
required: false
|
|
480
|
+
}
|
|
481
|
+
in: {
|
|
482
|
+
aim: {
|
|
483
|
+
auth: {}
|
|
484
|
+
web: {
|
|
485
|
+
on: {
|
|
486
|
+
auth: {
|
|
487
|
+
'$': {
|
|
488
|
+
allow: true
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
api: {
|
|
496
|
+
web: {
|
|
497
|
+
path: {
|
|
498
|
+
area: 'private/'
|
|
499
|
+
suffix: ''
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
env: {
|
|
504
|
+
lambda: {
|
|
505
|
+
active: true
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
|
|
511
|
+
# Generic entity service: one CRUD implementation parameterised by the entity
|
|
512
|
+
# canon carried in the message (aim:ent,cmd:<verb> with ent:'zone/name').
|
|
513
|
+
# Access is scoped by project membership (see src/srv/ent/access.ts).
|
|
514
|
+
ent: {
|
|
515
|
+
in: {
|
|
516
|
+
aim: ent: {}
|
|
517
|
+
aim: web: on: ent: '$': allow: true
|
|
518
|
+
}
|
|
519
|
+
user: required: true
|
|
520
|
+
api: web: path: { area: 'private/', suffix: '' }
|
|
521
|
+
env: lambda: active: true
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
|
|
525
|
+
# REST API service (strict JSON): answers aim:api messages; the express
|
|
526
|
+
# router in src/env/web/api.ts maps <prefix>/<version> REST calls onto
|
|
527
|
+
# them, resolving the principal from the API access key. Entity data
|
|
528
|
+
# validation comes from the model via the GENERATED shapes in
|
|
529
|
+
# src/srv/api/valid_gen.ts (api_gen action).
|
|
530
|
+
api: {
|
|
531
|
+
in: {
|
|
532
|
+
aim: api: {}
|
|
533
|
+
}
|
|
534
|
+
user: required: true
|
|
535
|
+
env: lambda: active: true
|
|
536
|
+
}`
|
|
537
|
+
|
|
538
|
+
const WEB_MSG_DECL = `
|
|
539
|
+
# Auth messages + gateway (web) wrappers.
|
|
540
|
+
aim: auth: get: info: {}
|
|
541
|
+
aim: auth: signin: user: {}
|
|
542
|
+
aim: auth: signout: user: {}
|
|
543
|
+
aim: auth: load: auth: {}
|
|
544
|
+
aim: auth: change: pass: {}
|
|
545
|
+
aim: auth: update: user: {}
|
|
546
|
+
aim: auth: remind: pass: {}
|
|
547
|
+
|
|
548
|
+
# Generic entity CRUD (parameterised by ent:'zone/name' in the message).
|
|
549
|
+
aim: ent: {
|
|
550
|
+
get: info: {}
|
|
551
|
+
cmd: list: {}
|
|
552
|
+
cmd: load: {}
|
|
553
|
+
cmd: save: {}
|
|
554
|
+
cmd: remove: {}
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
# THE BROWSER SURFACE: aim:web is the ONLY namespace the gateway accepts
|
|
558
|
+
# from a browser (see src/env/web/web.ts). Every message a browser may
|
|
559
|
+
# send is declared here as a web_ PROXY forwarding to the real service
|
|
560
|
+
# message, so service namespaces stay internal and the exposed surface is
|
|
561
|
+
# exactly this list.
|
|
562
|
+
aim: web: on: auth: signin: user: '$': { file: './web_signin_user' }
|
|
563
|
+
aim: web: on: auth: signout: user: '$': { file: './web_signout_user' }
|
|
564
|
+
aim: web: on: auth: load: auth: '$': { file: './web_load_auth' }
|
|
565
|
+
aim: web: on: auth: change: pass: '$': { file: './web_change_pass' }
|
|
566
|
+
aim: web: on: auth: update: user: '$': { file: './web_update_user' }
|
|
567
|
+
aim: web: on: auth: remind: pass: '$': { file: './web_remind_pass' }
|
|
568
|
+
|
|
569
|
+
# Browser proxies for the generic entity service.
|
|
570
|
+
aim: web: on: ent: {
|
|
571
|
+
cmd: list: { '$': { file: './web_cmd_list' }}
|
|
572
|
+
cmd: load: { '$': { file: './web_cmd_load' }}
|
|
573
|
+
cmd: save: { '$': { file: './web_cmd_save' }}
|
|
574
|
+
cmd: remove: { '$': { file: './web_cmd_remove' }}
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
# REST API messages (see src/env/web/api.ts for the HTTP mapping).
|
|
578
|
+
aim: api: get: info: {}
|
|
579
|
+
aim: api: on: ent: '$': params: { '$$': 'Open', op: String, ent: String }
|
|
580
|
+
|
|
581
|
+
# API access keys (Settings & security).
|
|
582
|
+
aim: auth: create: apikey: {}
|
|
583
|
+
aim: auth: list: apikey: {}
|
|
584
|
+
aim: auth: revoke: apikey: {}
|
|
585
|
+
|
|
586
|
+
aim: web: on: auth: create: apikey: '$': { file: './web_create_apikey' }
|
|
587
|
+
aim: web: on: auth: list: apikey: '$': { file: './web_list_apikey' }
|
|
588
|
+
aim: web: on: auth: revoke: apikey: '$': { file: './web_revoke_apikey' }`
|
|
589
|
+
|
|
590
|
+
const WEB_ENT_DECL = `
|
|
591
|
+
# API access keys (REST API auth). The raw key is shown ONCE at creation;
|
|
592
|
+
# only a sha-256 hash is stored. Managed via aim:auth,{create,list,revoke}:apikey
|
|
593
|
+
# (Settings & security in the web app). Never exposed via the REST API or
|
|
594
|
+
# the generic ent service (sys zone), and hidden from the web UI nav.
|
|
595
|
+
sys: apikey: {
|
|
596
|
+
ux: { hide: true }
|
|
597
|
+
field: {
|
|
598
|
+
id: { label: 'ID' kind: String }
|
|
599
|
+
user_id: { label: 'User' kind: String ref: 'sys/user' valid: Skip }
|
|
600
|
+
name: { label: 'Name' kind: String valid: 'Min(1).Max(99)' }
|
|
601
|
+
hash: { label: 'Hash' kind: String valid: Skip }
|
|
602
|
+
prefix: { label: 'Prefix' kind: String valid: Skip }
|
|
603
|
+
revoked: { label: 'Revoked' kind: Boolean valid: Skip }
|
|
604
|
+
t_c: { label: 'Created' kind: Number valid: Skip }
|
|
605
|
+
}
|
|
606
|
+
valid: '$$': 'Open'
|
|
607
|
+
}`
|
|
608
|
+
|
|
609
|
+
|
|
472
610
|
function addEnv(start: string, arg: string): AddResult {
|
|
473
611
|
const files = resolveModelFiles(start)
|
|
474
612
|
const { name, def } = parseArg(arg, 'env')
|
|
@@ -490,6 +628,15 @@ function addEnv(start: string, arg: string): AddResult {
|
|
|
490
628
|
def.active = true
|
|
491
629
|
}
|
|
492
630
|
|
|
631
|
+
// The web env needs the auth + generic entity services declared in the
|
|
632
|
+
// model so MakeSrv wires the generated service files (idempotent: only when
|
|
633
|
+
// the auth service is not already declared).
|
|
634
|
+
if ('web' === kind && null == model?.main?.srv?.auth) {
|
|
635
|
+
append(files.srv, WEB_SRV_DECL)
|
|
636
|
+
append(files.msg, WEB_MSG_DECL)
|
|
637
|
+
append(files.ent, WEB_ENT_DECL)
|
|
638
|
+
}
|
|
639
|
+
|
|
493
640
|
// Target: the env model file when referenced, else the root model file.
|
|
494
641
|
const src = Fs.readFileSync(files.model, 'utf8')
|
|
495
642
|
const m = src.match(/main:\s*env:\s*@"([^"]+)"/)
|
package/lib/context.ts
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/* Copyright © 2026 Voxgig Ltd, MIT License. */
|
|
2
|
+
|
|
3
|
+
// seneca.context: the runtime facts every environment entry has to put on
|
|
4
|
+
// the Seneca instance before services load.
|
|
5
|
+
//
|
|
6
|
+
// This used to be five hand-written assignments at the top of every
|
|
7
|
+
// generated entry (local, docker, vm, aws, azure, cloudflare, web, and the
|
|
8
|
+
// test setups). Copy-paste let them drift: azure never set `stage` or
|
|
9
|
+
// `srvname`, cloudflare set none of them, and the web runner reported
|
|
10
|
+
// `env: 'local'` when it was the web environment. Nothing read those
|
|
11
|
+
// fields yet, so the drift was silent - which is exactly why it spread.
|
|
12
|
+
//
|
|
13
|
+
// One call now sets all five, and everything that CAN be derived is.
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
type ContextSpec = {
|
|
17
|
+
env: string // which entry this is - the only fact not in the model
|
|
18
|
+
stage?: string // deploy stage; see the resolution order below
|
|
19
|
+
srvname?: string // 'all' for a single process, the service for one-per-srv
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
// The service name for a process running every service in-tree. AWS Lambda
|
|
24
|
+
// is the one deployment that overrides it: one function per service.
|
|
25
|
+
const ALL_SRV = 'all'
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
// stage resolution, most specific first:
|
|
29
|
+
// 1. an explicit spec.stage - the caller knows better (Lambda's STAGE)
|
|
30
|
+
// 2. process.env.STAGE - deploy-time override
|
|
31
|
+
// 3. the model's env entry stage - main.env.<env>.stage, e.g. aws.stage
|
|
32
|
+
// 4. the env name - a sensible last resort ('local', 'docker')
|
|
33
|
+
//
|
|
34
|
+
// (3) is the one that was being thrown away: a model could say
|
|
35
|
+
// `aws: { stage: 'dev' }` and every entry would still report 'aws'.
|
|
36
|
+
function resolveStage(model: any, spec: ContextSpec): string {
|
|
37
|
+
if (null != spec.stage && '' !== spec.stage) {
|
|
38
|
+
return spec.stage
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const fromEnvVar = 'undefined' === typeof process ? undefined :
|
|
42
|
+
process.env && process.env.STAGE
|
|
43
|
+
if (null != fromEnvVar && '' !== fromEnvVar) {
|
|
44
|
+
return fromEnvVar
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const envdef = model && model.main && model.main.env &&
|
|
48
|
+
model.main.env[spec.env]
|
|
49
|
+
if (envdef && null != envdef.stage && '' !== envdef.stage) {
|
|
50
|
+
return envdef.stage
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return spec.env
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
// context(seneca, model, pkg, { env }): set the runtime context an entry
|
|
58
|
+
// needs. Returns seneca so it can be chained.
|
|
59
|
+
//
|
|
60
|
+
// `env` is required and NOT derived: it is the one thing the model cannot
|
|
61
|
+
// tell us, because it names which entry is running. It need not be a model
|
|
62
|
+
// env name - 'lambda' and 'test' are entries without a matching main.env
|
|
63
|
+
// key - so it is deliberately not validated against the model.
|
|
64
|
+
function context(seneca: any, model: any, pkg: any, spec: ContextSpec): any {
|
|
65
|
+
if (null == spec || 'string' !== typeof spec.env || '' === spec.env) {
|
|
66
|
+
throw new Error('voxgig-system: context requires a non-empty `env` string')
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
seneca.context.model = model
|
|
70
|
+
seneca.context.pkg = pkg
|
|
71
|
+
seneca.context.env = spec.env
|
|
72
|
+
seneca.context.stage = resolveStage(model, spec)
|
|
73
|
+
seneca.context.srvname = spec.srvname || ALL_SRV
|
|
74
|
+
|
|
75
|
+
return seneca
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
export type {
|
|
80
|
+
ContextSpec,
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export {
|
|
84
|
+
context,
|
|
85
|
+
resolveStage,
|
|
86
|
+
ALL_SRV,
|
|
87
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voxgig/system",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.12.0",
|
|
4
4
|
"main": "dist/system.js",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"types": "dist/system.d.ts",
|
|
@@ -16,12 +16,12 @@
|
|
|
16
16
|
"url": "git://github.com/voxgig/system.git"
|
|
17
17
|
},
|
|
18
18
|
"scripts": {
|
|
19
|
-
"test": "
|
|
20
|
-
"test-some": "
|
|
21
|
-
"test-watch": "
|
|
19
|
+
"test": "node --enable-source-maps --experimental-test-coverage --test-coverage-exclude='dist-test/test/**' --test-coverage-lines=95 --test-coverage-functions=95 --test-coverage-branches=88 --test-reporter=spec --test-reporter-destination=stdout --test-reporter=lcov --test-reporter-destination=coverage.lcov --test \"dist-test/test/**/*.test.js\"",
|
|
20
|
+
"test-some": "node --enable-source-maps --test --test-name-pattern=\"$npm_config_pattern\" \"dist-test/test/**/*.test.js\"",
|
|
21
|
+
"test-watch": "node --enable-source-maps --test --watch \"dist-test/test/**/*.test.js\"",
|
|
22
22
|
"watch": "tsc -w -d",
|
|
23
|
-
"build": "tsc -d",
|
|
24
|
-
"clean": "rm -rf node_modules yarn.lock package-lock.json",
|
|
23
|
+
"build": "tsc -d && tsc -p test",
|
|
24
|
+
"clean": "rm -rf dist dist-test node_modules yarn.lock package-lock.json",
|
|
25
25
|
"reset": "npm run clean && npm i && npm run build && npm test",
|
|
26
26
|
"repo-tag": "REPO_VERSION=`node -e \"console.log(require('./package').version)\"` && echo TAG: v$REPO_VERSION && git commit -a -m v$REPO_VERSION && git push && git tag v$REPO_VERSION && git push --tags;",
|
|
27
27
|
"repo-publish": "npm run clean && npm i && npm run repo-publish-quick",
|
|
@@ -43,12 +43,9 @@
|
|
|
43
43
|
"LICENSE"
|
|
44
44
|
],
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@types/jest": "^30.0.0",
|
|
47
46
|
"@types/node": "^22.20.1",
|
|
48
|
-
"es-jest": "^2.1.0",
|
|
49
|
-
"esbuild": "^0.28.1",
|
|
50
47
|
"gubu": "^9.0.0",
|
|
51
|
-
"
|
|
48
|
+
"seneca": "^4.0.0-rc4",
|
|
52
49
|
"typescript": "^7.0.2"
|
|
53
50
|
},
|
|
54
51
|
"peerDependencies": {
|
package/system.ts
CHANGED
|
@@ -15,6 +15,7 @@ import { MakeSrv } from './srv/make'
|
|
|
15
15
|
|
|
16
16
|
import { addEntity, addSrv, addMsg, addFields, addEnv, resolveModelFiles } from './lib/add'
|
|
17
17
|
import { listTemplates, ejectFragment, ejectCode, diffTemplates } from './lib/template'
|
|
18
|
+
import { context } from './lib/context'
|
|
18
19
|
|
|
19
20
|
|
|
20
21
|
|
|
@@ -236,6 +237,7 @@ const Template = {
|
|
|
236
237
|
export {
|
|
237
238
|
Add,
|
|
238
239
|
Template,
|
|
240
|
+
context,
|
|
239
241
|
gubuify,
|
|
240
242
|
System,
|
|
241
243
|
MakeSrv,
|