Add subscription support + license extension on renewal
This commit is contained in:
+34
@@ -0,0 +1,34 @@
|
||||
import { CryptoProvider } from '../crypto/CryptoProvider.js';
|
||||
import { FetchHttpClientInterface, HttpClient, NodeHttpClientInterface } from '../net/HttpClient.js';
|
||||
import { StripeEventEmitter } from '../StripeEventEmitter.js';
|
||||
import { BufferedFile, MultipartRequestData, RequestAuthenticator, RequestData } from '../Types.js';
|
||||
import { PlatformFunctions } from './PlatformFunctions.js';
|
||||
/**
|
||||
* Platform functions for extensibility scripts.
|
||||
*/
|
||||
export declare class ExtensibilityPlatformFunctions extends PlatformFunctions {
|
||||
/** @override */
|
||||
emitWarning(_warning: string): void;
|
||||
/** @override */
|
||||
getEnv(): null;
|
||||
/** @override */
|
||||
getRuntimeVersion(): null;
|
||||
/** @override */
|
||||
getDefaultMaxNetworkRetries(): number;
|
||||
/** @override */
|
||||
createDefaultAuthenticator(): RequestAuthenticator;
|
||||
/** @override */
|
||||
createEmitter(): StripeEventEmitter;
|
||||
/** @override */
|
||||
tryBufferData(data: MultipartRequestData): Promise<RequestData | BufferedFile>;
|
||||
/** @override */
|
||||
createDefaultHttpClient(): HttpClient;
|
||||
/** @override */
|
||||
createFetchHttpClient(): FetchHttpClientInterface;
|
||||
/** @override */
|
||||
createNodeHttpClient(): NodeHttpClientInterface;
|
||||
/** @override */
|
||||
createNodeCryptoProvider(): CryptoProvider;
|
||||
/** @override */
|
||||
createDefaultCryptoProvider(): CryptoProvider;
|
||||
}
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
import { EndpointFetchHttpClient } from '../net/EndpointFetchHttpClient.js';
|
||||
import { StripeEventEmitter } from '../StripeEventEmitter.js';
|
||||
import { PlatformFunctions } from './PlatformFunctions.js';
|
||||
const unsupportedRuntimeError = (method, alternative) => new Error(`Stripe: \`${method}()\` is not available in the extensibility runtime.` +
|
||||
(alternative ? ` ${alternative}` : ''));
|
||||
/**
|
||||
* Platform functions for extensibility scripts.
|
||||
*/
|
||||
export class ExtensibilityPlatformFunctions extends PlatformFunctions {
|
||||
/** @override */
|
||||
emitWarning(_warning) {
|
||||
// Extensibility runtime has no user-visible warning target.
|
||||
}
|
||||
/** @override */
|
||||
getEnv() {
|
||||
return null;
|
||||
}
|
||||
/** @override */
|
||||
getRuntimeVersion() {
|
||||
return null;
|
||||
}
|
||||
/** @override */
|
||||
getDefaultMaxNetworkRetries() {
|
||||
return 0;
|
||||
}
|
||||
/** @override */
|
||||
createDefaultAuthenticator() {
|
||||
// Authentication is injected automatically.
|
||||
return () => Promise.resolve();
|
||||
}
|
||||
/** @override */
|
||||
createEmitter() {
|
||||
return new StripeEventEmitter();
|
||||
}
|
||||
/** @override */
|
||||
tryBufferData(data) {
|
||||
return Promise.resolve(data);
|
||||
}
|
||||
/** @override */
|
||||
createDefaultHttpClient() {
|
||||
return new EndpointFetchHttpClient();
|
||||
}
|
||||
/** @override */
|
||||
createFetchHttpClient() {
|
||||
throw unsupportedRuntimeError('createFetchHttpClient', 'Use the default `endpointFetch` HTTP client instead.');
|
||||
}
|
||||
/** @override */
|
||||
createNodeHttpClient() {
|
||||
throw unsupportedRuntimeError('createNodeHttpClient', 'Use the default `endpointFetch` HTTP client instead.');
|
||||
}
|
||||
/** @override */
|
||||
createNodeCryptoProvider() {
|
||||
throw unsupportedRuntimeError('createNodeCryptoProvider');
|
||||
}
|
||||
/** @override */
|
||||
createDefaultCryptoProvider() {
|
||||
throw unsupportedRuntimeError('createDefaultCryptoProvider', 'Pass an explicit `CryptoProvider` for crypto-dependent helpers.');
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=ExtensibilityPlatformFunctions.js.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"ExtensibilityPlatformFunctions.js","sourceRoot":"","sources":["../../src/platform/ExtensibilityPlatformFunctions.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,uBAAuB,EAAC,MAAM,mCAAmC,CAAC;AAM1E,OAAO,EAAC,kBAAkB,EAAC,MAAM,0BAA0B,CAAC;AAO5D,OAAO,EAAC,iBAAiB,EAAC,MAAM,wBAAwB,CAAC;AAEzD,MAAM,uBAAuB,GAAG,CAAC,MAAc,EAAE,WAAoB,EAAS,EAAE,CAC9E,IAAI,KAAK,CACP,aAAa,MAAM,qDAAqD;IACtE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CACzC,CAAC;AAEJ;;GAEG;AACH,MAAM,OAAO,8BAA+B,SAAQ,iBAAiB;IACnE,gBAAgB;IAChB,WAAW,CAAC,QAAgB;QAC1B,4DAA4D;IAC9D,CAAC;IAED,gBAAgB;IAChB,MAAM;QACJ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB;IAChB,iBAAiB;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB;IAChB,2BAA2B;QACzB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,gBAAgB;IAChB,0BAA0B;QACxB,4CAA4C;QAC5C,OAAO,GAAkB,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IAChD,CAAC;IAED,gBAAgB;IAChB,aAAa;QACX,OAAO,IAAI,kBAAkB,EAAE,CAAC;IAClC,CAAC;IAED,gBAAgB;IAChB,aAAa,CACX,IAA0B;QAE1B,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,gBAAgB;IAChB,uBAAuB;QACrB,OAAO,IAAI,uBAAuB,EAAE,CAAC;IACvC,CAAC;IAED,gBAAgB;IAChB,qBAAqB;QACnB,MAAM,uBAAuB,CAC3B,uBAAuB,EACvB,sDAAsD,CACvD,CAAC;IACJ,CAAC;IAED,gBAAgB;IAChB,oBAAoB;QAClB,MAAM,uBAAuB,CAC3B,sBAAsB,EACtB,sDAAsD,CACvD,CAAC;IACJ,CAAC;IAED,gBAAgB;IAChB,wBAAwB;QACtB,MAAM,uBAAuB,CAAC,0BAA0B,CAAC,CAAC;IAC5D,CAAC;IAED,gBAAgB;IAChB,2BAA2B;QACzB,MAAM,uBAAuB,CAC3B,6BAA6B,EAC7B,iEAAiE,CAClE,CAAC;IACJ,CAAC;CACF"}
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
/// <reference types="node" />
|
||||
/// <reference types="node" />
|
||||
import * as http from 'http';
|
||||
import { CryptoProvider } from '../crypto/CryptoProvider.js';
|
||||
import { EventEmitter } from 'events';
|
||||
import { HttpClient, NodeHttpClientInterface } from '../net/HttpClient.js';
|
||||
import { PlatformFunctions } from './PlatformFunctions.js';
|
||||
import { MultipartRequestData, RequestData, BufferedFile } from '../Types.js';
|
||||
/**
|
||||
* Specializes WebPlatformFunctions using APIs available in Node.js.
|
||||
*/
|
||||
export declare class NodePlatformFunctions extends PlatformFunctions {
|
||||
/** @override */
|
||||
uuid4(): string;
|
||||
/** @override */
|
||||
getPlatformInfo(): string;
|
||||
/** @override */
|
||||
writeStderr(msg: string): void;
|
||||
/** @override */
|
||||
emitWarning(warning: string): void;
|
||||
/** @override */
|
||||
getEnv(): Record<string, string | undefined>;
|
||||
/** @override */
|
||||
getRuntimeVersion(): string;
|
||||
private _telemetryId;
|
||||
/** @override */
|
||||
getTelemetryId(): string | null;
|
||||
private _getTelemetryIdPath;
|
||||
/**
|
||||
* @override
|
||||
* Secure compare, from https://github.com/freewil/scmp
|
||||
*/
|
||||
secureCompare(a: string, b: string): boolean;
|
||||
createEmitter(): EventEmitter;
|
||||
/** @override */
|
||||
tryBufferData(data: MultipartRequestData): Promise<RequestData | BufferedFile>;
|
||||
/** @override */
|
||||
createNodeHttpClient(agent?: http.Agent): NodeHttpClientInterface;
|
||||
/** @override */
|
||||
createDefaultHttpClient(): HttpClient;
|
||||
/** @override */
|
||||
createNodeCryptoProvider(): CryptoProvider;
|
||||
/** @override */
|
||||
createDefaultCryptoProvider(): CryptoProvider;
|
||||
}
|
||||
+172
@@ -0,0 +1,172 @@
|
||||
import * as crypto from 'crypto';
|
||||
import * as fs from 'fs';
|
||||
import * as os from 'os';
|
||||
import * as path from 'path';
|
||||
import { EventEmitter } from 'events';
|
||||
import { NodeCryptoProvider } from '../crypto/NodeCryptoProvider.js';
|
||||
import { NodeHttpClient } from '../net/NodeHttpClient.js';
|
||||
import { PlatformFunctions } from './PlatformFunctions.js';
|
||||
import { StripeError } from '../Error.js';
|
||||
import { concat } from '../utils.js';
|
||||
class StreamProcessingError extends StripeError {
|
||||
}
|
||||
/**
|
||||
* Specializes WebPlatformFunctions using APIs available in Node.js.
|
||||
*/
|
||||
export class NodePlatformFunctions extends PlatformFunctions {
|
||||
constructor() {
|
||||
super(...arguments);
|
||||
this._telemetryId = undefined;
|
||||
}
|
||||
/** @override */
|
||||
uuid4() {
|
||||
// available in: v14.17.x+
|
||||
if (crypto.randomUUID) {
|
||||
return crypto.randomUUID();
|
||||
}
|
||||
return super.uuid4();
|
||||
}
|
||||
/** @override */
|
||||
getPlatformInfo() {
|
||||
return `${process.platform} ${os.release()} ${os.arch()}`;
|
||||
}
|
||||
/** @override */
|
||||
writeStderr(msg) {
|
||||
process.stderr.write(msg);
|
||||
}
|
||||
/** @override */
|
||||
emitWarning(warning) {
|
||||
if (typeof process.emitWarning === 'function') {
|
||||
process.emitWarning(warning, 'Stripe');
|
||||
}
|
||||
else {
|
||||
super.emitWarning(warning);
|
||||
}
|
||||
}
|
||||
/** @override */
|
||||
getEnv() {
|
||||
return process.env;
|
||||
}
|
||||
/** @override */
|
||||
getRuntimeVersion() {
|
||||
return process.version;
|
||||
}
|
||||
/** @override */
|
||||
getTelemetryId() {
|
||||
if (this._telemetryId !== undefined) {
|
||||
return this._telemetryId;
|
||||
}
|
||||
const filePath = this._getTelemetryIdPath();
|
||||
if (!filePath) {
|
||||
this._telemetryId = null;
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
// eslint-disable-next-line no-sync
|
||||
const content = fs.readFileSync(filePath, 'utf8').trim();
|
||||
if (content) {
|
||||
this._telemetryId = content;
|
||||
return content;
|
||||
}
|
||||
// eslint-disable-next-line no-empty
|
||||
}
|
||||
catch { }
|
||||
const newId = crypto.randomBytes(16).toString('hex');
|
||||
try {
|
||||
// eslint-disable-next-line no-sync
|
||||
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
||||
// eslint-disable-next-line no-sync
|
||||
fs.writeFileSync(filePath, newId, 'utf8');
|
||||
}
|
||||
catch {
|
||||
this._telemetryId = null;
|
||||
return null;
|
||||
}
|
||||
this._telemetryId = newId;
|
||||
return newId;
|
||||
}
|
||||
_getTelemetryIdPath() {
|
||||
if (process.platform === 'win32') {
|
||||
const appData = process.env.APPDATA;
|
||||
if (!appData)
|
||||
return null;
|
||||
return path.join(appData, 'Stripe', 'telemetry_id');
|
||||
}
|
||||
const xdg = process.env.XDG_CONFIG_HOME;
|
||||
if (xdg) {
|
||||
return path.join(xdg, 'stripe', 'telemetry_id');
|
||||
}
|
||||
const home = os.homedir();
|
||||
if (!home)
|
||||
return null;
|
||||
return path.join(home, '.config', 'stripe', 'telemetry_id');
|
||||
}
|
||||
/**
|
||||
* @override
|
||||
* Secure compare, from https://github.com/freewil/scmp
|
||||
*/
|
||||
secureCompare(a, b) {
|
||||
if (!a || !b) {
|
||||
throw new Error('secureCompare must receive two arguments');
|
||||
}
|
||||
// return early here if buffer lengths are not equal since timingSafeEqual
|
||||
// will throw if buffer lengths are not equal
|
||||
if (a.length !== b.length) {
|
||||
return false;
|
||||
}
|
||||
// use crypto.timingSafeEqual if available (since Node.js v6.6.0),
|
||||
// otherwise use our own scmp-internal function.
|
||||
if (crypto.timingSafeEqual) {
|
||||
const textEncoder = new TextEncoder();
|
||||
const aEncoded = textEncoder.encode(a);
|
||||
const bEncoded = textEncoder.encode(b);
|
||||
return crypto.timingSafeEqual(aEncoded, bEncoded);
|
||||
}
|
||||
return super.secureCompare(a, b);
|
||||
}
|
||||
createEmitter() {
|
||||
return new EventEmitter();
|
||||
}
|
||||
/** @override */
|
||||
tryBufferData(data) {
|
||||
if (!(data.file.data instanceof EventEmitter)) {
|
||||
return Promise.resolve(data);
|
||||
}
|
||||
const bufferArray = [];
|
||||
return new Promise((resolve, reject) => {
|
||||
data.file.data
|
||||
.on('data', (line) => {
|
||||
bufferArray.push(line);
|
||||
})
|
||||
.once('end', () => {
|
||||
// @ts-ignore
|
||||
const bufferData = Object.assign({}, data);
|
||||
bufferData.file.data = concat(bufferArray);
|
||||
resolve(bufferData);
|
||||
})
|
||||
.on('error', (err) => {
|
||||
reject(new StreamProcessingError({
|
||||
message: 'An error occurred while attempting to process the file for upload.',
|
||||
detail: err,
|
||||
}));
|
||||
});
|
||||
});
|
||||
}
|
||||
/** @override */
|
||||
createNodeHttpClient(agent) {
|
||||
return new NodeHttpClient(agent);
|
||||
}
|
||||
/** @override */
|
||||
createDefaultHttpClient() {
|
||||
return new NodeHttpClient();
|
||||
}
|
||||
/** @override */
|
||||
createNodeCryptoProvider() {
|
||||
return new NodeCryptoProvider();
|
||||
}
|
||||
/** @override */
|
||||
createDefaultCryptoProvider() {
|
||||
return this.createNodeCryptoProvider();
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=NodePlatformFunctions.js.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"NodePlatformFunctions.js","sourceRoot":"","sources":["../../src/platform/NodePlatformFunctions.ts"],"names":[],"mappings":"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"}
|
||||
+93
@@ -0,0 +1,93 @@
|
||||
/// <reference types="node" />
|
||||
import * as http from 'http';
|
||||
import { CryptoProvider } from '../crypto/CryptoProvider.js';
|
||||
import { HttpClient, NodeHttpClientInterface, FetchHttpClientInterface } from '../net/HttpClient.js';
|
||||
import { MultipartRequestData, RequestData, BufferedFile, RequestEvent, ResponseEvent, RequestAuthenticator } from '../Types.js';
|
||||
export interface StripeEmitterInterface {
|
||||
on(eventName: string, listener: (...args: any[]) => any): void;
|
||||
once(eventName: string, listener: (...args: any[]) => any): void;
|
||||
removeListener(eventName: string, listener: (...args: any[]) => any): void;
|
||||
emit(eventName: string, data?: RequestEvent | ResponseEvent): boolean;
|
||||
}
|
||||
/**
|
||||
* Interface encapsulating various utility functions whose
|
||||
* implementations depend on the platform / JS runtime.
|
||||
*/
|
||||
export declare class PlatformFunctions {
|
||||
_fetchFn: any | null;
|
||||
_agent: http.Agent | null;
|
||||
constructor();
|
||||
/**
|
||||
* Returns platform info string for telemetry, or null if unavailable.
|
||||
*/
|
||||
getPlatformInfo(): string | null;
|
||||
getTelemetryId(): string | null;
|
||||
/**
|
||||
* Writes a message to stderr, or does nothing if unavailable.
|
||||
*/
|
||||
writeStderr(_msg: string): void;
|
||||
/**
|
||||
* Emits a warning. Node.js uses process.emitWarning; other runtimes
|
||||
* fall back to console.warn.
|
||||
*/
|
||||
emitWarning(warning: string): void;
|
||||
/**
|
||||
* Returns environment variables, or null if unavailable.
|
||||
*/
|
||||
getEnv(): Record<string, string | undefined> | null;
|
||||
/**
|
||||
* Returns the runtime version string, or null if unavailable.
|
||||
*/
|
||||
getRuntimeVersion(): string | null;
|
||||
/**
|
||||
* Returns the default number of network retries for this platform.
|
||||
*/
|
||||
getDefaultMaxNetworkRetries(): number;
|
||||
/**
|
||||
* Returns the default request authenticator for this platform.
|
||||
*/
|
||||
createDefaultAuthenticator(): RequestAuthenticator | null;
|
||||
/**
|
||||
* Generates a v4 UUID. See https://stackoverflow.com/a/2117523
|
||||
*/
|
||||
uuid4(): string;
|
||||
/**
|
||||
* Compares strings in constant time.
|
||||
*/
|
||||
secureCompare(a: string, b: string): boolean;
|
||||
/**
|
||||
* Creates an event emitter.
|
||||
*/
|
||||
createEmitter(): StripeEmitterInterface;
|
||||
/**
|
||||
* Checks if the request data is a stream. If so, read the entire stream
|
||||
* to a buffer and return the buffer.
|
||||
*/
|
||||
tryBufferData(data: MultipartRequestData): Promise<RequestData | BufferedFile>;
|
||||
/**
|
||||
* Creates an HTTP client which uses the Node `http` and `https` packages
|
||||
* to issue requests.
|
||||
*/
|
||||
createNodeHttpClient(agent?: http.Agent): NodeHttpClientInterface;
|
||||
/**
|
||||
* Creates an HTTP client for issuing Stripe API requests which uses the Web
|
||||
* Fetch API.
|
||||
*
|
||||
* A fetch function can optionally be passed in as a parameter. If none is
|
||||
* passed, will default to the default `fetch` function in the global scope.
|
||||
*/
|
||||
createFetchHttpClient(fetchFn?: typeof fetch): FetchHttpClientInterface;
|
||||
/**
|
||||
* Creates an HTTP client using runtime-specific APIs.
|
||||
*/
|
||||
createDefaultHttpClient(): HttpClient;
|
||||
/**
|
||||
* Creates a CryptoProvider which uses the Node `crypto` package for its computations.
|
||||
*/
|
||||
createNodeCryptoProvider(): CryptoProvider;
|
||||
/**
|
||||
* Creates a CryptoProvider which uses the SubtleCrypto interface of the Web Crypto API.
|
||||
*/
|
||||
createSubtleCryptoProvider(subtleCrypto?: typeof crypto.subtle): CryptoProvider;
|
||||
createDefaultCryptoProvider(): CryptoProvider;
|
||||
}
|
||||
+135
@@ -0,0 +1,135 @@
|
||||
import { FetchHttpClient } from '../net/FetchHttpClient.js';
|
||||
import { SubtleCryptoProvider } from '../crypto/SubtleCryptoProvider.js';
|
||||
/**
|
||||
* Interface encapsulating various utility functions whose
|
||||
* implementations depend on the platform / JS runtime.
|
||||
*/
|
||||
export class PlatformFunctions {
|
||||
constructor() {
|
||||
this._fetchFn = null;
|
||||
this._agent = null;
|
||||
}
|
||||
/**
|
||||
* Returns platform info string for telemetry, or null if unavailable.
|
||||
*/
|
||||
getPlatformInfo() {
|
||||
return null;
|
||||
}
|
||||
getTelemetryId() {
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
* Writes a message to stderr, or does nothing if unavailable.
|
||||
*/
|
||||
writeStderr(_msg) { }
|
||||
/**
|
||||
* Emits a warning. Node.js uses process.emitWarning; other runtimes
|
||||
* fall back to console.warn.
|
||||
*/
|
||||
emitWarning(warning) {
|
||||
/* eslint-disable no-console */
|
||||
console.warn(`Stripe: ${warning}`);
|
||||
/* eslint-enable no-console */
|
||||
}
|
||||
/**
|
||||
* Returns environment variables, or null if unavailable.
|
||||
*/
|
||||
getEnv() {
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
* Returns the runtime version string, or null if unavailable.
|
||||
*/
|
||||
getRuntimeVersion() {
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
* Returns the default number of network retries for this platform.
|
||||
*/
|
||||
getDefaultMaxNetworkRetries() {
|
||||
return 2;
|
||||
}
|
||||
/**
|
||||
* Returns the default request authenticator for this platform.
|
||||
*/
|
||||
createDefaultAuthenticator() {
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
* Generates a v4 UUID. See https://stackoverflow.com/a/2117523
|
||||
*/
|
||||
uuid4() {
|
||||
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
|
||||
const r = (Math.random() * 16) | 0;
|
||||
const v = c === 'x' ? r : (r & 0x3) | 0x8;
|
||||
return v.toString(16);
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Compares strings in constant time.
|
||||
*/
|
||||
secureCompare(a, b) {
|
||||
// return early here if buffer lengths are not equal
|
||||
if (a.length !== b.length) {
|
||||
return false;
|
||||
}
|
||||
const len = a.length;
|
||||
let result = 0;
|
||||
for (let i = 0; i < len; ++i) {
|
||||
result |= a.charCodeAt(i) ^ b.charCodeAt(i);
|
||||
}
|
||||
return result === 0;
|
||||
}
|
||||
/**
|
||||
* Creates an event emitter.
|
||||
*/
|
||||
createEmitter() {
|
||||
throw new Error('createEmitter not implemented.');
|
||||
}
|
||||
/**
|
||||
* Checks if the request data is a stream. If so, read the entire stream
|
||||
* to a buffer and return the buffer.
|
||||
*/
|
||||
tryBufferData(data) {
|
||||
throw new Error('tryBufferData not implemented.');
|
||||
}
|
||||
/**
|
||||
* Creates an HTTP client which uses the Node `http` and `https` packages
|
||||
* to issue requests.
|
||||
*/
|
||||
createNodeHttpClient(agent) {
|
||||
throw new Error('createNodeHttpClient not implemented.');
|
||||
}
|
||||
/**
|
||||
* Creates an HTTP client for issuing Stripe API requests which uses the Web
|
||||
* Fetch API.
|
||||
*
|
||||
* A fetch function can optionally be passed in as a parameter. If none is
|
||||
* passed, will default to the default `fetch` function in the global scope.
|
||||
*/
|
||||
createFetchHttpClient(fetchFn) {
|
||||
return new FetchHttpClient(fetchFn);
|
||||
}
|
||||
/**
|
||||
* Creates an HTTP client using runtime-specific APIs.
|
||||
*/
|
||||
createDefaultHttpClient() {
|
||||
throw new Error('createDefaultHttpClient not implemented.');
|
||||
}
|
||||
/**
|
||||
* Creates a CryptoProvider which uses the Node `crypto` package for its computations.
|
||||
*/
|
||||
createNodeCryptoProvider() {
|
||||
throw new Error('createNodeCryptoProvider not implemented.');
|
||||
}
|
||||
/**
|
||||
* Creates a CryptoProvider which uses the SubtleCrypto interface of the Web Crypto API.
|
||||
*/
|
||||
createSubtleCryptoProvider(subtleCrypto) {
|
||||
return new SubtleCryptoProvider(subtleCrypto);
|
||||
}
|
||||
createDefaultCryptoProvider() {
|
||||
throw new Error('createDefaultCryptoProvider not implemented.');
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=PlatformFunctions.js.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"PlatformFunctions.js","sourceRoot":"","sources":["../../src/platform/PlatformFunctions.ts"],"names":[],"mappings":"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"}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
import { CryptoProvider } from '../crypto/CryptoProvider.js';
|
||||
import { HttpClient, NodeHttpClientInterface } from '../net/HttpClient.js';
|
||||
import { PlatformFunctions } from './PlatformFunctions.js';
|
||||
import { StripeEmitter } from '../StripeEmitter.js';
|
||||
import { MultipartRequestData, RequestData, BufferedFile } from '../Types.js';
|
||||
/**
|
||||
* Specializes WebPlatformFunctions using APIs available in Web workers.
|
||||
*/
|
||||
export declare class WebPlatformFunctions extends PlatformFunctions {
|
||||
/** @override */
|
||||
createEmitter(): StripeEmitter;
|
||||
/** @override */
|
||||
tryBufferData(data: MultipartRequestData): Promise<RequestData | BufferedFile>;
|
||||
/** @override */
|
||||
createNodeHttpClient(): NodeHttpClientInterface;
|
||||
/** @override */
|
||||
createDefaultHttpClient(): HttpClient;
|
||||
/** @override */
|
||||
createNodeCryptoProvider(): CryptoProvider;
|
||||
/** @override */
|
||||
createDefaultCryptoProvider(): CryptoProvider;
|
||||
}
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
import { PlatformFunctions } from './PlatformFunctions.js';
|
||||
import { StripeEmitter } from '../StripeEmitter.js';
|
||||
/**
|
||||
* Specializes WebPlatformFunctions using APIs available in Web workers.
|
||||
*/
|
||||
export class WebPlatformFunctions extends PlatformFunctions {
|
||||
/** @override */
|
||||
createEmitter() {
|
||||
return new StripeEmitter();
|
||||
}
|
||||
/** @override */
|
||||
tryBufferData(data) {
|
||||
if (data.file.data instanceof ReadableStream) {
|
||||
throw new Error('Uploading a file as a stream is not supported in non-Node environments. Please open or upvote an issue at github.com/stripe/stripe-node if you use this, detailing your use-case.');
|
||||
}
|
||||
return Promise.resolve(data);
|
||||
}
|
||||
/** @override */
|
||||
createNodeHttpClient() {
|
||||
throw new Error('Stripe: `createNodeHttpClient()` is not available in non-Node environments. Please use `createFetchHttpClient()` instead.');
|
||||
}
|
||||
/** @override */
|
||||
createDefaultHttpClient() {
|
||||
return super.createFetchHttpClient();
|
||||
}
|
||||
/** @override */
|
||||
createNodeCryptoProvider() {
|
||||
throw new Error('Stripe: `createNodeCryptoProvider()` is not available in non-Node environments. Please use `createSubtleCryptoProvider()` instead.');
|
||||
}
|
||||
/** @override */
|
||||
createDefaultCryptoProvider() {
|
||||
return this.createSubtleCryptoProvider();
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=WebPlatformFunctions.js.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"WebPlatformFunctions.js","sourceRoot":"","sources":["../../src/platform/WebPlatformFunctions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,iBAAiB,EAAC,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAGlD;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,iBAAiB;IACzD,gBAAgB;IAChB,aAAa;QACX,OAAO,IAAI,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,gBAAgB;IAChB,aAAa,CACX,IAA0B;QAE1B,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,YAAY,cAAc,EAAE;YAC5C,MAAM,IAAI,KAAK,CACb,mLAAmL,CACpL,CAAC;SACH;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,gBAAgB;IAChB,oBAAoB;QAClB,MAAM,IAAI,KAAK,CACb,2HAA2H,CAC5H,CAAC;IACJ,CAAC;IAED,gBAAgB;IAChB,uBAAuB;QACrB,OAAO,KAAK,CAAC,qBAAqB,EAAE,CAAC;IACvC,CAAC;IAED,gBAAgB;IAChB,wBAAwB;QACtB,MAAM,IAAI,KAAK,CACb,oIAAoI,CACrI,CAAC;IACJ,CAAC;IAED,gBAAgB;IAChB,2BAA2B;QACzB,OAAO,IAAI,CAAC,0BAA0B,EAAE,CAAC;IAC3C,CAAC;CACF"}
|
||||
Reference in New Issue
Block a user