@thirdweb-dev/service-utils 0.5.0-nightly-f5aed34d-20230829001006 → 0.5.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 (137) hide show
  1. package/dist/cjs/cf-worker/index.js +164 -0
  2. package/dist/cjs/cf-worker/index.js.map +1 -0
  3. package/dist/cjs/cf-worker/usage.js +55 -0
  4. package/dist/cjs/cf-worker/usage.js.map +1 -0
  5. package/dist/cjs/core/api.js +42 -0
  6. package/dist/cjs/core/api.js.map +1 -0
  7. package/dist/cjs/core/authorize/client.js +98 -0
  8. package/dist/cjs/core/authorize/client.js.map +1 -0
  9. package/dist/cjs/core/authorize/index.js +109 -0
  10. package/dist/cjs/core/authorize/index.js.map +1 -0
  11. package/dist/cjs/core/authorize/service.js +50 -0
  12. package/dist/cjs/core/authorize/service.js.map +1 -0
  13. package/dist/cjs/core/authorize/types.js +3 -0
  14. package/dist/cjs/core/authorize/types.js.map +1 -0
  15. package/dist/cjs/core/rateLimit/index.js +60 -0
  16. package/dist/cjs/core/rateLimit/index.js.map +1 -0
  17. package/dist/cjs/core/rateLimit/types.js +3 -0
  18. package/dist/cjs/core/rateLimit/types.js.map +1 -0
  19. package/dist/cjs/core/services.js +85 -0
  20. package/dist/cjs/core/services.js.map +1 -0
  21. package/dist/cjs/core/types.js +3 -0
  22. package/dist/cjs/core/types.js.map +1 -0
  23. package/dist/cjs/core/usage.js +85 -0
  24. package/dist/cjs/core/usage.js.map +1 -0
  25. package/dist/cjs/index.js +13 -0
  26. package/dist/cjs/index.js.map +1 -0
  27. package/dist/cjs/mocks.js +60 -0
  28. package/dist/cjs/mocks.js.map +1 -0
  29. package/dist/cjs/node/index.js +182 -0
  30. package/dist/cjs/node/index.js.map +1 -0
  31. package/dist/cjs/package.json +1 -0
  32. package/dist/esm/cf-worker/index.js +156 -0
  33. package/dist/esm/cf-worker/index.js.map +1 -0
  34. package/dist/esm/cf-worker/usage.js +53 -0
  35. package/dist/esm/cf-worker/usage.js.map +1 -0
  36. package/dist/esm/core/api.js +38 -0
  37. package/dist/esm/core/api.js.map +1 -0
  38. package/dist/esm/core/authorize/client.js +93 -0
  39. package/dist/esm/core/authorize/client.js.map +1 -0
  40. package/dist/esm/core/authorize/index.js +106 -0
  41. package/dist/esm/core/authorize/index.js.map +1 -0
  42. package/dist/esm/core/authorize/service.js +47 -0
  43. package/dist/esm/core/authorize/service.js.map +1 -0
  44. package/dist/esm/core/authorize/types.js +2 -0
  45. package/dist/esm/core/authorize/types.js.map +1 -0
  46. package/dist/esm/core/rateLimit/index.js +57 -0
  47. package/dist/esm/core/rateLimit/index.js.map +1 -0
  48. package/dist/esm/core/rateLimit/types.js +2 -0
  49. package/dist/esm/core/rateLimit/types.js.map +1 -0
  50. package/dist/esm/core/services.js +81 -0
  51. package/dist/esm/core/services.js.map +1 -0
  52. package/dist/esm/core/types.js +2 -0
  53. package/dist/esm/core/types.js.map +1 -0
  54. package/dist/esm/core/usage.js +82 -0
  55. package/dist/esm/core/usage.js.map +1 -0
  56. package/dist/esm/index.js +5 -0
  57. package/dist/esm/index.js.map +1 -0
  58. package/dist/esm/mocks.js +57 -0
  59. package/dist/esm/mocks.js.map +1 -0
  60. package/dist/esm/node/index.js +174 -0
  61. package/dist/esm/node/index.js.map +1 -0
  62. package/dist/esm/package.json +1 -0
  63. package/dist/{declarations/src → types}/cf-worker/index.d.ts +10 -8
  64. package/dist/types/cf-worker/index.d.ts.map +1 -0
  65. package/dist/types/cf-worker/usage.d.ts +24 -0
  66. package/dist/types/cf-worker/usage.d.ts.map +1 -0
  67. package/dist/types/core/api.d.ts +121 -0
  68. package/dist/types/core/api.d.ts.map +1 -0
  69. package/dist/types/core/authorize/client.d.ts +17 -0
  70. package/dist/types/core/authorize/client.d.ts.map +1 -0
  71. package/dist/{declarations/src → types}/core/authorize/index.d.ts +6 -5
  72. package/dist/types/core/authorize/index.d.ts.map +1 -0
  73. package/dist/types/core/authorize/service.d.ts +4 -0
  74. package/dist/types/core/authorize/service.d.ts.map +1 -0
  75. package/dist/types/core/authorize/types.d.ts +10 -0
  76. package/dist/types/core/authorize/types.d.ts.map +1 -0
  77. package/dist/types/core/rateLimit/index.d.ts +20 -0
  78. package/dist/types/core/rateLimit/index.d.ts.map +1 -0
  79. package/dist/types/core/rateLimit/types.d.ts +13 -0
  80. package/dist/types/core/rateLimit/types.d.ts.map +1 -0
  81. package/dist/{declarations/src → types}/core/services.d.ts +84 -4
  82. package/dist/types/core/services.d.ts.map +1 -0
  83. package/dist/types/core/types.d.ts.map +1 -0
  84. package/dist/types/core/usage.d.ts +196 -0
  85. package/dist/types/core/usage.d.ts.map +1 -0
  86. package/dist/types/index.d.ts +5 -0
  87. package/dist/types/index.d.ts.map +1 -0
  88. package/dist/types/mocks.d.ts +7 -0
  89. package/dist/types/mocks.d.ts.map +1 -0
  90. package/dist/types/node/index.d.ts +41 -0
  91. package/dist/types/node/index.d.ts.map +1 -0
  92. package/package.json +42 -44
  93. package/cf-worker/dist/thirdweb-dev-service-utils-cf-worker.cjs.d.ts +0 -2
  94. package/cf-worker/dist/thirdweb-dev-service-utils-cf-worker.cjs.d.ts.map +0 -1
  95. package/cf-worker/dist/thirdweb-dev-service-utils-cf-worker.cjs.dev.js +0 -240
  96. package/cf-worker/dist/thirdweb-dev-service-utils-cf-worker.cjs.js +0 -7
  97. package/cf-worker/dist/thirdweb-dev-service-utils-cf-worker.cjs.prod.js +0 -240
  98. package/cf-worker/dist/thirdweb-dev-service-utils-cf-worker.esm.js +0 -227
  99. package/cf-worker/package.json +0 -4
  100. package/dist/declarations/src/cf-worker/index.d.ts.map +0 -1
  101. package/dist/declarations/src/cf-worker/usage.d.ts +0 -79
  102. package/dist/declarations/src/cf-worker/usage.d.ts.map +0 -1
  103. package/dist/declarations/src/core/api.d.ts +0 -48
  104. package/dist/declarations/src/core/api.d.ts.map +0 -1
  105. package/dist/declarations/src/core/authorize/client.d.ts +0 -9
  106. package/dist/declarations/src/core/authorize/client.d.ts.map +0 -1
  107. package/dist/declarations/src/core/authorize/index.d.ts.map +0 -1
  108. package/dist/declarations/src/core/authorize/service.d.ts +0 -7
  109. package/dist/declarations/src/core/authorize/service.d.ts.map +0 -1
  110. package/dist/declarations/src/core/authorize/types.d.ts +0 -12
  111. package/dist/declarations/src/core/authorize/types.d.ts.map +0 -1
  112. package/dist/declarations/src/core/services.d.ts.map +0 -1
  113. package/dist/declarations/src/core/types.d.ts.map +0 -1
  114. package/dist/declarations/src/index.d.ts +0 -2
  115. package/dist/declarations/src/index.d.ts.map +0 -1
  116. package/dist/declarations/src/node/index.d.ts +0 -23
  117. package/dist/declarations/src/node/index.d.ts.map +0 -1
  118. package/dist/index-6e0ecc5f.cjs.prod.js +0 -424
  119. package/dist/index-cd4f96ef.cjs.dev.js +0 -424
  120. package/dist/index-ffddf746.esm.js +0 -422
  121. package/dist/services-86283509.esm.js +0 -44
  122. package/dist/services-9e185105.cjs.prod.js +0 -49
  123. package/dist/services-a3f36057.cjs.dev.js +0 -49
  124. package/dist/thirdweb-dev-service-utils.cjs.d.ts +0 -2
  125. package/dist/thirdweb-dev-service-utils.cjs.d.ts.map +0 -1
  126. package/dist/thirdweb-dev-service-utils.cjs.dev.js +0 -12
  127. package/dist/thirdweb-dev-service-utils.cjs.js +0 -7
  128. package/dist/thirdweb-dev-service-utils.cjs.prod.js +0 -12
  129. package/dist/thirdweb-dev-service-utils.esm.js +0 -1
  130. package/node/dist/thirdweb-dev-service-utils-node.cjs.d.ts +0 -2
  131. package/node/dist/thirdweb-dev-service-utils-node.cjs.d.ts.map +0 -1
  132. package/node/dist/thirdweb-dev-service-utils-node.cjs.dev.js +0 -167
  133. package/node/dist/thirdweb-dev-service-utils-node.cjs.js +0 -7
  134. package/node/dist/thirdweb-dev-service-utils-node.cjs.prod.js +0 -167
  135. package/node/dist/thirdweb-dev-service-utils-node.esm.js +0 -155
  136. package/node/package.json +0 -4
  137. /package/dist/{declarations/src → types}/core/types.d.ts +0 -0
