@thirdweb-dev/service-utils 0.5.0-nightly-6cf298a29-20240308012322 → 0.5.1
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/dist/cjs/cf-worker/index.js +152 -0
- package/dist/cjs/cf-worker/index.js.map +1 -0
- package/dist/cjs/cf-worker/usage.js +55 -0
- package/dist/cjs/cf-worker/usage.js.map +1 -0
- package/dist/cjs/core/api.js +42 -0
- package/dist/cjs/core/api.js.map +1 -0
- package/dist/cjs/core/authorize/client.js +104 -0
- package/dist/cjs/core/authorize/client.js.map +1 -0
- package/dist/cjs/core/authorize/index.js +110 -0
- package/dist/cjs/core/authorize/index.js.map +1 -0
- package/dist/cjs/core/authorize/service.js +60 -0
- package/dist/cjs/core/authorize/service.js.map +1 -0
- package/dist/cjs/core/authorize/types.js +3 -0
- package/dist/cjs/core/authorize/types.js.map +1 -0
- package/dist/cjs/core/rateLimit/index.js +60 -0
- package/dist/cjs/core/rateLimit/index.js.map +1 -0
- package/dist/cjs/core/rateLimit/types.js +3 -0
- package/dist/cjs/core/rateLimit/types.js.map +1 -0
- package/dist/cjs/core/services.js +85 -0
- package/dist/cjs/core/services.js.map +1 -0
- package/dist/cjs/core/types.js +3 -0
- package/dist/cjs/core/types.js.map +1 -0
- package/dist/cjs/core/usage.js +85 -0
- package/dist/cjs/core/usage.js.map +1 -0
- package/dist/cjs/index.js +13 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/mocks.js +61 -0
- package/dist/cjs/mocks.js.map +1 -0
- package/dist/cjs/node/index.js +156 -0
- package/dist/cjs/node/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/esm/cf-worker/index.js +145 -0
- package/dist/esm/cf-worker/index.js.map +1 -0
- package/dist/esm/cf-worker/usage.js +53 -0
- package/dist/esm/cf-worker/usage.js.map +1 -0
- package/dist/esm/core/api.js +38 -0
- package/dist/esm/core/api.js.map +1 -0
- package/dist/esm/core/authorize/client.js +99 -0
- package/dist/esm/core/authorize/client.js.map +1 -0
- package/dist/esm/core/authorize/index.js +107 -0
- package/dist/esm/core/authorize/index.js.map +1 -0
- package/dist/esm/core/authorize/service.js +57 -0
- package/dist/esm/core/authorize/service.js.map +1 -0
- package/dist/esm/core/authorize/types.js +2 -0
- package/dist/esm/core/authorize/types.js.map +1 -0
- package/dist/esm/core/rateLimit/index.js +57 -0
- package/dist/esm/core/rateLimit/index.js.map +1 -0
- package/dist/esm/core/rateLimit/types.js +2 -0
- package/dist/esm/core/rateLimit/types.js.map +1 -0
- package/dist/esm/core/services.js +81 -0
- package/dist/esm/core/services.js.map +1 -0
- package/dist/esm/core/types.js +2 -0
- package/dist/esm/core/types.js.map +1 -0
- package/dist/esm/core/usage.js +82 -0
- package/dist/esm/core/usage.js.map +1 -0
- package/dist/esm/index.js +5 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/mocks.js +58 -0
- package/dist/esm/mocks.js.map +1 -0
- package/dist/esm/node/index.js +149 -0
- package/dist/esm/node/index.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/{declarations/src → types}/cf-worker/index.d.ts +8 -10
- package/dist/types/cf-worker/index.d.ts.map +1 -0
- package/dist/types/cf-worker/usage.d.ts +24 -0
- package/dist/types/cf-worker/usage.d.ts.map +1 -0
- package/dist/types/core/api.d.ts +121 -0
- package/dist/types/core/api.d.ts.map +1 -0
- package/dist/types/core/authorize/client.d.ts +17 -0
- package/dist/types/core/authorize/client.d.ts.map +1 -0
- package/dist/{declarations/src → types}/core/authorize/index.d.ts +6 -5
- package/dist/types/core/authorize/index.d.ts.map +1 -0
- package/dist/types/core/authorize/service.d.ts +4 -0
- package/dist/types/core/authorize/service.d.ts.map +1 -0
- package/dist/types/core/authorize/types.d.ts +10 -0
- package/dist/types/core/authorize/types.d.ts.map +1 -0
- package/dist/{declarations/src → types}/core/rateLimit/index.d.ts +4 -4
- package/dist/types/core/rateLimit/index.d.ts.map +1 -0
- package/dist/types/core/rateLimit/types.d.ts.map +1 -0
- package/dist/{declarations/src → types}/core/services.d.ts +55 -23
- package/dist/types/core/services.d.ts.map +1 -0
- package/dist/types/core/types.d.ts.map +1 -0
- package/dist/{declarations/src/cf-worker → types/core}/usage.d.ts +84 -30
- package/dist/types/core/usage.d.ts.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/mocks.d.ts +7 -0
- package/dist/types/mocks.d.ts.map +1 -0
- package/dist/types/node/index.d.ts +23 -0
- package/dist/types/node/index.d.ts.map +1 -0
- package/package.json +42 -45
- package/cf-worker/dist/thirdweb-dev-service-utils-cf-worker.cjs.d.ts +0 -2
- package/cf-worker/dist/thirdweb-dev-service-utils-cf-worker.cjs.d.ts.map +0 -1
- package/cf-worker/dist/thirdweb-dev-service-utils-cf-worker.cjs.dev.js +0 -272
- package/cf-worker/dist/thirdweb-dev-service-utils-cf-worker.cjs.js +0 -7
- package/cf-worker/dist/thirdweb-dev-service-utils-cf-worker.cjs.prod.js +0 -272
- package/cf-worker/dist/thirdweb-dev-service-utils-cf-worker.esm.js +0 -258
- package/cf-worker/package.json +0 -4
- package/dist/declarations/src/cf-worker/index.d.ts.map +0 -1
- package/dist/declarations/src/cf-worker/usage.d.ts.map +0 -1
- package/dist/declarations/src/core/api.d.ts +0 -84
- package/dist/declarations/src/core/api.d.ts.map +0 -1
- package/dist/declarations/src/core/authorize/client.d.ts +0 -9
- package/dist/declarations/src/core/authorize/client.d.ts.map +0 -1
- package/dist/declarations/src/core/authorize/index.d.ts.map +0 -1
- package/dist/declarations/src/core/authorize/service.d.ts +0 -7
- package/dist/declarations/src/core/authorize/service.d.ts.map +0 -1
- package/dist/declarations/src/core/authorize/types.d.ts +0 -12
- package/dist/declarations/src/core/authorize/types.d.ts.map +0 -1
- package/dist/declarations/src/core/rateLimit/index.d.ts.map +0 -1
- package/dist/declarations/src/core/rateLimit/types.d.ts.map +0 -1
- package/dist/declarations/src/core/services.d.ts.map +0 -1
- package/dist/declarations/src/core/types.d.ts.map +0 -1
- package/dist/declarations/src/core/usageLimit/index.d.ts +0 -5
- package/dist/declarations/src/core/usageLimit/index.d.ts.map +0 -1
- package/dist/declarations/src/core/usageLimit/types.d.ts +0 -9
- package/dist/declarations/src/core/usageLimit/types.d.ts.map +0 -1
- package/dist/declarations/src/index.d.ts +0 -2
- package/dist/declarations/src/index.d.ts.map +0 -1
- package/dist/declarations/src/node/index.d.ts +0 -43
- package/dist/declarations/src/node/index.d.ts.map +0 -1
- package/dist/index-3b9a0743.esm.js +0 -572
- package/dist/index-62b88cac.cjs.dev.js +0 -576
- package/dist/index-aa324361.cjs.prod.js +0 -576
- package/dist/services-2aecbda8.esm.js +0 -65
- package/dist/services-508322f3.cjs.dev.js +0 -70
- package/dist/services-5c4d6977.cjs.prod.js +0 -70
- package/dist/thirdweb-dev-service-utils.cjs.d.ts +0 -2
- package/dist/thirdweb-dev-service-utils.cjs.d.ts.map +0 -1
- package/dist/thirdweb-dev-service-utils.cjs.dev.js +0 -12
- package/dist/thirdweb-dev-service-utils.cjs.js +0 -7
- package/dist/thirdweb-dev-service-utils.cjs.prod.js +0 -12
- package/dist/thirdweb-dev-service-utils.esm.js +0 -1
- package/node/dist/thirdweb-dev-service-utils-node.cjs.d.ts +0 -2
- package/node/dist/thirdweb-dev-service-utils-node.cjs.d.ts.map +0 -1
- package/node/dist/thirdweb-dev-service-utils-node.cjs.dev.js +0 -193
- package/node/dist/thirdweb-dev-service-utils-node.cjs.js +0 -7
- package/node/dist/thirdweb-dev-service-utils-node.cjs.prod.js +0 -193
- package/node/dist/thirdweb-dev-service-utils-node.esm.js +0 -180
- package/node/package.json +0 -4
- /package/dist/{declarations/src → types}/core/rateLimit/types.d.ts +0 -0
- /package/dist/{declarations/src → types}/core/types.d.ts +0 -0
@@ -0,0 +1,85 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.SERVICES = exports.SERVICE_NAMES = exports.SERVICE_DEFINITIONS = void 0;
|
4
|
+
exports.getServiceByName = getServiceByName;
|
5
|
+
exports.SERVICE_DEFINITIONS = {
|
6
|
+
storage: {
|
7
|
+
name: "storage",
|
8
|
+
title: "Storage",
|
9
|
+
description: "IPFS Upload and Download",
|
10
|
+
actions: [
|
11
|
+
{
|
12
|
+
name: "read",
|
13
|
+
title: "Download",
|
14
|
+
description: "Download a file from Storage",
|
15
|
+
},
|
16
|
+
{
|
17
|
+
name: "write",
|
18
|
+
title: "Upload",
|
19
|
+
description: "Upload a file to Storage",
|
20
|
+
},
|
21
|
+
],
|
22
|
+
},
|
23
|
+
rpc: {
|
24
|
+
name: "rpc",
|
25
|
+
title: "RPC",
|
26
|
+
description: "Accelerated RPC Edge",
|
27
|
+
// all actions allowed
|
28
|
+
actions: [],
|
29
|
+
},
|
30
|
+
bundler: {
|
31
|
+
name: "bundler",
|
32
|
+
title: "Account Abstraction",
|
33
|
+
description: "Bundler & Paymaster services",
|
34
|
+
// all actions allowed
|
35
|
+
actions: [],
|
36
|
+
},
|
37
|
+
relayer: {
|
38
|
+
name: "relayer",
|
39
|
+
title: "Gasless Relayer",
|
40
|
+
description: "Enable gasless transactions",
|
41
|
+
// all actions allowed
|
42
|
+
actions: [],
|
43
|
+
},
|
44
|
+
embeddedWallets: {
|
45
|
+
name: "embeddedWallets",
|
46
|
+
title: "In-App Wallets",
|
47
|
+
description: "E-mail and social login wallets for easy web3 onboarding",
|
48
|
+
// all actions allowed
|
49
|
+
actions: [],
|
50
|
+
},
|
51
|
+
pay: {
|
52
|
+
name: "pay",
|
53
|
+
title: "Pay",
|
54
|
+
description: "Pay for a blockchain transaction with any currency",
|
55
|
+
// all actions allowed
|
56
|
+
actions: [],
|
57
|
+
},
|
58
|
+
chainsaw: {
|
59
|
+
name: "chainsaw",
|
60
|
+
title: "Chainsaw",
|
61
|
+
description: "Indexed data for any EVM chain",
|
62
|
+
// all actions allowed
|
63
|
+
actions: [],
|
64
|
+
},
|
65
|
+
insight: {
|
66
|
+
name: "insight",
|
67
|
+
title: "Insight",
|
68
|
+
description: "Insight services",
|
69
|
+
// all actions allowed
|
70
|
+
actions: [],
|
71
|
+
},
|
72
|
+
nebula: {
|
73
|
+
name: "nebula",
|
74
|
+
title: "Nebula",
|
75
|
+
description: "Advanced blockchain reasoning and execution capabilities with AI",
|
76
|
+
// all actions allowed
|
77
|
+
actions: [],
|
78
|
+
},
|
79
|
+
};
|
80
|
+
exports.SERVICE_NAMES = Object.keys(exports.SERVICE_DEFINITIONS);
|
81
|
+
exports.SERVICES = Object.values(exports.SERVICE_DEFINITIONS);
|
82
|
+
function getServiceByName(name) {
|
83
|
+
return exports.SERVICE_DEFINITIONS[name];
|
84
|
+
}
|
85
|
+
//# sourceMappingURL=services.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"services.js","sourceRoot":"","sources":["../../../src/core/services.ts"],"names":[],"mappings":";;;AA8FA,4CAEC;AAhGY,QAAA,mBAAmB,GAAG;IACjC,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,0BAA0B;QACvC,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,UAAU;gBACjB,WAAW,EAAE,8BAA8B;aAC5C;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,QAAQ;gBACf,WAAW,EAAE,0BAA0B;aACxC;SACF;KACF;IACD,GAAG,EAAE;QACH,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,KAAK;QACZ,WAAW,EAAE,sBAAsB;QACnC,sBAAsB;QACtB,OAAO,EAAE,EAAE;KACZ;IACD,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,8BAA8B;QAC3C,sBAAsB;QACtB,OAAO,EAAE,EAAE;KACZ;IACD,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,6BAA6B;QAC1C,sBAAsB;QACtB,OAAO,EAAE,EAAE;KACZ;IACD,eAAe,EAAE;QACf,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,0DAA0D;QACvE,sBAAsB;QACtB,OAAO,EAAE,EAAE;KACZ;IACD,GAAG,EAAE;QACH,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,KAAK;QACZ,WAAW,EAAE,oDAAoD;QACjE,sBAAsB;QACtB,OAAO,EAAE,EAAE;KACZ;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,gCAAgC;QAC7C,sBAAsB;QACtB,OAAO,EAAE,EAAE;KACZ;IACD,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,kBAAkB;QAC/B,sBAAsB;QACtB,OAAO,EAAE,EAAE;KACZ;IACD,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,QAAQ;QACf,WAAW,EACT,kEAAkE;QACpE,sBAAsB;QACtB,OAAO,EAAE,EAAE;KACZ;CACO,CAAC;AAEE,QAAA,aAAa,GAAG,MAAM,CAAC,IAAI,CACtC,2BAAmB,CACoB,CAAC;AAE7B,QAAA,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,2BAAmB,CAAC,CAAC;AAa3D,SAAgB,gBAAgB,CAAC,IAAiB;IAChD,OAAO,2BAAmB,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/types.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1,85 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.usageEventSchema = void 0;
|
4
|
+
const zod_1 = require("zod");
|
5
|
+
exports.usageEventSchema = zod_1.z.object({
|
6
|
+
source: zod_1.z.string(),
|
7
|
+
action: zod_1.z.string(),
|
8
|
+
/**
|
9
|
+
* The following fields are optional.
|
10
|
+
*/
|
11
|
+
accountId: zod_1.z.string().optional(),
|
12
|
+
isClientEvent: zod_1.z.boolean().optional(),
|
13
|
+
apiKeyId: zod_1.z.string().optional(),
|
14
|
+
creatorWalletAddress: zod_1.z.string().optional(),
|
15
|
+
clientId: zod_1.z.string().optional(),
|
16
|
+
walletAddress: zod_1.z.string().optional(),
|
17
|
+
walletType: zod_1.z.string().optional(),
|
18
|
+
chainId: zod_1.z.number().int().positive().optional(),
|
19
|
+
provider: zod_1.z.string().optional(),
|
20
|
+
mimeType: zod_1.z.string().optional(),
|
21
|
+
fileSize: zod_1.z.number().int().nonnegative().optional(),
|
22
|
+
fileCid: zod_1.z.string().optional(),
|
23
|
+
evmMethod: zod_1.z.string().optional(),
|
24
|
+
userOpHash: zod_1.z.string().optional(),
|
25
|
+
gasLimit: zod_1.z.number().nonnegative().optional(),
|
26
|
+
gasPricePerUnit: zod_1.z.string().optional(),
|
27
|
+
transactionFeeUsd: zod_1.z.number().optional(),
|
28
|
+
transactionHash: zod_1.z.string().optional(),
|
29
|
+
sdkName: zod_1.z.string().optional(),
|
30
|
+
sdkVersion: zod_1.z.string().optional(),
|
31
|
+
sdkPlatform: zod_1.z.string().optional(),
|
32
|
+
sdkOS: zod_1.z.string().optional(),
|
33
|
+
productName: zod_1.z.string().optional(),
|
34
|
+
transactionValue: zod_1.z.string().optional(),
|
35
|
+
pathname: zod_1.z.string().optional(),
|
36
|
+
contractAddress: zod_1.z.string().optional(),
|
37
|
+
errorCode: zod_1.z.string().optional(),
|
38
|
+
httpStatusCode: zod_1.z.number().int().nonnegative().optional(),
|
39
|
+
functionName: zod_1.z.string().optional(),
|
40
|
+
extension: zod_1.z.string().optional(),
|
41
|
+
retryCount: zod_1.z.number().int().nonnegative().optional(),
|
42
|
+
policyId: zod_1.z.string().optional(),
|
43
|
+
msSinceQueue: zod_1.z.number().nonnegative().optional(),
|
44
|
+
msSinceSend: zod_1.z.number().nonnegative().optional(),
|
45
|
+
msTotalDuration: zod_1.z.number().nonnegative().optional(),
|
46
|
+
swapId: zod_1.z.string().optional(),
|
47
|
+
tokenAddress: zod_1.z.string().optional(),
|
48
|
+
amountWei: zod_1.z.string().optional(),
|
49
|
+
amountUSDCents: zod_1.z.number().nonnegative().optional(),
|
50
|
+
httpMethod: zod_1.z
|
51
|
+
.enum([
|
52
|
+
"GET",
|
53
|
+
"POST",
|
54
|
+
"PUT",
|
55
|
+
"DELETE",
|
56
|
+
"PATCH",
|
57
|
+
"HEAD",
|
58
|
+
"CONNECT",
|
59
|
+
"OPTIONS",
|
60
|
+
"TRACE",
|
61
|
+
])
|
62
|
+
.optional(),
|
63
|
+
// Used to identify the ecosystem that the an ecosystem wallet belongs too
|
64
|
+
ecosystemId: zod_1.z.string().optional(),
|
65
|
+
ecosystemPartnerId: zod_1.z.string().optional(),
|
66
|
+
authenticationMethod: zod_1.z.string().optional(),
|
67
|
+
chainName: zod_1.z.string().optional(),
|
68
|
+
tokenSymbol: zod_1.z.string().optional(),
|
69
|
+
dstChainId: zod_1.z.number().optional(),
|
70
|
+
dstTokenAddress: zod_1.z.string().optional(),
|
71
|
+
dstChainName: zod_1.z.string().optional(),
|
72
|
+
dstTokenSymbol: zod_1.z.string().optional(),
|
73
|
+
msLatency: zod_1.z.number().optional(),
|
74
|
+
toAmountUSDCents: zod_1.z.number().optional(),
|
75
|
+
secondaryProvider: zod_1.z.string().optional(),
|
76
|
+
onRampId: zod_1.z.string().optional(),
|
77
|
+
evmRequestParams: zod_1.z.string().optional(),
|
78
|
+
providerIp: zod_1.z.string().optional(),
|
79
|
+
promptTokens: zod_1.z.number().int().nonnegative().optional(),
|
80
|
+
completionTokens: zod_1.z.number().int().nonnegative().optional(),
|
81
|
+
modelName: zod_1.z.string().optional(),
|
82
|
+
sessionId: zod_1.z.string().optional(),
|
83
|
+
requestId: zod_1.z.string().optional(),
|
84
|
+
});
|
85
|
+
//# sourceMappingURL=usage.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../src/core/usage.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.authorizeDomain = exports.authorizeBundleId = exports.updateRateLimitedAt = exports.fetchTeamAndProject = void 0;
|
4
|
+
const tslib_1 = require("tslib");
|
5
|
+
// Exports the public service definitions.
|
6
|
+
tslib_1.__exportStar(require("./core/services.js"), exports);
|
7
|
+
var api_js_1 = require("./core/api.js");
|
8
|
+
Object.defineProperty(exports, "fetchTeamAndProject", { enumerable: true, get: function () { return api_js_1.fetchTeamAndProject; } });
|
9
|
+
Object.defineProperty(exports, "updateRateLimitedAt", { enumerable: true, get: function () { return api_js_1.updateRateLimitedAt; } });
|
10
|
+
var client_js_1 = require("./core/authorize/client.js");
|
11
|
+
Object.defineProperty(exports, "authorizeBundleId", { enumerable: true, get: function () { return client_js_1.authorizeBundleId; } });
|
12
|
+
Object.defineProperty(exports, "authorizeDomain", { enumerable: true, get: function () { return client_js_1.authorizeDomain; } });
|
13
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;AAAA,0CAA0C;AAC1C,6DAAmC;AAWnC,wCAAyE;AAAhE,6GAAA,mBAAmB,OAAA;AAAE,6GAAA,mBAAmB,OAAA;AAEjD,wDAGoC;AAFlC,8GAAA,iBAAiB,OAAA;AACjB,4GAAA,eAAe,OAAA"}
|
@@ -0,0 +1,61 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.validBundlerServiceConfig = exports.validServiceConfig = exports.validTeamAndProjectResponse = exports.validTeamResponse = exports.validProjectResponse = void 0;
|
4
|
+
exports.validProjectResponse = {
|
5
|
+
id: "1",
|
6
|
+
publishableKey: "your-api-key",
|
7
|
+
walletAddresses: ["creator-address"],
|
8
|
+
domains: ["example.com", "*.example.com"],
|
9
|
+
bundleIds: [],
|
10
|
+
services: [
|
11
|
+
{
|
12
|
+
name: "storage",
|
13
|
+
actions: ["read", "write"],
|
14
|
+
},
|
15
|
+
{
|
16
|
+
name: "rpc",
|
17
|
+
actions: [],
|
18
|
+
},
|
19
|
+
{
|
20
|
+
name: "bundler",
|
21
|
+
actions: [],
|
22
|
+
allowedChainIds: [1, 2, 3],
|
23
|
+
},
|
24
|
+
],
|
25
|
+
teamId: "1",
|
26
|
+
createdAt: new Date("2024-06-01"),
|
27
|
+
updatedAt: new Date("2024-06-01"),
|
28
|
+
name: "test-project",
|
29
|
+
slug: "test-project",
|
30
|
+
image: "https://example.com/image.png",
|
31
|
+
};
|
32
|
+
exports.validTeamResponse = {
|
33
|
+
id: "1",
|
34
|
+
name: "test-team",
|
35
|
+
slug: "test-team",
|
36
|
+
image: "https://example.com/image.png",
|
37
|
+
createdAt: new Date("2024-06-01"),
|
38
|
+
updatedAt: new Date("2024-06-01"),
|
39
|
+
billingPlan: "free",
|
40
|
+
billingEmail: "test@example.com",
|
41
|
+
billingStatus: "noPayment",
|
42
|
+
growthTrialEligible: false,
|
43
|
+
enabledScopes: ["storage", "rpc", "bundler"],
|
44
|
+
};
|
45
|
+
exports.validTeamAndProjectResponse = {
|
46
|
+
team: exports.validTeamResponse,
|
47
|
+
project: exports.validProjectResponse,
|
48
|
+
authMethod: "publishableKey",
|
49
|
+
};
|
50
|
+
exports.validServiceConfig = {
|
51
|
+
apiUrl: "https://api.example.com",
|
52
|
+
serviceScope: "storage",
|
53
|
+
serviceApiKey: "service-api-key",
|
54
|
+
serviceAction: "read",
|
55
|
+
};
|
56
|
+
exports.validBundlerServiceConfig = {
|
57
|
+
apiUrl: "https://api.example.com",
|
58
|
+
serviceScope: "bundler",
|
59
|
+
serviceApiKey: "service-api-key",
|
60
|
+
};
|
61
|
+
//# sourceMappingURL=mocks.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"mocks.js","sourceRoot":"","sources":["../../src/mocks.ts"],"names":[],"mappings":";;;AAOa,QAAA,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;AAEW,QAAA,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,WAAW;IAC1B,mBAAmB,EAAE,KAAK;IAC1B,aAAa,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC;CAC7C,CAAC;AAEW,QAAA,2BAA2B,GAA2B;IACjE,IAAI,EAAE,yBAAiB;IACvB,OAAO,EAAE,4BAAoB;IAC7B,UAAU,EAAE,gBAAgB;CAC7B,CAAC;AAEW,QAAA,kBAAkB,GAAsB;IACnD,MAAM,EAAE,yBAAyB;IACjC,YAAY,EAAE,SAAS;IACvB,aAAa,EAAE,iBAAiB;IAChC,aAAa,EAAE,MAAM;CACtB,CAAC;AAEW,QAAA,yBAAyB,GAAsB;IAC1D,MAAM,EAAE,yBAAyB;IACjC,YAAY,EAAE,SAAS;IACvB,aAAa,EAAE,iBAAiB;CACjC,CAAC"}
|
@@ -0,0 +1,156 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.authorizeNode = authorizeNode;
|
4
|
+
exports.extractAuthorizationData = extractAuthorizationData;
|
5
|
+
exports.hashSecretKey = hashSecretKey;
|
6
|
+
exports.logHttpRequest = logHttpRequest;
|
7
|
+
const tslib_1 = require("tslib");
|
8
|
+
const node_crypto_1 = require("node:crypto");
|
9
|
+
const index_js_1 = require("../core/authorize/index.js");
|
10
|
+
tslib_1.__exportStar(require("../core/usage.js"), exports);
|
11
|
+
tslib_1.__exportStar(require("../core/rateLimit/index.js"), exports);
|
12
|
+
tslib_1.__exportStar(require("../core/services.js"), exports);
|
13
|
+
async function authorizeNode(authInput, serviceConfig, cacheOptions) {
|
14
|
+
let authData;
|
15
|
+
try {
|
16
|
+
authData = extractAuthorizationData(authInput);
|
17
|
+
}
|
18
|
+
catch (e) {
|
19
|
+
if (e instanceof Error && e.message === "KEY_CONFLICT") {
|
20
|
+
return {
|
21
|
+
authorized: false,
|
22
|
+
status: 400,
|
23
|
+
errorMessage: "Please pass either a client id or a secret key.",
|
24
|
+
errorCode: "KEY_CONFLICT",
|
25
|
+
};
|
26
|
+
}
|
27
|
+
return {
|
28
|
+
authorized: false,
|
29
|
+
status: 500,
|
30
|
+
errorMessage: "Internal Server Error",
|
31
|
+
errorCode: "INTERNAL_SERVER_ERROR",
|
32
|
+
};
|
33
|
+
}
|
34
|
+
return await (0, index_js_1.authorize)(authData, serviceConfig, cacheOptions);
|
35
|
+
}
|
36
|
+
function isNodeHeaders(headers) {
|
37
|
+
return typeof headers === "object" && !("get" in headers);
|
38
|
+
}
|
39
|
+
function getHeader(headers, headerName) {
|
40
|
+
return isNodeHeaders(headers)
|
41
|
+
? Array.isArray(headers[headerName])
|
42
|
+
? (headers[headerName]?.[0] ?? null)
|
43
|
+
: (headers[headerName] ?? null)
|
44
|
+
: (headers.get(headerName) ?? null);
|
45
|
+
}
|
46
|
+
function extractAuthorizationData(authInput) {
|
47
|
+
let requestUrl;
|
48
|
+
try {
|
49
|
+
requestUrl = new URL(authInput.req.url || "", `http://${getHeader(authInput.req.headers, "host")}`);
|
50
|
+
}
|
51
|
+
catch (error) {
|
52
|
+
console.log("** Node URL Error **", error);
|
53
|
+
throw error;
|
54
|
+
}
|
55
|
+
const headers = authInput.req.headers;
|
56
|
+
const secretKey = getHeader(headers, "x-secret-key");
|
57
|
+
// prefer clientId that is explicitly passed in
|
58
|
+
let clientId = authInput.clientId ?? null;
|
59
|
+
if (!clientId) {
|
60
|
+
// next preference is clientId from header
|
61
|
+
clientId = getHeader(headers, "x-client-id");
|
62
|
+
}
|
63
|
+
// next preference is search param
|
64
|
+
if (!clientId) {
|
65
|
+
clientId = requestUrl.searchParams.get("clientId");
|
66
|
+
}
|
67
|
+
// bundle id from header is first preference
|
68
|
+
let bundleId = getHeader(headers, "x-bundle-id");
|
69
|
+
// next preference is search param
|
70
|
+
if (!bundleId) {
|
71
|
+
bundleId = requestUrl.searchParams.get("bundleId");
|
72
|
+
}
|
73
|
+
let ecosystemId = getHeader(headers, "x-ecosystem-id");
|
74
|
+
if (!ecosystemId) {
|
75
|
+
ecosystemId = requestUrl.searchParams.get("ecosystemId");
|
76
|
+
}
|
77
|
+
let ecosystemPartnerId = getHeader(headers, "x-ecosystem-partner-id");
|
78
|
+
if (!ecosystemPartnerId) {
|
79
|
+
ecosystemPartnerId = requestUrl.searchParams.get("ecosystemPartnerId");
|
80
|
+
}
|
81
|
+
let origin = getHeader(headers, "origin");
|
82
|
+
// if origin header is not available we'll fall back to referrer;
|
83
|
+
if (!origin) {
|
84
|
+
origin = getHeader(headers, "referer");
|
85
|
+
}
|
86
|
+
// if we have an origin at this point, normalize it
|
87
|
+
if (origin) {
|
88
|
+
try {
|
89
|
+
origin = new URL(origin).host;
|
90
|
+
}
|
91
|
+
catch (e) {
|
92
|
+
console.warn("failed to parse origin", origin, e);
|
93
|
+
}
|
94
|
+
}
|
95
|
+
// handle if we a secret key is passed in the headers
|
96
|
+
let secretKeyHash = null;
|
97
|
+
if (secretKey) {
|
98
|
+
// hash the secret key
|
99
|
+
secretKeyHash = hashSecretKey(secretKey);
|
100
|
+
}
|
101
|
+
let jwt = null;
|
102
|
+
let useWalletAuth = null;
|
103
|
+
// check for authorization header on the request
|
104
|
+
const authorizationHeader = getHeader(headers, "authorization");
|
105
|
+
if (authorizationHeader) {
|
106
|
+
const [type, token] = authorizationHeader.split(" ");
|
107
|
+
if (type?.toLowerCase() === "bearer" && !!token) {
|
108
|
+
jwt = token;
|
109
|
+
const walletAuthHeader = getHeader(headers, "x-authorize-wallet");
|
110
|
+
// IK a stringified boolean is not ideal, but it's required to pass it in the headers.
|
111
|
+
if (walletAuthHeader?.toLowerCase() === "true") {
|
112
|
+
useWalletAuth = walletAuthHeader;
|
113
|
+
}
|
114
|
+
}
|
115
|
+
}
|
116
|
+
return {
|
117
|
+
jwt,
|
118
|
+
hashedJWT: jwt ? hashSecretKey(jwt) : null,
|
119
|
+
secretKeyHash,
|
120
|
+
secretKey,
|
121
|
+
clientId,
|
122
|
+
ecosystemId,
|
123
|
+
ecosystemPartnerId,
|
124
|
+
origin,
|
125
|
+
bundleId,
|
126
|
+
targetAddress: authInput.targetAddress,
|
127
|
+
useWalletAuth,
|
128
|
+
};
|
129
|
+
}
|
130
|
+
function hashSecretKey(secretKey) {
|
131
|
+
return (0, node_crypto_1.createHash)("sha256").update(secretKey).digest("hex");
|
132
|
+
}
|
133
|
+
function logHttpRequest({ clientId, req, res, isAuthed, statusMessage, latencyMs, }) {
|
134
|
+
try {
|
135
|
+
const authorizationData = extractAuthorizationData({ req, clientId });
|
136
|
+
const headers = req.headers;
|
137
|
+
console.log(JSON.stringify({
|
138
|
+
method: req.method,
|
139
|
+
pathname: req.url,
|
140
|
+
hasSecretKey: !!authorizationData.secretKey,
|
141
|
+
hasClientId: !!authorizationData.clientId,
|
142
|
+
hasJwt: !!authorizationData.jwt,
|
143
|
+
clientId: authorizationData.clientId,
|
144
|
+
isAuthed,
|
145
|
+
status: res.statusCode,
|
146
|
+
statusMessage,
|
147
|
+
sdkName: getHeader(headers, "x-sdk-name"),
|
148
|
+
sdkVersion: getHeader(headers, "x-sdk-version"),
|
149
|
+
platform: getHeader(headers, "x-sdk-platform"),
|
150
|
+
os: getHeader(headers, "x-sdk-os"),
|
151
|
+
latencyMs,
|
152
|
+
}));
|
153
|
+
}
|
154
|
+
catch { }
|
155
|
+
}
|
156
|
+
//# 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":"commonjs"}
|
@@ -0,0 +1,145 @@
|
|
1
|
+
import { authorize } from "../core/authorize/index.js";
|
2
|
+
export * from "./usage.js";
|
3
|
+
export * from "../core/services.js";
|
4
|
+
export * from "../core/rateLimit/index.js";
|
5
|
+
const DEFAULT_CACHE_TTL_SECONDS = 60;
|
6
|
+
export async function authorizeWorker(authInput, serviceConfig) {
|
7
|
+
let authData;
|
8
|
+
try {
|
9
|
+
authData = await extractAuthorizationData(authInput);
|
10
|
+
}
|
11
|
+
catch (e) {
|
12
|
+
if (e instanceof Error && e.message === "KEY_CONFLICT") {
|
13
|
+
return {
|
14
|
+
authorized: false,
|
15
|
+
status: 400,
|
16
|
+
errorMessage: "Please pass either a client id or a secret key.",
|
17
|
+
errorCode: "KEY_CONFLICT",
|
18
|
+
};
|
19
|
+
}
|
20
|
+
return {
|
21
|
+
authorized: false,
|
22
|
+
status: 500,
|
23
|
+
errorMessage: "Internal Server Error",
|
24
|
+
errorCode: "INTERNAL_SERVER_ERROR",
|
25
|
+
};
|
26
|
+
}
|
27
|
+
return await authorize(authData, serviceConfig, {
|
28
|
+
get: async (clientId) => serviceConfig.kvStore.get(clientId),
|
29
|
+
put: (clientId, data) => serviceConfig.ctx.waitUntil(serviceConfig.kvStore.put(clientId, JSON.stringify({
|
30
|
+
updatedAt: Date.now(),
|
31
|
+
data,
|
32
|
+
}), {
|
33
|
+
expirationTtl: serviceConfig.cacheTtlSeconds &&
|
34
|
+
serviceConfig.cacheTtlSeconds >= DEFAULT_CACHE_TTL_SECONDS
|
35
|
+
? serviceConfig.cacheTtlSeconds
|
36
|
+
: DEFAULT_CACHE_TTL_SECONDS,
|
37
|
+
})),
|
38
|
+
cacheTtlSeconds: serviceConfig.cacheTtlSeconds ?? DEFAULT_CACHE_TTL_SECONDS,
|
39
|
+
});
|
40
|
+
}
|
41
|
+
export async function extractAuthorizationData(authInput) {
|
42
|
+
const requestUrl = new URL(authInput.req.url);
|
43
|
+
const headers = authInput.req.headers;
|
44
|
+
const secretKey = headers.get("x-secret-key");
|
45
|
+
// prefer clientId that is explicitly passed in
|
46
|
+
let clientId = authInput.clientId ?? null;
|
47
|
+
if (!clientId) {
|
48
|
+
// next preference is clientId from header
|
49
|
+
clientId = headers.get("x-client-id");
|
50
|
+
}
|
51
|
+
// next preference is search param
|
52
|
+
if (!clientId) {
|
53
|
+
clientId = requestUrl.searchParams.get("clientId");
|
54
|
+
}
|
55
|
+
// bundle id from header is first preference
|
56
|
+
let bundleId = headers.get("x-bundle-id");
|
57
|
+
// next preference is search param
|
58
|
+
if (!bundleId) {
|
59
|
+
bundleId = requestUrl.searchParams.get("bundleId");
|
60
|
+
}
|
61
|
+
let ecosystemId = headers.get("x-ecosystem-id");
|
62
|
+
if (!ecosystemId) {
|
63
|
+
ecosystemId = requestUrl.searchParams.get("ecosystemId");
|
64
|
+
}
|
65
|
+
let ecosystemPartnerId = headers.get("x-ecosystem-partner-id");
|
66
|
+
if (!ecosystemPartnerId) {
|
67
|
+
ecosystemPartnerId = requestUrl.searchParams.get("ecosystemPartnerId");
|
68
|
+
}
|
69
|
+
let origin = headers.get("origin");
|
70
|
+
// if origin header is not available we'll fall back to referrer;
|
71
|
+
if (!origin) {
|
72
|
+
origin = headers.get("referer");
|
73
|
+
}
|
74
|
+
// if we have an origin at this point, normalize it
|
75
|
+
if (origin) {
|
76
|
+
try {
|
77
|
+
origin = new URL(origin).host;
|
78
|
+
}
|
79
|
+
catch (e) {
|
80
|
+
console.warn("failed to parse origin", origin, e);
|
81
|
+
}
|
82
|
+
}
|
83
|
+
// handle if we a secret key is passed in the headers
|
84
|
+
let secretKeyHash = null;
|
85
|
+
if (secretKey) {
|
86
|
+
// hash the secret key
|
87
|
+
secretKeyHash = await hashSecretKey(secretKey);
|
88
|
+
}
|
89
|
+
let jwt = null;
|
90
|
+
if (headers.has("authorization")) {
|
91
|
+
const authHeader = headers.get("authorization");
|
92
|
+
if (authHeader) {
|
93
|
+
const [type, token] = authHeader.split(" ");
|
94
|
+
if (type?.toLowerCase() === "bearer" && !!token) {
|
95
|
+
jwt = token;
|
96
|
+
}
|
97
|
+
}
|
98
|
+
}
|
99
|
+
return {
|
100
|
+
jwt,
|
101
|
+
hashedJWT: jwt ? await hashSecretKey(jwt) : null,
|
102
|
+
secretKey,
|
103
|
+
clientId,
|
104
|
+
ecosystemId,
|
105
|
+
ecosystemPartnerId,
|
106
|
+
origin,
|
107
|
+
bundleId,
|
108
|
+
secretKeyHash,
|
109
|
+
targetAddress: authInput.targetAddress,
|
110
|
+
};
|
111
|
+
}
|
112
|
+
export async function hashSecretKey(secretKey) {
|
113
|
+
return bufferToHex(await crypto.subtle.digest("SHA-256", new TextEncoder().encode(secretKey)));
|
114
|
+
}
|
115
|
+
function bufferToHex(buffer) {
|
116
|
+
return [...new Uint8Array(buffer)]
|
117
|
+
.map((x) => x.toString(16).padStart(2, "0"))
|
118
|
+
.join("");
|
119
|
+
}
|
120
|
+
export async function logHttpRequest({ clientId, req, res, isAuthed, statusMessage, latencyMs, }) {
|
121
|
+
try {
|
122
|
+
const authorizationData = await extractAuthorizationData({ req, clientId });
|
123
|
+
const headers = req.headers;
|
124
|
+
console.log(JSON.stringify({
|
125
|
+
method: req.method,
|
126
|
+
pathname: req.url,
|
127
|
+
hasSecretKey: !!authorizationData.secretKey,
|
128
|
+
hasClientId: !!authorizationData.clientId,
|
129
|
+
hasJwt: !!authorizationData.jwt,
|
130
|
+
clientId: authorizationData.clientId,
|
131
|
+
isAuthed,
|
132
|
+
status: res.status,
|
133
|
+
sdkName: headers.get("x-sdk-name") ?? undefined,
|
134
|
+
sdkVersion: headers.get("x-sdk-version") ?? undefined,
|
135
|
+
platform: headers.get("x-sdk-platform") ?? undefined,
|
136
|
+
os: headers.get("x-sdk-os") ?? undefined,
|
137
|
+
latencyMs,
|
138
|
+
}));
|
139
|
+
if (statusMessage) {
|
140
|
+
console.log(`statusMessage=${statusMessage}`);
|
141
|
+
}
|
142
|
+
}
|
143
|
+
catch { }
|
144
|
+
}
|
145
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cf-worker/index.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,53 @@
|
|
1
|
+
import { AwsClient } from "aws4fetch";
|
2
|
+
import { usageEventSchema } from "../core/usage.js";
|
3
|
+
// Initialize a singleton for AWS usage.
|
4
|
+
let _aws;
|
5
|
+
function getAws(options) {
|
6
|
+
if (!_aws) {
|
7
|
+
_aws = new AwsClient(options);
|
8
|
+
}
|
9
|
+
return _aws;
|
10
|
+
}
|
11
|
+
/**
|
12
|
+
* Publish usage events. Provide the relevant fields for your application.
|
13
|
+
*
|
14
|
+
* Usage in Cloudflare Workers:
|
15
|
+
* ctx.waitUntil(
|
16
|
+
* publishUsageEvents(
|
17
|
+
* [event1, event2],
|
18
|
+
* { queueUrl, accessKeyId, secretAccessKey },
|
19
|
+
* )
|
20
|
+
* )
|
21
|
+
*
|
22
|
+
* @param usageEvents
|
23
|
+
* @param config
|
24
|
+
*/
|
25
|
+
async function publishUsageEvents(usageEvents, config) {
|
26
|
+
const { queueUrl, accessKeyId, secretAccessKey, region = "us-west-2", } = config;
|
27
|
+
const entries = usageEvents.map((event) => {
|
28
|
+
// Enforce schema of usage event.
|
29
|
+
const parsed = usageEventSchema.parse(event);
|
30
|
+
return {
|
31
|
+
Id: crypto.randomUUID(),
|
32
|
+
MessageBody: JSON.stringify(parsed),
|
33
|
+
};
|
34
|
+
});
|
35
|
+
const aws = getAws({
|
36
|
+
accessKeyId,
|
37
|
+
secretAccessKey,
|
38
|
+
region,
|
39
|
+
});
|
40
|
+
await aws.fetch(`https://sqs.${region}.amazonaws.com`, {
|
41
|
+
headers: {
|
42
|
+
"X-Amz-Target": "AmazonSQS.SendMessageBatch",
|
43
|
+
"X-Amz-Date": new Date().toISOString(),
|
44
|
+
"Content-Type": "application/x-amz-json-1.0",
|
45
|
+
},
|
46
|
+
body: JSON.stringify({
|
47
|
+
QueueUrl: queueUrl,
|
48
|
+
Entries: entries,
|
49
|
+
}),
|
50
|
+
});
|
51
|
+
}
|
52
|
+
export { publishUsageEvents };
|
53
|
+
//# sourceMappingURL=usage.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../src/cf-worker/usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAmB,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGrE,wCAAwC;AACxC,IAAI,IAA2B,CAAC;AAChC,SAAS,MAAM,CAAC,OAAmD;IACjE,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,KAAK,UAAU,kBAAkB,CAC/B,WAAyB,EACzB,MAKC;IAED,MAAM,EACJ,QAAQ,EACR,WAAW,EACX,eAAe,EACf,MAAM,GAAG,WAAW,GACrB,GAAG,MAAM,CAAC;IAEX,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACxC,iCAAiC;QACjC,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7C,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;YACvB,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;SACpC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,MAAM,CAAC;QACjB,WAAW;QACX,eAAe;QACf,MAAM;KACP,CAAC,CAAC;IACH,MAAM,GAAG,CAAC,KAAK,CAAC,eAAe,MAAM,gBAAgB,EAAE;QACrD,OAAO,EAAE;YACP,cAAc,EAAE,4BAA4B;YAC5C,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACtC,cAAc,EAAE,4BAA4B;SAC7C;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,OAAO;SACjB,CAAC;KACH,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|