@atxp/server 0.2.5

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 (107) hide show
  1. package/README.md +148 -0
  2. package/dist/atxpContext.d.ts +6 -0
  3. package/dist/atxpContext.d.ts.map +1 -0
  4. package/dist/atxpContext.js +41 -0
  5. package/dist/atxpContext.js.map +1 -0
  6. package/dist/atxpServer.d.ts +12 -0
  7. package/dist/atxpServer.d.ts.map +1 -0
  8. package/dist/atxpServer.js +101 -0
  9. package/dist/atxpServer.js.map +1 -0
  10. package/dist/getResource.d.ts +4 -0
  11. package/dist/getResource.d.ts.map +1 -0
  12. package/dist/getResource.js +17 -0
  13. package/dist/getResource.js.map +1 -0
  14. package/dist/http.d.ts +7 -0
  15. package/dist/http.d.ts.map +1 -0
  16. package/dist/http.js +51 -0
  17. package/dist/http.js.map +1 -0
  18. package/dist/index.d.ts +5 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +5 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/oAuthChallenge.d.ts +4 -0
  23. package/dist/oAuthChallenge.d.ts.map +1 -0
  24. package/dist/oAuthChallenge.js +39 -0
  25. package/dist/oAuthChallenge.js.map +1 -0
  26. package/dist/oAuthMetadata.d.ts +6 -0
  27. package/dist/oAuthMetadata.d.ts.map +1 -0
  28. package/dist/oAuthMetadata.js +41 -0
  29. package/dist/oAuthMetadata.js.map +1 -0
  30. package/dist/paymentServer.d.ts +68 -0
  31. package/dist/paymentServer.d.ts.map +1 -0
  32. package/dist/paymentServer.js +97 -0
  33. package/dist/paymentServer.js.map +1 -0
  34. package/dist/protectedResourceMetadata.d.ts +5 -0
  35. package/dist/protectedResourceMetadata.d.ts.map +1 -0
  36. package/dist/protectedResourceMetadata.js +40 -0
  37. package/dist/protectedResourceMetadata.js.map +1 -0
  38. package/dist/requirePayment.d.ts +3 -0
  39. package/dist/requirePayment.d.ts.map +1 -0
  40. package/dist/requirePayment.js +35 -0
  41. package/dist/requirePayment.js.map +1 -0
  42. package/dist/serverTestHelpers.d.ts +55 -0
  43. package/dist/serverTestHelpers.d.ts.map +1 -0
  44. package/dist/serverTestHelpers.js +88 -0
  45. package/dist/serverTestHelpers.js.map +1 -0
  46. package/dist/src/atxpContext.d.ts +6 -0
  47. package/dist/src/atxpContext.d.ts.map +1 -0
  48. package/dist/src/atxpContext.js +41 -0
  49. package/dist/src/atxpContext.js.map +1 -0
  50. package/dist/src/atxpServer.d.ts +12 -0
  51. package/dist/src/atxpServer.d.ts.map +1 -0
  52. package/dist/src/atxpServer.js +95 -0
  53. package/dist/src/atxpServer.js.map +1 -0
  54. package/dist/src/getResource.d.ts +4 -0
  55. package/dist/src/getResource.d.ts.map +1 -0
  56. package/dist/src/getResource.js +17 -0
  57. package/dist/src/getResource.js.map +1 -0
  58. package/dist/src/http.d.ts +7 -0
  59. package/dist/src/http.d.ts.map +1 -0
  60. package/dist/src/http.js +51 -0
  61. package/dist/src/http.js.map +1 -0
  62. package/dist/src/index.d.ts +5 -0
  63. package/dist/src/index.d.ts.map +1 -0
  64. package/dist/src/index.js +5 -0
  65. package/dist/src/index.js.map +1 -0
  66. package/dist/src/oAuthChallenge.d.ts +4 -0
  67. package/dist/src/oAuthChallenge.d.ts.map +1 -0
  68. package/dist/src/oAuthChallenge.js +39 -0
  69. package/dist/src/oAuthChallenge.js.map +1 -0
  70. package/dist/src/oAuthMetadata.d.ts +6 -0
  71. package/dist/src/oAuthMetadata.d.ts.map +1 -0
  72. package/dist/src/oAuthMetadata.js +41 -0
  73. package/dist/src/oAuthMetadata.js.map +1 -0
  74. package/dist/src/paymentServer.d.ts +68 -0
  75. package/dist/src/paymentServer.d.ts.map +1 -0
  76. package/dist/src/paymentServer.js +97 -0
  77. package/dist/src/paymentServer.js.map +1 -0
  78. package/dist/src/protectedResourceMetadata.d.ts +5 -0
  79. package/dist/src/protectedResourceMetadata.d.ts.map +1 -0
  80. package/dist/src/protectedResourceMetadata.js +40 -0
  81. package/dist/src/protectedResourceMetadata.js.map +1 -0
  82. package/dist/src/requirePayment.d.ts +3 -0
  83. package/dist/src/requirePayment.d.ts.map +1 -0
  84. package/dist/src/requirePayment.js +35 -0
  85. package/dist/src/requirePayment.js.map +1 -0
  86. package/dist/src/serverTestHelpers.d.ts +55 -0
  87. package/dist/src/serverTestHelpers.d.ts.map +1 -0
  88. package/dist/src/serverTestHelpers.js +88 -0
  89. package/dist/src/serverTestHelpers.js.map +1 -0
  90. package/dist/src/token.d.ts +4 -0
  91. package/dist/src/token.d.ts.map +1 -0
  92. package/dist/src/token.js +36 -0
  93. package/dist/src/token.js.map +1 -0
  94. package/dist/src/types.d.ts +60 -0
  95. package/dist/src/types.d.ts.map +1 -0
  96. package/dist/src/types.js +10 -0
  97. package/dist/src/types.js.map +1 -0
  98. package/dist/token.d.ts +4 -0
  99. package/dist/token.d.ts.map +1 -0
  100. package/dist/token.js +36 -0
  101. package/dist/token.js.map +1 -0
  102. package/dist/tsconfig.tsbuildinfo +1 -0
  103. package/dist/types.d.ts +60 -0
  104. package/dist/types.d.ts.map +1 -0
  105. package/dist/types.js +10 -0
  106. package/dist/types.js.map +1 -0
  107. package/package.json +44 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serverTestHelpers.js","sourceRoot":"","sources":["../../src/serverTestHelpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { IncomingMessage } from "http";