@@ -0,0 +1,57 @@
1
+ export const validProjectResponse = {
2
+ id: "1",
3
+ publishableKey: "your-api-key",
4
+ walletAddresses: ["creator-address"],
5
+ domains: ["example.com", "*.example.com"],
6
+ bundleIds: [],
7
+ services: [
8
+ {
9
+ name: "storage",
10
+ actions: ["read", "write"],
11
+ },
12
+ {
13
+ name: "rpc",
14
+ actions: [],
15
+ },
16
+ {
17
+ name: "bundler",
18
+ actions: [],
19
+ allowedChainIds: [1, 2, 3],
20
+ },
21
+ ],
22
+ teamId: "1",
23
+ createdAt: new Date("2024-06-01"),
24
+ updatedAt: new Date("2024-06-01"),
25
+ name: "test-project",
26
+ slug: "test-project",
27
+ image: "https://example.com/image.png",
28
+ };
29
+ export const validTeamResponse = {
30
+ id: "1",
31
+ name: "test-team",
32
+ slug: "test-team",
33
+ image: "https://example.com/image.png",
34
+ createdAt: new Date("2024-06-01"),
35
+ updatedAt: new Date("2024-06-01"),
36
+ billingPlan: "free",
37
+ billingEmail: "test@example.com",
38
+ billingStatus: "noCustomer",
39
+ growthTrialEligible: false,
40
+ enabledScopes: ["storage", "rpc", "bundler"],
41
+ };
42
+ export const validTeamAndProjectResponse = {
43
+ team: validTeamResponse,
44
+ project: validProjectResponse,
45
+ };
46
+ export const validServiceConfig = {
47
+ apiUrl: "https://api.example.com",
48
+ serviceScope: "storage",
49
+ serviceApiKey: "service-api-key",
50
+ serviceAction: "read",
51
+ };
52
+ export const validBundlerServiceConfig = {
53
+ apiUrl: "https://api.example.com",
54
+ serviceScope: "bundler",
55
+ serviceApiKey: "service-api-key",
56
+ };
57
+ //# sourceMappingURL=mocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mocks.js","sourceRoot":"","sources":["../../src/mocks.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,oBAAoB,GAAoB;IACnD,EAAE,EAAE,GAAG;IACP,cAAc,EAAE,cAAc;IAC9B,eAAe,EAAE,CAAC,iBAAiB,CAAC;IACpC,OAAO,EAAE,CAAC,aAAa,EAAE,eAAe,CAAC;IACzC,SAAS,EAAE,EAAE;IACb,QAAQ,EAAE;QACR;YACE,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;SAC3B;QACD;YACE,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,EAAE;SACZ;QACD;YACE,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,EAAE;YACX,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SAC3B;KACF;IACD,MAAM,EAAE,GAAG;IACX,SAAS,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;IACjC,SAAS,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;IACjC,IAAI,EAAE,cAAc;IACpB,IAAI,EAAE,cAAc;IACpB,KAAK,EAAE,+BAA+B;CACvC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAiB;IAC7C,EAAE,EAAE,GAAG;IACP,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,+BAA+B;IACtC,SAAS,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;IACjC,SAAS,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;IACjC,WAAW,EAAE,MAAM;IACnB,YAAY,EAAE,kBAAkB;IAChC,aAAa,EAAE,YAAY;IAC3B,mBAAmB,EAAE,KAAK;IAC1B,aAAa,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC;CAC7C,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAA2B;IACjE,IAAI,EAAE,iBAAiB;IACvB,OAAO,EAAE,oBAAoB;CAC9B,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAsB;IACnD,MAAM,EAAE,yBAAyB;IACjC,YAAY,EAAE,SAAS;IACvB,aAAa,EAAE,iBAAiB;IAChC,aAAa,EAAE,MAAM;CACtB,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAsB;IAC1D,MAAM,EAAE,yBAAyB;IACjC,YAAY,EAAE,SAAS;IACvB,aAAa,EAAE,iBAAiB;CACjC,CAAC"}
@@ -0,0 +1,174 @@
1
+ import { createHash } from "node:crypto";
2
+ import { authorize } from "../core/authorize/index.js";
3
+ export * from "../core/usage.js";
4
+ export * from "../core/rateLimit/index.js";
5
+ export * from "../core/services.js";
6
+ /**
7
+ *
8
+ * @param {AuthInput['req']} authInput.req - The incoming request from which information will be pulled from. These information includes (checks are in order and terminates on first match):
9
+ * - clientId: Checks header `x-client-id`, search param `clientId`
10
+ * - bundleId: Checks header `x-bundle-id`, search param `bundleId`
11
+ * - secretKey: Checks header `x-secret-key`
12
+ * - origin (the requesting domain): Checks header `origin`, `referer`
13
+ * @param {AuthInput['clientId']} authInput.clientId - Overrides any clientId found on the `req` object
14
+ * @param {AuthInput['targetAddress']} authInput.targetAddress - Only used in smart wallets to determine if the request is authorized to interact with the target address.
15
+ * @param {NodeServiceConfig['enforceAuth']} serviceConfig - Always `true` unless you need to turn auth off. Tells the service whether or not to enforce auth.
16
+ * @param {NodeServiceConfig['apiUrl']} serviceConfig.apiUrl - The url of the api server to fetch information for verification. `https://api.thirdweb.com` for production and `https://api.staging.thirdweb.com` for staging
17
+ * @param {NodeServiceConfig['serviceApiKey']} serviceConfig.serviceApiKey - secret key to be used authenticate the caller of the api-server. Check the api-server's env variable for the keys.
18
+ * @param {NodeServiceConfig['serviceScope']} serviceConfig.serviceScope - The service that we are requesting authorization for. E.g. `relayer`, `rpc`, 'bundler', 'storage' etc.
19
+ * @param {NodeServiceConfig['serviceAction']} serviceConfig.serviceAction - Needed when the `serviceScope` is `storage`. Can be either `read` or `write`.
20
+ * @param {NodeServiceConfig['useWalletAuth']} serviceConfig.useWalletAuth - If true it pings the `wallet/me` or else, `account/me`. You most likely can leave this as false.
21
+ * @returns {AuthorizationResult} authorizationResult - contains if the request is authorized, and information about the account if it is authorized. Otherwise, it contains the error message and status code.
22
+ */
23
+ export async function authorizeNode(authInput, serviceConfig, cacheOptions) {
24
+ let authData;
25
+ try {
26
+ authData = extractAuthorizationData(authInput);
27
+ }
28
+ catch (e) {
29
+ if (e instanceof Error && e.message === "KEY_CONFLICT") {
30
+ return {
31
+ authorized: false,
32
+ status: 400,
33
+ errorMessage: "Please pass either a client id or a secret key.",
34
+ errorCode: "KEY_CONFLICT",
35
+ };
36
+ }
37
+ return {
38
+ authorized: false,
39
+ status: 500,
40
+ errorMessage: "Internal Server Error",
41
+ errorCode: "INTERNAL_SERVER_ERROR",
42
+ };
43
+ }
44
+ return await authorize(authData, serviceConfig, cacheOptions);
45
+ }
46
+ function getHeader(headers, headerName) {
47
+ const header = headers[headerName];
48
+ if (Array.isArray(header)) {
49
+ return header?.[0] ?? null;
50
+ }
51
+ return header ?? null;
52
+ }
53
+ export function extractAuthorizationData(authInput) {
54
+ let requestUrl;
55
+ try {
56
+ requestUrl = new URL(authInput.req.url || "", `http://${authInput.req.headers.host}`);
57
+ }
58
+ catch (error) {
59
+ console.log("** Node URL Error **", error);
60
+ throw error;
61
+ }
62
+ const headers = authInput.req.headers;
63
+ const secretKey = getHeader(headers, "x-secret-key");
64
+ // prefer clientId that is explicitly passed in
65
+ let clientId = authInput.clientId ?? null;
66
+ if (!clientId) {
67
+ // next preference is clientId from header
68
+ clientId = getHeader(headers, "x-client-id");
69
+ }
70
+ // next preference is search param
71
+ if (!clientId) {
72
+ clientId = requestUrl.searchParams.get("clientId");
73
+ }
74
+ // bundle id from header is first preference
75
+ let bundleId = getHeader(headers, "x-bundle-id");
76
+ // next preference is search param
77
+ if (!bundleId) {
78
+ bundleId = requestUrl.searchParams.get("bundleId");
79
+ }
80
+ let ecosystemId = getHeader(headers, "x-ecosystem-id");
81
+ if (!ecosystemId) {
82
+ ecosystemId = requestUrl.searchParams.get("ecosystemId");
83
+ }
84
+ let ecosystemPartnerId = getHeader(headers, "x-ecosystem-partner-id");
85
+ if (!ecosystemPartnerId) {
86
+ ecosystemPartnerId = requestUrl.searchParams.get("ecosystemPartnerId");
87
+ }
88
+ let origin = getHeader(headers, "origin");
89
+ // if origin header is not available we'll fall back to referrer;
90
+ if (!origin) {
91
+ origin = getHeader(headers, "referer");
92
+ }
93
+ // if we have an origin at this point, normalize it
94
+ if (origin) {
95
+ try {
96
+ origin = new URL(origin).host;
97
+ }
98
+ catch (e) {
99
+ console.warn("failed to parse origin", origin, e);
100
+ }
101
+ }
102
+ // handle if we a secret key is passed in the headers
103
+ let secretKeyHash = null;
104
+ if (secretKey) {
105
+ // hash the secret key
106
+ secretKeyHash = hashSecretKey(secretKey);
107
+ // derive the client id from the secret key hash
108
+ const derivedClientId = deriveClientIdFromSecretKeyHash(secretKeyHash);
109
+ // if we already have a client id passed in we need to make sure they match
110
+ if (clientId && clientId !== derivedClientId) {
111
+ throw new Error("KEY_CONFLICT");
112
+ }
113
+ // otherwise set the client id to the derived client id (client id based off of secret key)
114
+ clientId = derivedClientId;
115
+ }
116
+ let jwt = null;
117
+ let useWalletAuth = null;
118
+ // check for authorization header on the request
119
+ const authorizationHeader = getHeader(headers, "authorization");
120
+ if (authorizationHeader) {
121
+ const [type, token] = authorizationHeader.split(" ");
122
+ if (type?.toLowerCase() === "bearer" && !!token) {
123
+ jwt = token;
124
+ const walletAuthHeader = getHeader(headers, "x-authorize-wallet");
125
+ // IK a stringified boolean is not ideal, but it's required to pass it in the headers.
126
+ if (walletAuthHeader?.toLowerCase() === "true") {
127
+ useWalletAuth = walletAuthHeader;
128
+ }
129
+ }
130
+ }
131
+ return {
132
+ jwt,
133
+ hashedJWT: jwt ? hashSecretKey(jwt) : null,
134
+ secretKeyHash,
135
+ secretKey,
136
+ clientId,
137
+ ecosystemId,
138
+ ecosystemPartnerId,
139
+ origin,
140
+ bundleId,
141
+ targetAddress: authInput.targetAddress,
142
+ useWalletAuth,
143
+ };
144
+ }
145
+ export function hashSecretKey(secretKey) {
146
+ return createHash("sha256").update(secretKey).digest("hex");
147
+ }
148
+ export function deriveClientIdFromSecretKeyHash(secretKeyHash) {
149
+ return secretKeyHash.slice(0, 32);
150
+ }
151
+ export function logHttpRequest({ clientId, req, res, isAuthed, statusMessage, latencyMs, }) {
152
+ try {
153
+ const authorizationData = extractAuthorizationData({ req, clientId });
154
+ const headers = req.headers;
155
+ console.log(JSON.stringify({
156
+ method: req.method,
157
+ pathname: req.url,
158
+ hasSecretKey: !!authorizationData.secretKey,
159
+ hasClientId: !!authorizationData.clientId,
160
+ hasJwt: !!authorizationData.jwt,
161
+ clientId: authorizationData.clientId,
162
+ isAuthed,
163
+ status: res.statusCode,
164
+ statusMessage,
165
+ sdkName: headers["x-sdk-name"] ?? undefined,
166
+ sdkVersion: headers["x-sdk-version"] ?? undefined,
167
+ platform: headers["x-sdk-platform"] ?? undefined,
168
+ os: headers["x-sdk-os"] ?? undefined,
169
+ latencyMs,
170
+ }));
171
+ }
172
+ catch { }
173
+ }
174
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/node/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"type": "module","sideEffects":false}
@@ -1,12 +1,13 @@
1
1
  import type { ExecutionContext, KVNamespace, Response } from "@cloudflare/workers-types";
