@grest-ts/http 0.0.48 → 0.0.50

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 (127) hide show
  1. package/README.md +243 -175
  2. package/dist/src/_dedupCheck.js +1 -1
  3. package/dist/src/client/GGContextKeySynchronizer.d.ts +11 -0
  4. package/dist/src/client/GGContextKeySynchronizer.d.ts.map +1 -0
  5. package/dist/src/client/GGContextKeySynchronizer.js +26 -0
  6. package/dist/src/client/GGContextKeySynchronizer.js.map +1 -0
  7. package/dist/src/index-browser.d.ts +4 -2
  8. package/dist/src/index-browser.d.ts.map +1 -1
  9. package/dist/src/index-browser.js +4 -2
  10. package/dist/src/index-browser.js.map +1 -1
  11. package/dist/src/index-node.d.ts +8 -3
  12. package/dist/src/index-node.d.ts.map +1 -1
  13. package/dist/src/index-node.js +16 -7
  14. package/dist/src/index-node.js.map +1 -1
  15. package/dist/src/rpc/RpcRequest/GGRpcRequestBuilder.d.ts +4 -3
  16. package/dist/src/rpc/RpcRequest/GGRpcRequestBuilder.d.ts.map +1 -1
  17. package/dist/src/rpc/RpcRequest/GGRpcRequestBuilder.js +9 -2
  18. package/dist/src/rpc/RpcRequest/GGRpcRequestBuilder.js.map +1 -1
  19. package/dist/src/rpc/RpcRequest/GGRpcRequestParser.d.ts +3 -3
  20. package/dist/src/rpc/RpcRequest/GGRpcRequestParser.d.ts.map +1 -1
  21. package/dist/src/rpc/RpcRequest/GGRpcRequestParser.js +13 -16
  22. package/dist/src/rpc/RpcRequest/GGRpcRequestParser.js.map +1 -1
  23. package/dist/src/rpc/RpcResponse/GGRpcResponseBuilder.d.ts +1 -1
  24. package/dist/src/rpc/RpcResponse/GGRpcResponseBuilder.d.ts.map +1 -1
  25. package/dist/src/rpc/RpcResponse/GGRpcResponseBuilder.js +3 -3
  26. package/dist/src/rpc/RpcResponse/GGRpcResponseBuilder.js.map +1 -1
  27. package/dist/src/schema/GGCookie.d.ts +50 -0
  28. package/dist/src/schema/GGCookie.d.ts.map +1 -0
  29. package/dist/src/schema/GGCookie.js +130 -0
  30. package/dist/src/schema/GGCookie.js.map +1 -0
  31. package/dist/src/schema/GGHeader.d.ts +23 -0
  32. package/dist/src/schema/GGHeader.d.ts.map +1 -0
  33. package/dist/src/schema/GGHeader.js +41 -0
  34. package/dist/src/schema/GGHeader.js.map +1 -0
  35. package/dist/src/schema/GGHttpPermissionsChecker.d.ts +9 -0
  36. package/dist/src/schema/GGHttpPermissionsChecker.d.ts.map +1 -0
  37. package/dist/src/schema/GGHttpPermissionsChecker.js +29 -0
  38. package/dist/src/schema/GGHttpPermissionsChecker.js.map +1 -0
  39. package/dist/src/schema/GGHttpSchema.d.ts +8 -59
  40. package/dist/src/schema/GGHttpSchema.d.ts.map +1 -1
  41. package/dist/src/schema/GGHttpSchema.js.map +1 -1
  42. package/dist/src/schema/GGWireContextKey.d.ts +30 -0
  43. package/dist/src/schema/GGWireContextKey.d.ts.map +1 -0
  44. package/dist/src/schema/GGWireContextKey.js +36 -0
  45. package/dist/src/schema/GGWireContextKey.js.map +1 -0
  46. package/dist/src/schema/GGWireContextKey.node.d.ts +36 -0
  47. package/dist/src/schema/GGWireContextKey.node.d.ts.map +1 -0
  48. package/dist/src/schema/GGWireContextKey.node.js +83 -0
  49. package/dist/src/schema/GGWireContextKey.node.js.map +1 -0
  50. package/dist/src/schema/httpSchema.d.ts +2 -2
  51. package/dist/src/schema/httpSchema.d.ts.map +1 -1
  52. package/dist/src/schema/httpSchema.js.map +1 -1
  53. package/dist/src/server/GGHttp.d.ts +2 -26
  54. package/dist/src/server/GGHttp.d.ts.map +1 -1
  55. package/dist/src/server/GGHttp.js +0 -15
  56. package/dist/src/server/GGHttp.js.map +1 -1
  57. package/dist/src/server/GGHttpSchema.startServer.d.ts +2 -11
  58. package/dist/src/server/GGHttpSchema.startServer.d.ts.map +1 -1
  59. package/dist/src/server/GGHttpSchema.startServer.js +11 -28
  60. package/dist/src/server/GGHttpSchema.startServer.js.map +1 -1
  61. package/dist/src/server/GGHttpServer.d.ts +16 -14
  62. package/dist/src/server/GGHttpServer.d.ts.map +1 -1
  63. package/dist/src/server/GGHttpServer.js +26 -79
  64. package/dist/src/server/GGHttpServer.js.map +1 -1
  65. package/dist/src/server/applyRequestMiddleware.d.ts +11 -0
  66. package/dist/src/server/applyRequestMiddleware.d.ts.map +1 -0
  67. package/dist/src/server/applyRequestMiddleware.js +38 -0
  68. package/dist/src/server/applyRequestMiddleware.js.map +1 -0
  69. package/dist/src/server/applyResponseMiddleware.d.ts +2 -2
  70. package/dist/src/server/applyResponseMiddleware.d.ts.map +1 -1
  71. package/dist/src/server/applyResponseMiddleware.js +2 -2
  72. package/dist/src/server/applyResponseMiddleware.js.map +1 -1
  73. package/dist/src/server/checkers/checkPermissionsAtStart.d.ts +39 -0
  74. package/dist/src/server/checkers/checkPermissionsAtStart.d.ts.map +1 -0
  75. package/dist/src/server/checkers/checkPermissionsAtStart.js +82 -0
  76. package/dist/src/server/checkers/checkPermissionsAtStart.js.map +1 -0
  77. package/dist/src/server/checkers/checkWireConflicts.d.ts +18 -0
  78. package/dist/src/server/checkers/checkWireConflicts.d.ts.map +1 -0
  79. package/dist/src/server/checkers/checkWireConflicts.js +43 -0
  80. package/dist/src/server/checkers/checkWireConflicts.js.map +1 -0
  81. package/dist/src/server/checkers/checkWiresImplemented.d.ts +11 -0
  82. package/dist/src/server/checkers/checkWiresImplemented.d.ts.map +1 -0
  83. package/dist/src/server/checkers/checkWiresImplemented.js +27 -0
  84. package/dist/src/server/checkers/checkWiresImplemented.js.map +1 -0
  85. package/dist/src/tsconfig.json +2 -1
  86. package/dist/tsconfig.publish.tsbuildinfo +1 -1
  87. package/package.json +14 -11
  88. package/src/_dedupCheck.ts +1 -1
  89. package/src/client/GGContextKeySynchronizer.test.ts +106 -0
  90. package/src/client/GGContextKeySynchronizer.ts +42 -0
  91. package/src/index-browser.ts +4 -2
  92. package/src/index-node.ts +17 -7
  93. package/src/rpc/RpcRequest/GGRpcRequestBuilder.ts +11 -4
  94. package/src/rpc/RpcRequest/GGRpcRequestParser.ts +16 -17
  95. package/src/rpc/RpcResponse/GGRpcResponseBuilder.ts +5 -4
  96. package/src/schema/GGCookie.ts +151 -0
  97. package/src/schema/GGHeader.ts +48 -0
  98. package/src/schema/GGHttpPermissionsChecker.test.ts +125 -0
  99. package/src/schema/GGHttpPermissionsChecker.ts +35 -0
  100. package/src/schema/GGHttpSchema.ts +8 -71
  101. package/src/schema/GGWireContextKey.node.ts +119 -0
  102. package/src/schema/GGWireContextKey.ts +46 -0
  103. package/src/schema/httpSchema.ts +3 -3
  104. package/src/server/GGHttp.ts +3 -34
  105. package/src/server/GGHttpSchema.startServer.ts +13 -38
  106. package/src/server/GGHttpServer.ts +33 -89
  107. package/src/server/applyRequestMiddleware.ts +40 -0
  108. package/src/server/applyResponseMiddleware.ts +5 -5
  109. package/src/server/checkers/checkPermissionsAtStart.ts +112 -0
  110. package/src/server/checkers/checkWireConflicts.ts +65 -0
  111. package/src/server/checkers/checkWiresImplemented.ts +42 -0
  112. package/src/tsconfig.json +2 -1
  113. package/dist/src/schema/cookieMiddleware.d.ts +0 -71
  114. package/dist/src/schema/cookieMiddleware.d.ts.map +0 -1
  115. package/dist/src/schema/cookieMiddleware.js +0 -126
  116. package/dist/src/schema/cookieMiddleware.js.map +0 -1
  117. package/dist/src/schema/headerBinding.d.ts +0 -35
  118. package/dist/src/schema/headerBinding.d.ts.map +0 -1
  119. package/dist/src/schema/headerBinding.js +0 -49
  120. package/dist/src/schema/headerBinding.js.map +0 -1
  121. package/dist/src/server/GG_PERMISSIONS.d.ts +0 -15
  122. package/dist/src/server/GG_PERMISSIONS.d.ts.map +0 -1
  123. package/dist/src/server/GG_PERMISSIONS.js +0 -15
  124. package/dist/src/server/GG_PERMISSIONS.js.map +0 -1
  125. package/src/schema/cookieMiddleware.ts +0 -164
  126. package/src/schema/headerBinding.ts +0 -65
  127. package/src/server/GG_PERMISSIONS.ts +0 -15
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Run at GGHttpServer.start() over the frozen schema graph: the wires a single schema .use()s
3
+ * must not conflict with each other. Two conflicts are caught:
4
+ * - same context-key name → both wires resolve to one storage slot; parse() of one clobbers
5
+ * the value the other read.
6
+ * - same inbound header / cookie → both wires read (and a client writes) the same transport
7
+ * field; one silently overwrites the other in parse()/update().
8
+ * Both are per-schema: the same wire reused across different schemas is fine.
9
+ */
10
+ import type { GGTransportMiddleware } from "@grest-ts/context";
11
+ export declare function checkWireConflicts(httpSchemas: readonly {
12
+ name: string;
13
+ apiMiddlewares: readonly GGTransportMiddleware[];
14
+ }[], webSocketSchemas: readonly {
15
+ name: string;
16
+ middlewares: readonly GGTransportMiddleware[];
17
+ }[]): void;
18
+ //# sourceMappingURL=checkWireConflicts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkWireConflicts.d.ts","sourceRoot":"","sources":["../../../../src/server/checkers/checkWireConflicts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,mBAAmB,CAAA;AAe5D,wBAAgB,kBAAkB,CAC9B,WAAW,EAAE,SAAS;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,SAAS,qBAAqB,EAAE,CAAA;CAAC,EAAE,EACxF,gBAAgB,EAAE,SAAS;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,SAAS,qBAAqB,EAAE,CAAA;CAAC,EAAE,GAC3F,IAAI,CAqCN"}
@@ -0,0 +1,43 @@
1
+ import { GGWireContextKey } from "../../schema/GGWireContextKey.js";
2
+ function transportKeys(mw) {
3
+ return [
4
+ ...Object.keys(mw.headers ?? {}).map(h => `header "${h.toLowerCase()}"`),
5
+ ...Object.keys(mw.cookieParams ?? {}).map(c => `cookie "${c}"`),
6
+ ];
7
+ }
8
+ export function checkWireConflicts(httpSchemas, webSocketSchemas) {
9
+ const schemas = [
10
+ ...httpSchemas.map(s => ({ name: s.name, wires: s.apiMiddlewares })),
11
+ ...webSocketSchemas.map(s => ({ name: s.name, wires: s.middlewares })),
12
+ ];
13
+ const conflicts = [];
14
+ for (const schema of schemas) {
15
+ const names = new Map();
16
+ const fields = new Map();
17
+ for (const mw of schema.wires) {
18
+ if (mw instanceof GGWireContextKey) {
19
+ if (names.has(mw.name)) {
20
+ conflicts.push(` ${schema.name}: two wires share context-key name "${mw.name}"`);
21
+ }
22
+ else {
23
+ names.set(mw.name, mw);
24
+ }
25
+ }
26
+ for (const field of transportKeys(mw)) {
27
+ if (fields.has(field)) {
28
+ conflicts.push(` ${schema.name}: two wires bind the same ${field}`);
29
+ }
30
+ else {
31
+ fields.set(field, mw);
32
+ }
33
+ }
34
+ }
35
+ }
36
+ if (conflicts.length > 0) {
37
+ throw new Error(`GGHttpServer: conflicting wires .use()d on one schema:\n\n` +
38
+ conflicts.join("\n") +
39
+ `\n\nFix: a schema must not .use() two wires that share a context-key name or read the ` +
40
+ `same header/cookie — one silently clobbers the other.`);
41
+ }
42
+ }
43
+ //# sourceMappingURL=checkWireConflicts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkWireConflicts.js","sourceRoot":"","sources":["../../../../src/server/checkers/checkWireConflicts.ts"],"names":[],"mappings":"AAUA,OAAO,EAAC,gBAAgB,EAAC,MAAM,+BAA+B,CAAA;AAO9D,SAAS,aAAa,CAAC,EAAyB;IAC5C,OAAO;QACH,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC;QACxE,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC;KAClE,CAAA;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAC9B,WAAwF,EACxF,gBAA0F;IAE1F,MAAM,OAAO,GAAiB;QAC1B,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,cAAc,EAAC,CAAC,CAAC;QAClE,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAC,CAAC,CAAC;KACvE,CAAA;IAED,MAAM,SAAS,GAAa,EAAE,CAAA;IAC9B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAA;QACjD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAiC,CAAA;QAEvD,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAC5B,IAAI,EAAE,YAAY,gBAAgB,EAAE,CAAC;gBACjC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrB,SAAS,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,uCAAuC,EAAE,CAAC,IAAI,GAAG,CAAC,CAAA;gBACrF,CAAC;qBAAM,CAAC;oBACJ,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;gBAC1B,CAAC;YACL,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC;gBACpC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBACpB,SAAS,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,6BAA6B,KAAK,EAAE,CAAC,CAAA;gBACxE,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;gBACzB,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACX,4DAA4D;YAC5D,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YACpB,wFAAwF;YACxF,uDAAuD,CAC1D,CAAA;IACL,CAAC;AACL,CAAC"}
@@ -0,0 +1,11 @@
1
+ interface HttpSchemaLike {
2
+ name: string;
3
+ apiMiddlewares: readonly unknown[];
4
+ }
5
+ interface WebSocketSchemaLike {
6
+ name: string;
7
+ middlewares: readonly unknown[];
8
+ }
9
+ export declare function checkWiresImplemented(httpSchemas: readonly HttpSchemaLike[], webSocketSchemas: readonly WebSocketSchemaLike[]): void;
10
+ export {};
11
+ //# sourceMappingURL=checkWiresImplemented.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkWiresImplemented.d.ts","sourceRoot":"","sources":["../../../../src/server/checkers/checkWiresImplemented.ts"],"names":[],"mappings":"AAOA,UAAU,cAAc;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,SAAS,OAAO,EAAE,CAAA;CACrC;AAED,UAAU,mBAAmB;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,SAAS,OAAO,EAAE,CAAA;CAClC;AAED,wBAAgB,qBAAqB,CACjC,WAAW,EAAE,SAAS,cAAc,EAAE,EACtC,gBAAgB,EAAE,SAAS,mBAAmB,EAAE,GACjD,IAAI,CAqBN"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Run at GGHttpServer.start() over the frozen schema graph: every wire a schema
3
+ * .use()s and that is .define()d must have a .create()d handler on this runtime.
4
+ */
5
+ import { GGWireContextKey } from "../../schema/GGWireContextKey.js";
6
+ import { wireIsDefined } from "../../schema/GGWireContextKey.node.js";
7
+ export function checkWiresImplemented(httpSchemas, webSocketSchemas) {
8
+ const surfaces = [
9
+ ...httpSchemas.map(s => ({ name: s.name, wires: s.apiMiddlewares })),
10
+ ...webSocketSchemas.map(s => ({ name: s.name, wires: s.middlewares })),
11
+ ];
12
+ const missing = [];
13
+ for (const surface of surfaces) {
14
+ for (const mw of surface.wires) {
15
+ if (mw instanceof GGWireContextKey && wireIsDefined(mw) && !mw.hasHandler()) {
16
+ missing.push(` ${surface.name} uses wire "${mw.name}"`);
17
+ }
18
+ }
19
+ }
20
+ if (missing.length > 0) {
21
+ throw new Error(`GGHttpServer: these schemas .use() a smart wire that was never implemented on this ` +
22
+ `runtime:\n\n` +
23
+ missing.join("\n") +
24
+ `\n\nFix: call \`${"<WIRE>"}.define(...).create(deps)\` in compose() before the server starts.`);
25
+ }
26
+ }
27
+ //# sourceMappingURL=checkWiresImplemented.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkWiresImplemented.js","sourceRoot":"","sources":["../../../../src/server/checkers/checkWiresImplemented.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAC,gBAAgB,EAAC,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAC,aAAa,EAAC,MAAM,oCAAoC,CAAA;AAYhE,MAAM,UAAU,qBAAqB,CACjC,WAAsC,EACtC,gBAAgD;IAEhD,MAAM,QAAQ,GAAgD;QAC1D,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,cAAc,EAAC,CAAC,CAAC;QAClE,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAC,CAAC,CAAC;KACvE,CAAA;IACD,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC7B,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,EAAE,YAAY,gBAAgB,IAAI,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC;gBAC1E,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,gBAAgB,EAAE,CAAC,IAAI,GAAG,CAAC,CAAA;YAC7D,CAAC;QACL,CAAC;IACL,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACX,qFAAqF;YACrF,cAAc;YACd,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAClB,mBAAmB,QAAQ,oEAAoE,CAClG,CAAA;IACL,CAAC;AACL,CAAC"}
@@ -8,7 +8,8 @@
8
8
  "DOM"
9
9
  ],
10
10
  "types": [
11
- "node"
11
+ "node",
12
+ "vitest/globals"
12
13
  ]
13
14
  },
14
15
  "include": [