2
+ import { ATXPConfig, TokenCheck } from "./types.js";
3
+ export declare function checkToken(config: ATXPConfig, resourceURL: URL, req: IncomingMessage): Promise<TokenCheck>;
4
+ //# sourceMappingURL=token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAgB,MAAM,YAAY,CAAC;AAElE,wBAAsB,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAsChH"}
@@ -0,0 +1,36 @@
1
+ import { TokenProblem } from "./types.js";
2
+ export async function checkToken(config, resourceURL, req) {
3
+ const protocol = resourceURL.protocol;
4
+ const host = resourceURL.host;
5
+ const pathname = resourceURL.pathname;
6
+ const protectedResourceMetadataUrl = `${protocol}//${host}/.well-known/oauth-protected-resource${pathname}`;
7
+ const failure = {
8
+ passes: false,
9
+ resourceMetadataUrl: protectedResourceMetadataUrl,
10
+ };
11
+ // Extract the Bearer token from the Authorization header
12
+ const authHeader = req.headers.authorization;
13
+ if (!authHeader) {
14
+ return { ...failure, problem: TokenProblem.NO_TOKEN, data: null, token: null };
15
+ }
16
+ if (!authHeader.startsWith('Bearer ')) {
17
+ return { ...failure, problem: TokenProblem.NON_BEARER_AUTH_HEADER, data: null, token: null };
18
+ }
19
+ const token = authHeader.substring(7);
20
+ try {
21
+ const introspectionResult = await config.oAuthClient.introspectToken(config.server, token);
22
+ if (!introspectionResult.active) {
23
+ return { ...failure, problem: TokenProblem.INVALID_TOKEN, data: null, token };
24
+ }
25
+ return {
26
+ passes: true,
27
+ data: introspectionResult,
28
+ token,
29
+ };
30
+ }
31
+ catch (error) {
32
+ config.logger.error(`Error during token introspection: ${error}`);
33
+ return { ...failure, problem: TokenProblem.INTROSPECT_ERROR, data: null, token };
34
+ }
35
+ }
36
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/token.ts"],"names":[],"mappings":"AACA,OAAO,EAA0B,YAAY,EAAE,MAAM,YAAY,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAkB,EAAE,WAAgB,EAAE,GAAoB;IACzF,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;IACtC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;IAC9B,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;IACtC,MAAM,4BAA4B,GAAG,GAAG,QAAQ,KAAK,IAAI,wCAAwC,QAAQ,EAAE,CAAC;IAE5G,MAAM,OAAO,GAAG;QACd,MAAM,EAAE,KAAc;QACtB,mBAAmB,EAAE,4BAA4B;KAClD,CAAC;IAEF,yDAAyD;IACzD,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;IAC7C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAC,GAAG,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,CAAA;IAC9E,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACtC,OAAO,EAAC,GAAG,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,sBAAsB,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,CAAA;IAC5F,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,mBAAmB,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAE3F,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC;YAChC,OAAO,EAAC,GAAG,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAC,CAAA;QAC7E,CAAC;QAED,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,mBAAmB;YACzB,KAAK;SACN,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,KAAK,EAAE,CAAC,CAAC;QAClE,OAAO,EAAC,GAAG,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAC,CAAC;IACjF,CAAC;AACH,CAAC"}
@@ -0,0 +1,60 @@
1
+ import { AuthorizationServerUrl, Currency, Logger, PaymentRequestData, Network, UrlString, OAuthDb, TokenData, OAuthResourceClient } from "@longrun/atxp-common";
2
+ export type McpMethod = 'notifications/cancelled' | 'initialize' | 'ping' | 'notifications/progress' | 'resources/list' | 'resources/templates/list' | 'resources/read' | 'notifications/resources/list_changed' | 'resources/subscribe' | 'resources/unsubscribe' | 'notifications/resources/updated' | 'prompts/list' | 'prompts/get' | 'notifications/prompts/list_changed' | 'tools/list' | 'tools/call' | 'notifications/tools/list_changed' | 'logging/setLevel' | 'notifications/message' | 'sampling/createMessage' | 'elicitation/create' | 'completion/complete' | 'roots/list' | 'notifications/roots/list_changed';
3
+ export type McpName = string;
4
+ export type McpNamePattern = McpName | '*';
5
+ export type McpOperation = `${McpMethod}` | `${McpMethod}:${McpName}`;
6
+ export type McpOperationPattern = McpOperation | '*' | `${McpMethod}:*`;
7
+ export type RefundErrors = boolean | 'nonMcpOnly';
8
+ export type Charge = Omit<PaymentRequestData, 'resource' | 'resourceName' | 'iss'>;
9
+ export type ChargeResponse = {
10
+ success: boolean;
11
+ requiredPayment: PaymentRequestData | null;
12
+ };
13
+ export type PaymentServer = {
14
+ charge: (args: Charge) => Promise<ChargeResponse>;
15
+ createPaymentRequest: (args: Charge) => Promise<string>;
16
+ };
17
+ export type ATXPConfig = {
18
+ destination: string;
19
+ mountPath: string;
20
+ currency: Currency;
21
+ network: Network;
22
+ server: AuthorizationServerUrl;
23
+ payeeName: string;
24
+ resource: UrlString | null;
25
+ allowHttp: boolean;
26
+ logger: Logger;
27
+ oAuthDb: OAuthDb;
28
+ oAuthClient: OAuthResourceClient;
29
+ paymentServer: PaymentServer;
30
+ atxpAuthClientToken: string | undefined;
31
+ };
32
+ export declare enum TokenProblem {
33
+ NO_TOKEN = "NO-TOKEN",
34
+ NON_BEARER_AUTH_HEADER = "NON-BEARER-AUTH-HEADER",
35
+ INVALID_TOKEN = "INVALID-TOKEN",
36
+ INVALID_AUDIENCE = "INVALID-AUDIENCE",
37
+ NON_SUFFICIENT_FUNDS = "NON-SUFFICIENT-FUNDS",
38
+ INTROSPECT_ERROR = "INTROSPECT-ERROR"
39
+ }
40
+ export type TokenCheckPass = {
41
+ passes: true;
42
+ token: string;
43
+ data: TokenData;
44
+ };
45
+ export type TokenCheckFail = {
46
+ passes: false;
47
+ problem: TokenProblem;
48
+ token: string | null;
49
+ data: TokenData | null;
50
+ resourceMetadataUrl: string | null;
51
+ };
52
+ export type TokenCheck = TokenCheckPass | TokenCheckFail;
53
+ export type ProtectedResourceMetadata = {
54
+ resource: URL;
55
+ resource_name: string;
56
+ authorization_servers: string[];
57
+ bearer_methods_supported: string[];
58
+ scopes_supported: string[];
59
+ };
60
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export var TokenProblem;
2
+ (function (TokenProblem) {
3
+ TokenProblem["NO_TOKEN"] = "NO-TOKEN";
4
+ TokenProblem["NON_BEARER_AUTH_HEADER"] = "NON-BEARER-AUTH-HEADER";
5
+ TokenProblem["INVALID_TOKEN"] = "INVALID-TOKEN";
6
+ TokenProblem["INVALID_AUDIENCE"] = "INVALID-AUDIENCE";
7
+ TokenProblem["NON_SUFFICIENT_FUNDS"] = "NON-SUFFICIENT-FUNDS";
8
+ TokenProblem["INTROSPECT_ERROR"] = "INTROSPECT-ERROR";
9
+ })(TokenProblem || (TokenProblem = {}));
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAoDA,MAAM,CAAN,IAAY,YAOX;AAPD,WAAY,YAAY;IACtB,qCAAqB,CAAA;IACrB,iEAAiD,CAAA;IACjD,+CAA+B,CAAA;IAC/B,qDAAqC,CAAA;IACrC,6DAA6C,CAAA;IAC7C,qDAAqC,CAAA;AACvC,CAAC,EAPW,YAAY,KAAZ,YAAY,QAOvB"}
@@ -0,0 +1,4 @@
1
+ import { IncomingMessage } from "http";
2
+ import { ATXPConfig, TokenCheck } from "./types.js";
3
+ export declare function checkToken(config: ATXPConfig, resourceURL: URL, req: IncomingMessage): Promise<TokenCheck>;
4
+ //# sourceMappingURL=token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../src/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAgB,MAAM,YAAY,CAAC;AAElE,wBAAsB,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAsChH"}
package/dist/token.js ADDED
@@ -0,0 +1,36 @@
1
+ import { TokenProblem } from "./types.js";
2
+ export async function checkToken(config, resourceURL, req) {
3
+ const protocol = resourceURL.protocol;
4
+ const host = resourceURL.host;
5
+ const pathname = resourceURL.pathname;
6
+ const protectedResourceMetadataUrl = `${protocol}//${host}/.well-known/oauth-protected-resource${pathname}`;
7
+ const failure = {
8
+ passes: false,
9
+ resourceMetadataUrl: protectedResourceMetadataUrl,
10
+ };
11
+ // Extract the Bearer token from the Authorization header
12
+ const authHeader = req.headers.authorization;
13
+ if (!authHeader) {
14
+ return { ...failure, problem: TokenProblem.NO_TOKEN, data: null, token: null };
15
+ }
16
+ if (!authHeader.startsWith('Bearer ')) {
17
+ return { ...failure, problem: TokenProblem.NON_BEARER_AUTH_HEADER, data: null, token: null };
18
+ }
19
+ const token = authHeader.substring(7);
20
+ try {
21
+ const introspectionResult = await config.oAuthClient.introspectToken(config.server, token);
22
+ if (!introspectionResult.active) {
23
+ return { ...failure, problem: TokenProblem.INVALID_TOKEN, data: null, token };
24
+ }
25
+ return {
26
+ passes: true,
27
+ data: introspectionResult,
28
+ token,
29
+ };
30
+ }
31
+ catch (error) {
32
+ config.logger.error(`Error during token introspection: ${error}`);
33
+ return { ...failure, problem: TokenProblem.INTROSPECT_ERROR, data: null, token };
34
+ }
35
+ }
36
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../src/token.ts"],"names":[],"mappings":"AACA,OAAO,EAA0B,YAAY,EAAE,MAAM,YAAY,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAkB,EAAE,WAAgB,EAAE,GAAoB;IACzF,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;IACtC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;IAC9B,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;IACtC,MAAM,4BAA4B,GAAG,GAAG,QAAQ,KAAK,IAAI,wCAAwC,QAAQ,EAAE,CAAC;IAE5G,MAAM,OAAO,GAAG;QACd,MAAM,EAAE,KAAc;QACtB,mBAAmB,EAAE,4BAA4B;KAClD,CAAC;IAEF,yDAAyD;IACzD,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;IAC7C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAC,GAAG,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,CAAA;IAC9E,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACtC,OAAO,EAAC,GAAG,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,sBAAsB,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,CAAA;IAC5F,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,mBAAmB,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAE3F,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC;YAChC,OAAO,EAAC,GAAG,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAC,CAAA;QAC7E,CAAC;QAED,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,mBAAmB;YACzB,KAAK;SACN,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,KAAK,EAAE,CAAC,CAAC;QAClE,OAAO,EAAC,GAAG,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAC,CAAC;IACjF,CAAC;AACH,CAAC"}