2
- import type { CoreServiceConfig } from "../core/api";
3
2
  import type { Request } from "@cloudflare/workers-types";
4
- import type { AuthorizationInput } from "../core/authorize";
5
- import type { AuthorizationResult } from "../core/authorize/types";
6
- import type { CoreAuthInput } from "../core/types";
7
- export * from "../core/services";
8
- export * from "./usage";
9
- type WorkerServiceConfig = CoreServiceConfig & {
3
+ import type { CoreServiceConfig } from "../core/api.js";
4
+ import type { AuthorizationInput } from "../core/authorize/index.js";
5
+ import type { AuthorizationResult } from "../core/authorize/types.js";
6
+ import type { CoreAuthInput } from "../core/types.js";
7
+ export * from "./usage.js";
8
+ export * from "../core/services.js";
9
+ export * from "../core/rateLimit/index.js";
10
+ export type WorkerServiceConfig = CoreServiceConfig & {
10
11
  kvStore: KVNamespace;
11
12
  ctx: ExecutionContext;
12
13
  cacheTtlSeconds?: number;
@@ -18,10 +19,11 @@ export declare function authorizeWorker(authInput: AuthInput, serviceConfig: Wor
18
19
  export declare function extractAuthorizationData(authInput: AuthInput): Promise<AuthorizationInput>;
19
20
  export declare function hashSecretKey(secretKey: string): Promise<string>;
20
21
  export declare function deriveClientIdFromSecretKeyHash(secretKeyHash: string): string;
21
- export declare function logHttpRequest({ source, clientId, req, res, isAuthed, statusMessage, }: AuthInput & {
22
+ export declare function logHttpRequest({ clientId, req, res, isAuthed, statusMessage, latencyMs, }: AuthInput & {
22
23
  source: string;
23
24
  res: Response;
24
25
  isAuthed?: boolean;
25
26
  statusMessage?: Error | string;
27
+ latencyMs?: number;
26
28
  }): Promise<void>;
27
29
  //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cf-worker/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EACX,QAAQ,EACT,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAA0B,MAAM,gBAAgB,CAAC;AAEhF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAE3C,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,GAAG;IACpD,OAAO,EAAE,WAAW,CAAC;IACrB,GAAG,EAAE,gBAAgB,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAIF,KAAK,SAAS,GAAG,aAAa,GAAG;IAC/B,GAAG,EAAE,OAAO,CAAC;CACd,CAAC;AAEF,wBAAsB,eAAe,CACnC,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,mBAAmB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CA0C9B;AAED,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,kBAAkB,CAAC,CAuF7B;AAED,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,mBAIpD;AAED,wBAAgB,+BAA+B,CAAC,aAAa,EAAE,MAAM,UAEpE;AAQD,wBAAsB,cAAc,CAAC,EACnC,QAAQ,EACR,GAAG,EACH,GAAG,EACH,QAAQ,EACR,aAAa,EACb,SAAS,GACV,EAAE,SAAS,GAAG;IAEb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,QAAQ,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,iBA0BA"}
@@ -0,0 +1,24 @@
1
+ import { type UsageEvent } from "../core/usage.js";
2
+ export type { UsageEvent } from "../core/usage.js";
3
+ /**
4
+ * Publish usage events. Provide the relevant fields for your application.
5
+ *
6
+ * Usage in Cloudflare Workers:
7
+ * ctx.waitUntil(
8
+ * publishUsageEvents(
9
+ * [event1, event2],
10
+ * { queueUrl, accessKeyId, secretAccessKey },
11
+ * )
12
+ * )
13
+ *
14
+ * @param usageEvents
15
+ * @param config
16
+ */
17
+ declare function publishUsageEvents(usageEvents: UsageEvent[], config: {
18
+ queueUrl: string;
19
+ accessKeyId: string;
20
+ secretAccessKey: string;
21
+ region?: string;
22
+ }): Promise<void>;
23
+ export { publishUsageEvents };
24
+ //# sourceMappingURL=usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../../src/cf-worker/usage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAoB,MAAM,kBAAkB,CAAC;AACrE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAWnD;;;;;;;;;;;;;GAaG;AACH,iBAAe,kBAAkB,CAC/B,WAAW,EAAE,UAAU,EAAE,EACzB,MAAM,EAAE;IACN,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACA,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,121 @@
1
+ import type { AuthorizationInput } from "./authorize/index.js";
2
+ import type { ServiceName } from "./services.js";
3
+ export type UserOpData = {
4
+ sender: string;
5
+ targets: string[];
6
+ gasLimit: string;
7
+ gasPrice: string;
8
+ };
9
+ export type PolicyResult = {
10
+ policyId: string | null;
11
+ isAllowed: boolean;
12
+ reason: string;
13
+ };
14
+ export type CoreServiceConfig = {
15
+ apiUrl: string;
16
+ serviceScope: ServiceName;
17
+ serviceApiKey: string;
18
+ serviceAction?: string;
19
+ useWalletAuth?: boolean;
20
+ includeUsage?: boolean;
21
+ };
22
+ export type TeamAndProjectResponse = {
23
+ team: TeamResponse;
24
+ project?: ProjectResponse | null;
25
+ };
26
+ export type ApiResponse = {
27
+ data: TeamAndProjectResponse | null;
28
+ error: {
29
+ code: string;
30
+ statusCode: number;
31
+ message: string;
32
+ };
33
+ };
34
+ export type TeamResponse = {
35
+ id: string;
36
+ name: string;
37
+ slug: string;
38
+ image: string | null;
39
+ billingPlan: string;
40
+ createdAt: Date;
41
+ updatedAt: Date | null;
42
+ billingEmail: string | null;
43
+ billingStatus: string | null;
44
+ growthTrialEligible: boolean | null;
45
+ enabledScopes: ServiceName[];
46
+ };
47
+ export type ProjectResponse = {
48
+ id: string;
49
+ teamId: string;
50
+ createdAt: Date;
51
+ updatedAt: Date | null;
52
+ publishableKey: string;
53
+ name: string;
54
+ slug: string;
55
+ image: string | null;
56
+ domains: string[];
57
+ bundleIds: string[];
58
+ services: ({
59
+ name: "pay";
60
+ actions: never[];
61
+ payoutAddress: string | null;
62
+ } | {
63
+ name: "storage";
64
+ actions: ("read" | "write")[];
65
+ } | {
66
+ name: "rpc";
67
+ actions: never[];
68
+ } | {
69
+ name: "insight";
70
+ actions: never[];
71
+ } | {
72
+ name: "nebula";
73
+ actions: never[];
74
+ } | {
75
+ name: "bundler";
76
+ actions: never[];
77
+ allowedChainIds?: number[] | null;
78
+ allowedContractAddresses?: string[] | null;
79
+ allowedWallets?: string[] | null;
80
+ blockedWallets?: string[] | null;
81
+ bypassWallets?: string[] | null;
82
+ limits?: {
83
+ global?: {
84
+ maxSpend: string;
85
+ maxSpendUnit: "usd" | "native";
86
+ } | null;
87
+ } | null;
88
+ serverVerifier?: {
89
+ url: string;
90
+ headers?: {
91
+ key: string;
92
+ value: string;
93
+ }[];
94
+ } | null;
95
+ } | {
96
+ name: "embeddedWallets";
97
+ actions: never[];
98
+ redirectUrls?: string[] | null;
99
+ applicationName?: string | null;
100
+ applicationImageUrl?: string | null;
101
+ recoveryShareManagement?: string | null;
102
+ customAuthentication?: CustomAuthenticationServiceSchema | null;
103
+ customAuthEndpoint?: CustomAuthEndpointServiceSchema | null;
104
+ })[];
105
+ walletAddresses: string[];
106
+ };
107
+ type CustomAuthenticationServiceSchema = {
108
+ jwksUri: string;
109
+ aud: string;
110
+ };
111
+ type CustomAuthEndpointServiceSchema = {
112
+ authEndpoint: string;
113
+ customHeaders: {
114
+ key: string;
115
+ value: string;
116
+ }[];
117
+ };
118
+ export declare function fetchTeamAndProject(authData: AuthorizationInput, config: CoreServiceConfig): Promise<ApiResponse>;
119
+ export declare function updateRateLimitedAt(projectId: string, config: CoreServiceConfig): Promise<void>;
120
+ export {};
121
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/core/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { TeamAndProjectResponse } from "../api.js";
2
+ import type { AuthorizationResult } from "./types.js";
3
+ export type ClientAuthorizationPayload = {
4
+ secretKeyHash: string | null;
5
+ bundleId: string | null;
6
+ origin: string | null;
7
+ };
8
+ export declare function authorizeClient(authOptions: ClientAuthorizationPayload, teamAndProjectResponse: TeamAndProjectResponse): AuthorizationResult;
9
+ export declare function authorizeDomain({ domains, origin, }: {
10
+ domains: string[];
11
+ origin: string;
12
+ }): boolean;
13
+ export declare function authorizeBundleId({ bundleIds, bundleId, }: {
14
+ bundleIds: string[];
15
+ bundleId: string;
16
+ }): boolean;
17
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/core/authorize/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,MAAM,0BAA0B,GAAG;IACvC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AAEF,wBAAgB,eAAe,CAC7B,WAAW,EAAE,0BAA0B,EACvC,sBAAsB,EAAE,sBAAsB,GAC7C,mBAAmB,CAgErB;AAGD,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,MAAM,GACP,EAAE;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAgCjD;AAED,wBAAgB,iBAAiB,CAAC,EAChC,SAAS,EACT,QAAQ,GACT,EAAE;IAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CASrD"}
@@ -1,8 +1,10 @@
1
- import { AccountMetadata, ApiKeyMetadata, CoreServiceConfig } from "../api";
2
- import { AuthorizationResult } from "./types";
1
+ import { type CoreServiceConfig, type TeamAndProjectResponse } from "../api.js";
2
+ import type { AuthorizationResult } from "./types.js";
3
3
  export type AuthorizationInput = {
4
4
  secretKey: string | null;
5
5
  clientId: string | null;
6
+ ecosystemId: string | null;
7
+ ecosystemPartnerId: string | null;
6
8
  origin: string | null;
7
9
  bundleId: string | null;
8
10
  secretKeyHash: string | null;
@@ -11,11 +13,10 @@ export type AuthorizationInput = {
11
13
  targetAddress?: string | string[];
12
14
  useWalletAuth?: string | null;
13
15
  };
14
- type CacheOptions = {
16
+ export type CacheOptions = {
15
17
  get: (clientId: string) => Promise<string | null>;
16
- put: (clientId: string, data: ApiKeyMetadata | AccountMetadata) => Promise<void> | void;
18
+ put: (clientId: string, data: TeamAndProjectResponse) => Promise<void> | void;
17
19
  cacheTtlSeconds: number;
18
20
  };
19
21
  export declare function authorize(authData: AuthorizationInput, serviceConfig: CoreServiceConfig, cacheOptions?: CacheOptions): Promise<AuthorizationResult>;
20
- export {};
21
22
  //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/authorize/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAE5B,MAAM,WAAW,CAAC;AAGnB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAElC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAClD,GAAG,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC9E,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AASF,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,kBAAkB,EAC5B,aAAa,EAAE,iBAAiB,EAChC,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CA8G9B"}
@@ -0,0 +1,4 @@
1
+ import type { CoreServiceConfig, TeamAndProjectResponse } from "../api.js";
2
+ import type { AuthorizationResult } from "./types.js";
3
+ export declare function authorizeService(teamAndProjectResponse: TeamAndProjectResponse, serviceConfig: CoreServiceConfig): AuthorizationResult;
4
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../src/core/authorize/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,wBAAgB,gBAAgB,CAC9B,sBAAsB,EAAE,sBAAsB,EAC9C,aAAa,EAAE,iBAAiB,GAC/B,mBAAmB,CAsDrB"}
@@ -0,0 +1,10 @@
1
+ import type { TeamAndProjectResponse } from "../api.js";
2
+ export type AuthorizationResult = ({
3
+ authorized: true;
4
+ } & TeamAndProjectResponse) | {
5
+ authorized: false;
6
+ status: number;
7
+ errorMessage: string;
8
+ errorCode: string;
9
+ };
10
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/authorize/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAExD,MAAM,MAAM,mBAAmB,GAC3B,CAAC;IACC,UAAU,EAAE,IAAI,CAAC;CAClB,GAAG,sBAAsB,CAAC,GAC3B;IACE,UAAU,EAAE,KAAK,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { type CoreServiceConfig, type ProjectResponse } from "../api.js";
2
+ import type { RateLimitResult } from "./types.js";
3
+ type IRedis = {
4
+ incr: (key: string) => Promise<number>;
5
+ expire: (key: string, ttlSeconds: number) => Promise<0 | 1>;
6
+ };
7
+ export declare function rateLimit(args: {
8
+ project?: ProjectResponse;
9
+ limitPerSecond: number;
10
+ serviceConfig: CoreServiceConfig;
11
+ redis: IRedis;
12
+ /**
13
+ * Sample requests to reduce load on Redis.
14
+ * This scales down the request count and the rate limit threshold.
15
+ * @default 1.0
16
+ */
17
+ sampleRate?: number;
18
+ }): Promise<RateLimitResult>;
19
+ export {};
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/rateLimit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EAErB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAKlD,KAAK,MAAM,GAAG;IACZ,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CAC7D,CAAC;AAEF,wBAAsB,SAAS,CAAC,IAAI,EAAE;IACpC,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,iBAAiB,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,eAAe,CAAC,CAsE3B"}
@@ -0,0 +1,13 @@
1
+ export type RateLimitResult = {
2
+ rateLimited: false;
3
+ requestCount: number;
4
+ rateLimit: number;
5
+ } | {
6
+ rateLimited: true;
7
+ requestCount: number;
8
+ rateLimit: number;
9
+ status: number;
10
+ errorMessage: string;
11
+ errorCode: string;
12
+ };
13
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/rateLimit/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GACvB;IACE,WAAW,EAAE,KAAK,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB,GACD;IACE,WAAW,EAAE,IAAI,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC"}